spezielle Variablenausgabe (Teil 3)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • spezielle Variablenausgabe (Teil 3)

    Hi Leut's,

    meine Flash/PHP Highscoreliste funkt super bis auf den Umstand, das php beim zurückschreiben auch den letzten Eintrag löscht wenn nicht 10 Einträge (soviel erlaube ich maximal) vorhanden sind. D.h. dass man noch irgendwo einen Check machen müßte, ob in der Data.txt auch wirklich 10 Highscore-Einträge vorhanden sind.

    Data.txt:
    Tiger2;1200
    tiger;1000
    Hoschi;700
    Martin;614
    Thomas;592
    Alex;541
    Richi;397
    Manfred;341
    tiger;1000

    php-writeback-funktion:
    <?
    $winner="tiger"; //kommt von Flash zurück
    $credits=1000; //kommt von Flash zurück

    $fp = fopen("data.txt","r");
    while($data = fgets($fp,1024)){ // zeile für zeile einlesen
    $data = explode(";",$data); // jede zeile aufsplitten
    $hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern
    }
    fclose($fp);

    arsort($hitlist);
    $min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert)

    if ($credits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
    $fp=fopen("data.txt","w");
    while (list ($key, $val) = each ($hitlist)) {
    fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben
    }
    fputs($fp,$winner.";".$credits."\n"); // und dann den neuen Eintrag am Ende anhängen
    fclose($fp);
    }
    ?>

    Bitte um Rat?!?!?

    CU
    $PHP resource 4ever$

  • #2
    Code:
    <? 
    $winner="tiger"; //kommt von Flash zurück 
    $credits=1000; //kommt von Flash zurück 
    
    $fp = fopen("data.txt","r"); 
    while($data = fgets($fp,1024)){ // zeile für zeile einlesen 
    	$data = explode(";",$data); // jede zeile aufsplitten 
    	$hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern 
    	} 
    fclose($fp); 
    
    arsort($hitlist);
    $eintraege=count($hitlist);	// wieviele Einträge sind es überhaupt -> max. 10 Stück 
    if ($eintraege<10) {	// letzten Eintrag nicht abspalten, sondern nur holen
    	end($hitlist);	// letzter Eintrag selektieren
    	list($key_min,$min)=each($hitlist);	// Credits holen, bleibt aber im Array erhalten
    	}
    else {
    	$min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert) 
    	}
    
    if ($credits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben 
    	$fp=fopen("data.txt","w"); 
    	while (list ($key, $val) = each ($hitlist)) { 
    		fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben 
    		} 
    	fputs($fp,$winner.";".$credits."\n"); // und dann den neuen Eintrag am Ende anhängen 
    	fclose($fp); 
    	} 
    ?>

    Kommentar


    • #3
      Danke BrainBug, werde das morgen mal auschecken!

      Meld mich!
      $PHP resource 4ever$

      Kommentar


      • #4
        Hi BrainBug. Hab's grad getestet. Es passiert bei der Funktion leider ein Fehler beim Zurückschreiben in die Data.txt
        Man kann den neuen Eintrag in die HighscoreListe in Flash zwar durchführen. Wenn man allerdings auf SaveScore klickt müßte php den Eintrag in die Data.txt reinschreiben. Genau das tut es nicht.
        Keine Ahnung warum. An Flash liegt es 100%ig nicht. Irgendwo paßt da was in der php-funktion nicht. Da ich ein paar Variablennamen geändert habe, hier nochmal die letzte Version:

        <?
        $winnername="hetfield"; //kommt von Flash zurück
        $winnercredits=998; //kommt von Flash zurück

        $fp = fopen("data.txt","r");
        while($data = fgets($fp,1024)){ // zeile für zeile einlesen
        $data = explode(";",$data); // jede zeile aufsplitten
        $hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern
        }
        fclose($fp);

        arsort($hitlist);
        $eintraege=count($hitlist); // max.10 Einträge erlauben
        if ($eintraege<10) { // letzten Eintrag nicht abspalten, sondern nur holen
        end($hitlist); // letzter Eintrag selektieren
        list($key_min,$min)=each($hitlist); // Credits holen, bleibt aber im Array erhalten
        }
        else {
        $min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert)
        }

        if ($credits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
        $fp=fopen("data.txt","w");
        while (list ($key, $val) = each ($hitlist)) {
        fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben
        }
        fputs($fp,$winnername.";".$winnercredits."\n"); // und dann den neuen Eintrag am Ende anhängen
        fclose($fp);
        }
        ?>
        $PHP resource 4ever$

        Kommentar


        • #5
          Code:
          if ($winnercredits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
          du hattest da noch $credits als Variablenname stehen. So kann die If-Bedingung natürlich nie erfüllt werden und genau dort wird ja geschrieben....

          Kommentar


          • #6
            Hi BrainBug,

            tut mir leid, dass ich da extra ein Posting gemacht habe. Anscheinend hab ich zu lange in den Code geschaut. Hab's grad auf winnercredits ausgebessert. Funktionieren tut's aber trotzdem nicht. PHP schreibt nur den neuen Eintrag in die Data.txt und löscht alle anderen raus.

            Ich hab's nochmal Zeile für Zeile gecheckt, finde aber keinen Fehler.
            Soll ich dir meine Data.txt und die phpSchreiben.php mal mailen damit du es in PHP-Edit testen kannst und vielleicht den Fehler findest ???
            $PHP resource 4ever$

            Kommentar


            • #7
              Hi BrainBug,

              hast Du mein Posting bezüglich Highscoretabelle eh gesehen??
              $PHP resource 4ever$

              Kommentar


              • #8
                Hi BrainBug,

                eh nicht auf meine Highscoretabelle vergessen ???
                $PHP resource 4ever$

                Kommentar


                • #9
                  eh

                  ei wo denn? Ich kann doch net immer das ganze Forum nach einem Artikel durchsuchen...

                  Kommentar


                  • #10
                    Vergiß die vorigen Postings. Ich erklär's dir ab dieser Stelle - das genügt.

                    Es geht lediglich darum, dass bei der Highscore-Schreiben funktion eine Kleinigkeit noch immer nicht stimmt. Es ist nämlich so, dass er den neuen Highscoreeintrag zwar in die Data.txt übernimmt, dabei aber alle anderen Einträge rauslöscht.

                    Code:

                    <?
                    $winnername="hetfield"; //kommt von Flash zurück
                    $winnercredits=998; //kommt von Flash zurück

                    $fp = fopen("data.txt","r");
                    while($data = fgets($fp,1024)){ // zeile für zeile einlesen
                    $data = explode(";",$data); // jede zeile aufsplitten
                    $hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern
                    }
                    fclose($fp);

                    arsort($hitlist);
                    $eintraege=count($hitlist); // max.10 Einträge erlauben
                    if ($eintraege<10) { // letzten Eintrag nicht abspalten, sondern nur holen
                    end($hitlist); // letzter Eintrag selektieren
                    list($key_min,$min)=each($hitlist); // Credits holen, bleibt aber im Array erhalten
                    }
                    else {
                    $min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert)
                    }

                    if ($winnercredits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben
                    $fp=fopen("data.txt","w");
                    while (list ($key, $val) = each ($hitlist)) {
                    fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben
                    }
                    fputs($fp,$winnername.";".$winnercredits."\n"); // und dann den neuen Eintrag am Ende anhängen
                    fclose($fp);
                    }
                    ?>

                    Data.txt:
                    Erich;150
                    Hoschi;700
                    Martin;614
                    Thomas;592
                    Richi;397
                    Alex;541

                    Wir haben die Funktion erweitert für den Fall dass nicht 10 Einträge vorhanden sind. Dann soll php nämlich nicht den letzten rauslöschen, sondern den neuen Eintrag nur hinzufügen. Du erinnerst dich??
                    $PHP resource 4ever$

                    Kommentar


                    • #11
                      jetzt aber...

                      Code:
                      <? 
                      $winnername="hetfield"; //kommt von Flash zurück 
                      $winnercredits=998; //kommt von Flash zurück 
                      
                      $fp = fopen("data.txt","r"); 
                      while($data = fgets($fp,1024)){ // zeile für zeile einlesen 
                      $data = explode(";",$data); // jede zeile aufsplitten 
                      $hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern 
                      } 
                      fclose($fp); 
                      
                      arsort($hitlist); 
                      $eintraege=count($hitlist); // max.10 Einträge erlauben 
                      if ($eintraege<10) { // letzten Eintrag nicht abspalten, sondern nur holen 
                      end($hitlist); // letzter Eintrag selektieren 
                      list($key_min,$min)=each($hitlist); // Credits holen, bleibt aber im Array erhalten 
                      } 
                      else { 
                      $min=array_pop($hitlist); // letzten Array-Eintrag (kleinster Credits-Wert) 
                      } 
                      
                      reset($hitlist);  // damit Array-Zeiger nicht auf letztem Eintrag steht -> dann würde nämlich nix in der while-Schleife rausgeschrieben werden ;-)
                      
                      if ($winnercredits>$min) { // wenn übergebener Wert größer als Min-Wert dann Eintrag schreiben 
                      $fp=fopen("data.txt","w"); 
                      while (list ($key, $val) = each ($hitlist)) { 
                      fputs($fp,$key.";".$val."\n"); // vorher alle restlichen Einträge schreiben 
                      } 
                      fputs($fp,$winnername.";".$winnercredits."\n"); // und dann den neuen Eintrag am Ende anhängen 
                      fclose($fp); 
                      } 
                      ?>

                      Kommentar


                      • #12
                        da wäre ich sicher NIE draufgekommen...

                        BrainBug, mir fehlen echt die Worte. Es funkt!!!!!

                        Kann ich mich irgendwie revanchieren??
                        $PHP resource 4ever$

                        Kommentar


                        • #13
                          Preise den Herrn

                          Lobe das Forum, ehre den Code, schwöre deine ewige Treue.
                          Wäre für den Anfang mal ganz okay...

                          Bin ja auch zufrieden, wenn's geklappt hat. Und nun hoffe ich, deinen Namen nieeee wieder lesen zu müssen

                          Bis dann...

                          Kommentar


                          • #14
                            Metallica, ich hab dein Skript ausprobiert, bei mir klappt es nicht
                            Schikcst du es mir bitte mal, vielleciht hab ich da einen Fehler reingebaut
                            Tribok@gmx.de
                            Danke Terminator

                            Kommentar

                            Lädt...
                            X