benötige spezielle php variablenausgabe von array......

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

  • #16
    hmmm,

    ich glaube nicht, dass das letzte script die richtigen min-max-werte liefert. ausserdem kann ich die ganze if-z-abfragen-konstruktion nicht ganz nachvollziehen. wozu denn die ganzen abfragen?

    mein script sieht so aus:

    Code:
    <?php
    
    // datei auslesen
    $fp = fopen("data.txt","r"); 
    while ($data = fgets($fp,1024)) {
      $data = explode(";",$data);
      $hitlist[$data[0]] = trim($data[1]);
    } 
    fclose($fp); 
    
    // array absteigend sortieren
    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";
    
    // erstes ampersand loeschen
    $uebergabe = substr($uebergabe,1);
    
    // string ausgeben
    echo $uebergabe;
    
    ?>
    der maxwert ist immer der erste (im absteigend sortierten array), der minwert der letzte ... das ist alles.

    und ein trimmen beim einlesen der daten ist ja wohl auch sauberer.

    viel spass noch damit

    Kommentar


    • #17
      jetzt funkts.
      in dieser form kann ich mit flash nun in die highscoreliste schreiben. allerdings liefere ich ja den neuen Eintrag wieder zurück und via php sollte nun der neue Eintrag wieder in die data.txt reingeschrieben und der letzte rausgelöscht werden (sonst wird ja das file zu groß).

      data.txt:
      Wolfi;200
      Enno;173
      Erich;150
      Hoschi;700
      Martin;614
      Thomas;592
      Richi;397
      Alex;541
      Manfred;341
      Tanja;254

      php-funktion liefert an flash:
      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

      flash liefert an php den neuen highscoreeintrag wieder zurück in der gleichen form:
      name1=TIGER&credits1=1000&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 der neue Eintrag (TIGER) soll nun wieder in die data.txt zurückgeschrieben werden.
      Also:
      TIGER;1000
      Wolfi;200
      Enno;173
      Erich;150
      Martin;614
      Thomas;592
      Richi;397
      Alex;541
      Manfred;341
      Tanja;254

      Versteht ihr was ich meine. Ich brauche fürs zurückschreiben aus flash genau die umgekehrte Funktion wie vorher. D.h., insgesamt sind es dann zwei funktionen - nur weiß ich nicht, ob man die in ein php-file reinschreiben kann.
      $PHP resource 4ever$

      Kommentar


      • #18
        die Funktion in die andere Richtung geht natürlich auch, allerdings nicht im selben Skript, da PHP ja serverseitig abgearbeitet wird und dann erst HTML bzw. Flash -> dieses gibt dann wieder Parameter an PHP -> das muß aber in einem neuen Skript passieren, also Flash muß eine Folgeseite aufrufen.
        Wenn das für dich okay ist, dann können wir die Funktion schreiben.

        Kommentar


        • #19
          Ja, is für mich okay. ob ich ein oder zwei php-files habe, macht keinen Unterschied.
          Ich wäre sehr froh, wenn wir die function gemeinsam schreiben könnten. Bin nämlich nicht sonderlich bewandelt in php. Genaugenommen handelt es sich um die erste Problemstellung in dieser Sprache für mich. Aber ich hab seit deiner/euer Hilfe (und durch dieses Board) schon einiges dazugelernt.

          Bye

          P.S.: "Wie durch ein Wunder hast du meine letztes Posting verstanden!"HIHI
          $PHP resource 4ever$

          Kommentar


          • #20
            okay, hier der Weg andersrum
            Code:
            $fp=fopen("data.txt","w");
            while (list ($key, $val) = each ($HTTP_POST_VARS)) {
               if (strstr($key,"name")) fputs($fp,$val.";");  // wenn Variable "nameX" heisst, dann Semikolon dahinter
               else fputs($fp,$val."\n");   // ansonsten ist es Hits -> Zeilenumbruch hinterher
               }
            fclose($fp);
            jetzt mußt du nur noch abwechseln die Parameter (also immer Name und dann die Hits) an das Skript übergeben. Am besten nur diese Parameter, solltest du noch andere Sachen an das Skript schicken, muß ein Filter für diese Variablen eingebaut werden, da diese sonst auch mit ins File gespeichert werden.
            Moment, so:
            Code:
            $fp=fopen("data.txt","w");
            while (list ($key, $val) = each ($HTTP_POST_VARS)) {
               if (strstr($key,"name") || strstr($key,"credits")) { 
                 if (strstr($key,"name")) fputs($fp,$val.";");  // wenn Variable "nameX" heisst, dann Semikolon dahinter
                 else fputs($fp,$val."\n");   // ansonsten ist es Hits -> Zeilenumbruch hinterher
                 }
               }
            fclose($fp);
            versuchs mal

            Kommentar


            • #21
              Hi BrainBug,

              hab's jetzt grad versucht und folgende Meldung von PHP-edit erhalten:

              <b>Warning</b>: Variable passed to each() is not an array or object in <b>E:\Rettung\Slot\highscoreschreiben.php</b> on line <b>5</b><br>

              line5:
              while (list ($key, $val) = each ($HTTP_POST_VARS)) {

              und meine data.txt ist auch gelöscht (wie gut sind doch backups!).Warum, keine Ahnung?? Is beim Codeausführen passiert.

              nochmal zur sicherheit (dass wir nich aneinander vorbeischreiben!):
              ich schicke von flash dieselbe Zeile wieder zurück, die ich von php bekommen habe - nur eben mit einem neuen Highscoreeintrag. D.h., wir müssen in php das ganze wieder in diese Form bringen:
              TIGER;500
              Wolfi;300
              Enno;215
              .....

              Die Reihenfolge wo das im Data.txt eingetragen wird ist egal. Wichtig ist nur der Eintrag und das der letzte rausgelöscht wird.

              $PHP resource 4ever$

              Kommentar


              • #22
                BrainBug???
                $PHP resource 4ever$

                Kommentar


                • #23
                  jaja, immer locker bleiben.

                  Also, dein File war deshalb weg, da es durch das fopen gelöscht wurde. Einfachheitshalber schreiben wir alle Parameter, die du vom Flash an das Skript gibst, in ein "neues" leeres File.

                  Hmm, irgendwas stimmt nicht mit der while-Schleife. Wie übergibst du denn die Parameter an das Skript? Du hängst die doch sicher an die URL dran, oder? Eigentlich müßten die dann auch als HTTP_POST_VARS behandelt werden.

                  Test:
                  Code:
                  echo $name1." - ".$credits1."<br>";
                  echo $name2." - ".$credits2."<br>";
                  echo $name3." - ".$credits3."<br><br>";
                  
                  if (is_array($HTTP_POST_VARS) {
                    echo "Variablen vorhanden"; 
                    reset($HTTP_POST_VARS);
                    while (list($key,$val)= each ($HTTP_POST_VARS)) {
                      echo $key." - ".$val."<br>";   
                      }
                    }
                  else {
                    echo "Wo sind die Variablen??";
                    }
                  bau den Code mal ein und schau, ob irgendwas ausgeben wird.

                  Kommentar


                  • #24
                    jaja, bleib ehh locker.

                    Hab da 'ne Idee wie wir und die Sache vereinfachen können. Und zwar:
                    Vergiß mal Flash. Simulieren wir das Ganze mal mit zwei txt-files. Das erste File ist das bereits bekannte Data.txt-File und sieht so aus:

                    Wolfi;200
                    Enno;173
                    Erich;150
                    Hoschi;700
                    Martin;614
                    Thomas;592
                    Richi;397
                    Alex;541
                    Manfred;341
                    Tanja;254

                    Das zweite File heißt DataTmp.txt und sieht so aus (die Form ist ebenfalls schon bekannt):

                    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

                    In diese Form bringen wir das File bereits mit unserer ersten Funktion schon.
                    In unserer neuen Funktion lesen wir das DataTmp.txt-File ein und schreiben den herausgefundenen neuen Eintrag in Data.txt zurück wobei wir den letzten Highscoreeintrag stets löschen.

                    Hoffentlich ist diese Version leichter. Dass das mit Flash funtzt werd ich schon irgendwie hinkriegen.

                    CU

                    P.S.: Hab grad deinen Code getestet. Die Zeile
                    if (is_array($HTTP_POST_VARS) {
                    will er nicht.
                    $PHP resource 4ever$

                    Kommentar


                    • #25
                      Hi BrainBug,

                      vergiß mein letztes Posting bitte. Ich hab eine noch viel einfachere Lösung seitens von Flash gefunden. Und zwar schicke ich nicht die ganze Wurscht 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
                      zurück, sondern lediglich den neuen Highscore-Eintrag und zwar als Umgebungsvariable die dann in die "WriteBack"-PHP-Funktion so eingebaut werden kann wie wenn Du selbst die Variablen (zB $XY) definierst.
                      Hier ein Codeauszug damit Du es dir besser vorstellen kannst:
                      <?
                      $winner=tiger //so kommt es von Flash zurück
                      $credits=1000
                      $fp=fopen("data.txt","w");
                      asort
                      vergleichen ob credits > als minWert in data.txt
                      wenn ja, kleinsten Wert löschen
                      und winner und credits einfügen
                      eventuell das komplette data.txt neu schreiben
                      oder nur neuen datensatz. Weiß nicht was besser
                      ist?!
                      ?>

                      Das ist meiner Meinung nach die simpelste Variante.
                      $PHP resource 4ever$

                      Kommentar


                      • #26
                        @BrainBug
                        Hast Du dir mein letztes Posting schon durchgelesen? So könnte es nämlich auf ziemlich einfache Art und Weise gehen.
                        $PHP resource 4ever$

                        Kommentar


                        • #27
                          sorry, hat sich angehört, wie wenn du diese Lösung jetzt umgesetzt hast und keine Hilfe mehr brauchst.

                          Ich melde mich morgen mal wegen deinem Lösungsvorschlag, d.h. wir können das gern so machen mit den zwei Variablen statt der Schlange.

                          Bis dann

                          Kommentar


                          • #28
                            okay. dann bis morgen...
                            bin schon gespannt!
                            $PHP resource 4ever$

                            Kommentar


                            • #29
                              Code:
                              $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");	// hier erstmal alle restlichen Einträge schreiben
                              		}
                              	fputs($fp,$winner.";".$credits."\n");	// und den neuen Eintrag anhängen
                              	fclose($fp);
                                 }
                              versuchs doch mal so. Davon ausgehend, daß dein Flash an das Skript nur zwei Variablen übergibt -> winner und credits. Das File wird dann neu geschrieben, wenn die Credits größer als Min-Wert sind -> Backup machen

                              Kommentar


                              • #30
                                funkt schon ganz gut. Nur müßte auch die ursprüngliche Form wiederhergestellt werden.
                                Also:
                                Wolfi;200
                                Enno;173
                                Erich;150
                                Hoschi;700
                                Martin;614
                                Thomas;592
                                Richi;397
                                Alex;541
                                Manfred;341
                                TIGER;1000

                                Momentan macht es die funktion so:
                                Hoschi;700Martin;614........Tiger;1000
                                und dazwischen macht er so komische volle Rechtecke.Keine Ahnung wo die herkommen.
                                $PHP resource 4ever$

                                Kommentar

                                Lädt...
                                X