spezielle Variablenausgabe Teil2 (special thanxs to BrainBug)

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

  • spezielle Variablenausgabe Teil2 (special thanxs to BrainBug)

    Hi BrainBug and others!

    Der Code zum Zurückschreiben in die data.txt funkt. Ich hab allerdings beim Einlesen der Data.txt
    (Form:
    Hoschi;700
    Enno;500
    ......)
    ein Problem im Flash. Denn wenn ich mir dort die Variablenausgabe anschaue hab ich zwar die richtige Form (also: name1=hoschi&credits1=700&name2=enno&credits2=500 .....) aber ich hab aus bisher unerklärlichen Gründen am Anfang eine Leerzeile drinnen mit der Flash so seine Probleme hat. Hier nochmal der Code:
    <?
    // datei auslesen
    $fp = fopen("data.txt","r");
    while ($data = fgets($fp,1024)) {
    $data = explode(";",$data);
    $hitlist[$data[0]] = trim($data[1]);
    }
    fclose($fp);

    arsort($hitlist);

    // string zusammenbauen
    $uebergabe = "";
    $i = 1;
    while (list ($key, $val) = each ($hitlist)) {
    if ($i == 1) $maxwert = $val;
    $uebergabe .= "&name$i=$key&credits$i=$val";
    $i++;
    $minwert = $val;
    }
    $uebergabe .= "&minwert=$minwert&maxwert=$maxwert";
    $uebergabe = substr($uebergabe,1);
    echo $uebergabe;
    ?>

    Ich weiß nicht wo im Code - aber irgendwo macht er da ein breakline rein.??????



    [Editiert von Metallica am 02-07-2001 um 23:55]
    $PHP resource 4ever$

  • #2
    *hm*

    könnte es an dem Punkt liegen ?

    $uebergabe .= "&name$i=$key&credits$i=$val";

    mit meinen alten PHP Kenntnissen *abstaub* müsste es doch

    $uebergabe = '&name'.$i.'='.$key.'&credits'.$i.'='.$val;

    oder bin ich da nur zu penibel und altbacken um den String zusammenzubasteln ?



    oder liegt es daran daß du mit $i = 1; anfängst ?

    Ein Array fängt mit [0] an und nicht mit [1].

    Sonst wüßte ich auch nicht weiter ...

    Da Bernd

    Kommentar


    • #3
      also am $i=1 alleine liegt's nicht, immerhin wird das Array ja mit each ausgelesen; und dann an den Wert angehängt.
      Der String ist auch sauber zusammengesetzt.

      Das Problem ist, das fets den Zeilenumbruch nicht abschneidet. Das läßt sich aber ganz einfach lösen, indem man es explizit macht, z.B. beim Zusammensetzen des Übergabe-Strings:

      $uebergabe .= rtrim ("&name$i=$key&credits$i=$val");
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar


      • #4
        Danke. Werd's heut am Abend mal mit rtrim checken. Hoffentlich ist der Zeilenumbruch dann weg.
        $PHP resource 4ever$

        Kommentar


        • #5
          ähm ... wo ist doch gleich die Leerzeile? In der Datei? Dann ist $i=1 vielleicht doch das Problem ...
          Müßte man mal schauen, wie du die Daten da rein schreibst, und nicht wie du sie ausliest.
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Kommentar


          • #6
            Jetzt bin ich wirklich down. Hab's grad getestet - es funtzt nicht. Hab noch immer die Leerzeile da obwohl ich jetzt "rtrim" verwende.

            Titus, beim reinschreiben hab ich keine Leerzeile. Warum glaubst Du, dass $i=1 das Problem ist?? Was müßte ich deiner Meinung nach ändern??
            $PHP resource 4ever$

            Kommentar


            • #7
              Müßte man mal schauen, wie du die Daten da rein schreibst, und nicht wie du sie ausliest.
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar


              • #8
                ok Titus. So lese ich die data.txt aus:
                <?
                // datei auslesen
                $fp = fopen("data.txt","r");
                while ($data = fgets($fp,1024)) {
                $data = explode(";",$data);
                $hitlist[$data[0]] = trim($data[1]);
                }
                fclose($fp);

                arsort($hitlist);

                // string zusammenbauen
                $uebergabe = "";
                $i = 1;
                while (list ($key, $val) = each ($hitlist)) {
                if ($i == 1) $maxwert = $val;
                $uebergabe .= rtrim ("&name$i=$key&credits$i=$val");
                $i++;
                $minwert = $val;
                }
                $uebergabe .= "&minwert=$minwert&maxwert=$maxwert";
                $uebergabe = substr($uebergabe,1);
                echo $uebergabe;

                ?>

                die data.txt schaut übrigens so aus:
                Tiger2;1200
                tiger;1000
                Hoschi;700
                Martin;614
                Thomas;592
                Alex;541
                Richi;397
                Manfred;341
                tiger;1000

                Die Funktion bringt sie in folgende form (in einem durch ohne return):
                name1=Hoschi&credits1=700&name2=Martin&credits2=614&
                name3=Thomas&credits3=592&name4=Alex&credits4=541&
                name5=Richi&credits5=397&name6=Manfred&credits6=341&
                name7=Tanja&credits7=254&name8=Wolfi&credits8=200&
                name9=Enno&credits9=173&name10=Erich&credits10=150&
                minwert=150&maxwert=700


                und dann schreibe ich den neuen highscore-eintrag eben wieder zurück mit:
                <?

                $winner="tiger";
                $credits=1000;

                $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);
                }


                ?>

                Die Variablen $winner und $credits bekomme ich aus Flash zurück und trage sie nur mehr ein.

                Wie gesagt, alles funkt bis auf den Umstand, dass php immer 'ne Leerzeile macht. Ich weiß nicht genau, ob es beim einlesen oder beim zurückschreiben passiert.
                $PHP resource 4ever$

                Kommentar


                • #9
                  Hi,

                  ich habe dein script gerade bei mir local getestet. Mit dem Ergebnis das alles schön untereinander steht (ohne leerzeichen).

                  Leider kann ich dir auch nicht sagen wieso das bei dir anders ist.

                  Gruß
                  en-null-i-zett-drei

                  Kommentar


                  • #10
                    Ich brauche die beiden Scripte aber, um eine HighscoreTabelle im Flash auszulesen und zu beschicken. Und da klappt es nicht. Anscheinend hat Flash damit ein Problem.

                    Hat vielleicht sonst noch jemand 'ne Idee woran's liegen könnte ???

                    -schluchzheulsniff-
                    $PHP resource 4ever$

                    Kommentar


                    • #11
                      Ich hab die Diskussion nicht so genau verfolgt (Zuviel Code! ;-) aber
                      $ergebnis = trim($string) schneidet leerzeichen und zeilenumbrueche aus Anfang und Ende von $string raus, vielleicht hilft das was.

                      Kommentar


                      • #12
                        da ist noch ne hardcore-methode um alle zeilenumbrüche jeglicher art und leerzeichen rauszubekommen:

                        $txt = preg_replace("/(\015\012)|(\015)|(\012)|( )/","",$txt);

                        vielleicht könntest du uns auch mal ein paar informationen über deinen webhost geben...

                        CAT Music Files

                        Kommentar


                        • #13
                          ihr werdet's nicht glauben.....ES FUNKT

                          Der Code war syntax-mäßig OK. Es war nur die Leerzeile im php-code schuld. Wenn es Flash parst, dann interpretiert er die Leerzeile vor dem <?php ebenfalls mit. Ich hab sie weggenommen und jetzt funkt's.
                          Also Leute paßt genau auf, dass ihr vor dem php-code keine Leerzeilen habt falls ihr php mal mit einem Flashfile kombiniert.

                          BYE and MAAAAAAAAAAAAAAAAANNNNNNNNNNNYYYYYYY THANXS

                          until next time
                          $PHP resource 4ever$

                          Kommentar


                          • #14
                            =))))

                            Das gleiche gilt übrigens für Cookies (und damit fürs php-Session Handling)
                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar

                            Lädt...
                            X