Bastian Gretges: Werteübergabe zwischen 2 Fenstern

Hallo zusammen,

ich habe zwei Fenster. Im ersten werden DB-Abfragen gestartet, deren Ergebnisdaten an ein zweites Fenster übergeben werden sollen. Soweit nicht schwer. Ich möchte nun aber die Daten im zweiten Fenster behalten, im ersten eine neue DB-Abfrage starten und deren Ergebnisdaten denen im zweiten Fenster hinzufügen.

Zur Zeit realisiere ich das über ein Formular im ersten Fenster in desses versteckten Feldern die zu übertragenden Daten stehen. Beim Absenden öffne ich mit onsubmit und JS ein neues "about:blank"-Fenster und weise ihm den Namen "Merkzettel" zu. Anschließend versende ich mein Formular mit dem target="Merkzettel" und schaufle so die Daten rüber. Im 2. Fenster lade ich den Inhalt des $_REQUEST-Arrays in das $_SESSION-Array (session.use_cookies=on; session.auto_start=off), damit ich die Daten "behalten" kann. Bei einer erneuten Übergabe ignoriert das Skript allerdings die zuvor ins $_SESSION-Array eingetragenen Werte bzw. ich vermute die Session wird komplett überschrieben.

Wer weiß Rat? Bin für jede Hilfe dankbar. Vielen Dank im Voraus,
Bastian

  1. echo $begrüßung;

    Bei einer erneuten Übergabe ignoriert das Skript allerdings die zuvor ins $_SESSION-Array eingetragenen Werte bzw. ich vermute die Session wird komplett überschrieben.

    PHP ignoriert nicht und überschreibt von sich aus auch nichts. Überprüfe den Inhalt der beteiligten Variablen (wozu auch das $_SESSION-Array zählt) mittels Kontrollausgaben, um so herauszufinden, welche Stelle im Programm welche Veränderung an den Variablen bewirkt. echo, print, print_r() und var_dump() sind dafür geeignete PHP-Konstrukte und Funktionen. Bei der Ausgabe von komplexen Werten (z.B. Arrays) empfiehlt sich vorher die Ausgabe eines <pre>.

    echo "$verabschiedung $name";

    1. Hier mein Code aus dem "Merkzettel"-Skript:

      $_SESSION["id"] = $_SESSION["id"]."x".$_REQUEST["id"];
      $_SESSION["date"] = $_SESSION["date"]."x".$_REQUEST["date"];

      $_REQUEST["id"] ist definitiv gefüllt, das kann ich auch ausgeben. Wenn ich jetzt die Seite aktualisiere (dabei die Formulardaten erneut sende) und $_SESSION["id"] vor o. a. Zuweisung abfange, dann gibt var_dump($_SESSION) den Wert NULL zurück.

      Was mache ich falsch?

      Gruß und danke,
      Bastian

      1. echo $begrüßung;

        Wenn ich jetzt die Seite aktualisiere (dabei die Formulardaten erneut sende) und $_SESSION["id"] vor o. a. Zuweisung abfange, dann gibt var_dump($_SESSION) den Wert NULL zurück.

        Existiert zu dem Zeitpunkt eine gestartete Session? session_id() sollte eine Session-ID zurückgeben oder einen Leerstring, wenn keine Session aktiv ist.

        echo "$verabschiedung $name";

        1. Existiert zu dem Zeitpunkt eine gestartete Session? session_id() sollte eine Session-ID zurückgeben oder einen Leerstring, wenn keine Session aktiv ist.

          Danke, das hat geholfen. War totsicher, dass ne Session aktiv ist. Löse das Problem mit

          if ( session_id() == "" ) session_start();

          Vielen Dank fürs Mitdenken. Beste Grüße,
          Bastian

          1. So, weiter gehts.

            Rouven schrieb:

            hast du mal einen festen Wert in die Session geschrieben, um zu gucken ob der überlebt? Vielleicht erkennt dein Server keinen Zusammenhang zwischen Request 1 und Request 2...

            Also, wenn Du das meinst, ich hab mal $_SESSION["test"] = "test"; eingefügt. var_dump(isset($_SESSION)); liefert mir FALSE zurück, wenn ich es so einsetze:

              
            var_dump(isset($_SESSION));  
              
            $timestamp = explode(" ",microtime());  
            $suchid = $timestamp[1].substr($timestamp[0],2);  
              
            $_SESSION[$suchid] = "test";  
            $_SESSION["test"] = "test";  
            
            
            1. Damit die Variable $_SESSION existiert, muss die Session erst mit session_start(); gestartet werden.

              Also vor

                
              var_dump(isset($_SESSION));  
              
              

              muss

                
              session_start();  
              
              
              1. Damit die Variable $_SESSION existiert, muss die Session erst mit session_start(); gestartet werden.

                Also vor

                var_dump(isset($_SESSION));

                
                > muss  
                >   
                > ~~~php
                  
                
                > session_start();  
                > 
                
                

                Naja, hatte ich auch schon probiert. Es sieht dann so aus, dass nach jeder Aktualisierung print_r($_SESSION); folgendes zurückgibt:
                Array ( [118372379363646400] => test [test] => test )

                Eigentlich erwarte ich aber nach jedem F5 einen neuen Array-Eintrag...

                Ich hab das Gefühl als hätte ich ein ziemlich dickes Brett vorm Kopf :-(

                1. Ich lass mir auch mit session_id() die ID ausgeben. Diese verändert sich auch nicht, weshalb ich annehme, dass ich mich immer noch in der gleichen Session befinde. Trotzdem Ist das $_SESSION-Array jedesmal wieder leer, nachdem ich die Seite aktualisiere.

                  Könnte mein Problem in der Session-Konfig liegen? Ich finde es auffällig, dass bei mir

                  session.save_path = no value

                  gesetzt ist. Außerdem ist bei mir die

                  session.cookie_lifetime = 0

                  gesetzt. Kann das was damit zu tun haben? Oder spielt das erstmal keine Rolle. Die Person, die das System aufgesetzt hat ist zur Zeit leider außer Reichweite, sonst würde ich mich direkt an sie wenden.

                  1. Hi,

                    Könnte mein Problem in der Session-Konfig liegen? Ich finde es auffällig, dass bei mir

                    session.save_path = no value

                    gesetzt ist.

                    Ja. Es ist auf shared Servern ungünstig, den allgemeinen Speicherort aller Nutzer für Sessions zu nutzen. Setze in der .htaccess über
                    php_value session.save_path /dein/pfad/zum/verzeichnis/tmp/
                    mal ein eigenes tmp-Verzeichnis dafür.

                    freundliche Grüße
                    Ingo