peacock: Array in Session einlesen/auslesen

Guten Morgen.
Folgendes Problem:
Ich lese ein Array, welches durch Werte von einer Datenbank gefüllt wird, in einen Session-Befehl ein.
$arrDay=$array_check['check_title'];
$_SESSION["test"]=$arrDay;
Dieses wird auch mit den richtigen Werten gefüllt. Sobald ich jedoch im nächsten Skript mir das Session auslesen lasse, gibt er mir nur den letzten Wert des Arrays aus. Komm einfach net auf die Lösung. Es gibt auch einige ähnliche Probleme, die in diversen Foren beschrieben werden. Jedoch nichts brauchbares für mich dabei gewesen.
Vielen Dank für euer Bemühen.
MfG peacock

  1. Hi,

    Ich lese ein Array, welches durch Werte von einer Datenbank gefüllt wird, in einen Session-Befehl ein.
    $arrDay=$array_check['check_title'];
    $_SESSION["test"]=$arrDay;

    Da ist kein "Session-Befehl", sondern lediglich eine simple Wertzuweisung.

    Mach dir klar, dass $_SESSION eigentlich nur eine "stinknormale" (Array-)Variable ist - mit dem kleinen Bonus, dass sie auch bei einem nächsten Scriptaufruf noch verfügbar ist.
    Der *Umgang* mit ihr unterscheidet sich jedoch überhaupt nicht vom Umgang mit anderen Variablen.

    Dieses wird auch mit den richtigen Werten gefüllt.

    Wie genau hast du das überprüft?

    Sobald ich jedoch im nächsten Skript mir das Session auslesen lasse, gibt er mir nur den letzten Wert des Arrays aus.

    Sessions "verlieren" nicht einfach Daten.
    Der Fehler wird also vermutlich in deinem Code liegen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hey.

      »» Dieses wird auch mit den richtigen Werten gefüllt.

      Wie genau hast du das überprüft?

      Ich habe mir die Werte folgendermaßen ausgeben lassen:
      echo "<pre>";print_r($_SESSION["test"]);echo "</pre>";

      Dort werden wie gesagt also die richtigen Werte in den Session Befehl eingelesen. Wo könnte der Fehler in meinem Code dann sein?Schon beim Einlesen oder beim Auslesen? Da mache ich ja dann nichts anderes als:
      if (isset($_SESSION['test'])){
      echo "<pre>";
      print_r ($_SESSION['test']);
      echo "</pre>";
      }

      Mfg peacock

      1. Moin!

        Hey.
        »» »» Dieses wird auch mit den richtigen Werten gefüllt.
        »»
        »» Wie genau hast du das überprüft?

        Ich habe mir die Werte folgendermaßen ausgeben lassen:
        echo "<pre>";print_r($_SESSION["test"]);echo "</pre>";

        Wann, wo, wie häufig?

        Sinnvoll wäre, das genau einmal am Ende des Skriptes zu tun - denn wenn das Skript beendet wird, werden die Daten, die sich dann aktuell in $_SESSION befinden, gespeichert, um beim nächsten Skriptlauf wieder geladen zu werden, wenn session_start() ausgeführt wird.

        Dort werden wie gesagt also die richtigen Werte in den Session Befehl eingelesen. Wo könnte der Fehler in meinem Code dann sein?Schon beim Einlesen oder beim Auslesen? Da mache ich ja dann nichts anderes als:

        Ich vermute, du überschreibst in der Schleife, die die DB ausliest, immer wieder die Daten in $_SESSION, und speicherst nur den letzten Wert, weil der nicht nochmal überschrieben wird.

        Hattest du vor, das Ergebnis der gesamten DB-Abfrage zu sichern? Dann nutze ein Array dafür - in diesem Fall also ein Array im Array.

        - Sven Rautenberg

        1. Hey.

          »» Ich habe mir die Werte folgendermaßen ausgeben lassen:
          »» echo "<pre>";print_r($_SESSION["test"]);echo "</pre>";

          Wann, wo, wie häufig?

          Sinnvoll wäre, das ...

          Also habe den Rat verfolgt und habe es am Ende des Skriptes ausführen lassen und es wird nur der letzte Wert gedruckt.Nur solange ich den Befehl in der while-schleife:
          while ($array_check = mysql_fetch_array($query_special,MYSQL_ASSOC))
          {  echo "<tr>"."<td style='font-size:16px; font-family:Verdana'>".$array_check['check_title']."</td>";
          $arrDay=$array_check['check_title'];$_SESSION['test']=$arrDay;
          echo "<pre>";
          print_r($_SESSION["test"]);
          echo "</pre>";
          }
          lasse, werden alle Werte ausgegeben.

          Hattest du vor, das Ergebnis der gesamten DB-Abfrage zu sichern? Dann nutze ein Array dafür - in diesem Fall also ein Array im Array.

          Was genau meinst du damit? Soll ich den $array_check nochmal in ein Array packen oder sowas wie $_SESSION["test"][]?

          MfG peacock

          1. Moin!

            Also habe den Rat verfolgt und habe es am Ende des Skriptes ausführen lassen und es wird nur der letzte Wert gedruckt.

            Also brauchst du dich nicht zu wundern, dass das Folgescript nur den letzten Wert ausgibt.

            Nur solange ich den Befehl in der while-schleife:
            while ($array_check = mysql_fetch_array($query_special,MYSQL_ASSOC))
            {  echo "<tr>"."<td style='font-size:16px; font-family:Verdana'>".$array_check['check_title']."</td>";
            $arrDay=$array_check['check_title'];$_SESSION['test']=$arrDay;
            echo "<pre>";
            print_r($_SESSION["test"]);
            echo "</pre>";
            }
            lasse, werden alle Werte ausgegeben.

            Ausgegeben werden sie - aber das ist ja nicht relevant. Die Ausgabe merkt sich alles, was mit echo oder z.B. print_r produziert wurde. Das spiegelt aber nicht den Zustand wider, der sich in den Variablen abspielt.

            Du überschreibst in jedem Schleifendurchgang den Inhalt der Variablen $_SESSION['test'] mit dem neuen Inhalt der Variable $arrDay, und die Variable $arrDay wird vorher jedesmal vom neuen Inhalt der Variablen $array_check['check_title'] überschrieben, und zuvor wird die Variable $array_check() jedesmal mit dem Funktionsergebnis von mysql_fetch_array() überschrieben.

            Sprich: In $_SESSION ändert sich, während die Schleife läuft, andauernd der Inhalt, und am Ende bleibt übrig, was zuletzt reingeschrieben wurde.

            »» Hattest du vor, das Ergebnis der gesamten DB-Abfrage zu sichern? Dann nutze ein Array dafür - in diesem Fall also ein Array im Array.
            Was genau meinst du damit? Soll ich den $array_check nochmal in ein Array packen oder sowas wie $_SESSION["test"][]?

            Genau sowas wie... Du kannst dir das sinnlose Zwischenkopieren in die Variable $arrDay übrigens sparen, das kostet nur sinnlosen Speicher und Rechenzeit, bringt aber nichts.

            - Sven Rautenberg

            1. Hey.

              Genau sowas wie... Du kannst dir das sinnlose Zwischenkopieren in die Variable $arrDay übrigens sparen, das kostet nur sinnlosen Speicher und Rechenzeit, bringt aber nichts.

              Ich habe es jetzt folgendermaßen gemacht:
              $_SESSION['array4'][$k]=$array_check['check_title'];
              Die Laufvariable $k beginnt mit der while-Schleife. Jetzt gibt er immerhin am Ende des Skriptes schon die richtigen Werte aus, jedoch immer noch nicht im daruffolgenden. Ich lass mir das Session dann jedoch wieder so:
              print_r($_SESSION["array4"]);
              ausgeben.
              Im darauffolgenden Skript wird dann der Ausdruck Array gedruckt.
              Was ist zu machen?
              MfG peacock

              1. Moin!

                »» Genau sowas wie... Du kannst dir das sinnlose Zwischenkopieren in die Variable $arrDay übrigens sparen, das kostet nur sinnlosen Speicher und Rechenzeit, bringt aber nichts.

                Ich habe es jetzt folgendermaßen gemacht:
                $_SESSION['array4'][$k]=$array_check['check_title'];
                Die Laufvariable $k beginnt mit der while-Schleife. Jetzt gibt er immerhin am Ende des Skriptes schon die richtigen Werte aus, jedoch immer noch nicht im daruffolgenden.

                Vielleicht stimmt deine Vorstellung von "richtiger Wert" ja auch noch nicht mit der Realität überein.

                Gib mal ein Beispiel so einer Ausgabe, von beiden Skripten.

                Im darauffolgenden Skript wird dann der Ausdruck Array gedruckt.

                Das passiert nur, wenn du stumpf $_SESSION['array4'] ausgeben willst mit echo, und dabei nicht berücksichtigt hast, dass diese Variable ja ein Array ist, also Unterelemente hat, in denen die Information gespeichert ist.

                - Sven Rautenberg

                1. Hey.
                  Also ich habs jetzt hinbekommen.
                  Ich fülle den Session Befehl weiterhin mit
                  $_SESSION['array4'][]=$arrDay;
                  und in dem zweiten Skript rufe ich es ganz normal auf. Das einzige was ich noch geändert habe ist dass ich vor der while Schleife das Session noch einmal leer mache durch
                  $_SESSION['array4']=array();
                  Und schon gibt er mir das aus was ich mir gewünscht habe.
                  MfG peacock