kocs: formular-daten mit $_SESSION übertragen

hallo,
ich hoffe,jemand kann mir bei folgendem stilisierten problem helfen:
ausgangspunkt ist ein formular:

  
<body>  
	<form action="formular-werte.php" method="post" name="form_php" target="_blank" class="php_formular">  
		<?php  
			session_start();  
			$_SESSION["variable"] = "Ich bin in einer Session-Datei gespeichert.";  
			$_SESSION["variable2"] = "Ich bin in einer Session-Datei 2 gespeichert.";	  
		?>  
		<input type="hidden" name="PHPSESSID" value="<?php echo substr(SID, strpos(SID, '=') + 1); ?>">  
		<input  type="text" name="input_php" id="ident" value="Eintrag">  
            <input type="submit" value="test-submit">  
	</form>  
</body>  

der wert des textfeldes soll per POST an die formular-werte.php geschickt werden.
desweiteren wird in php eine session eröffnet und testweise die variablen $_SESSION["variable"] , $_SESSION["variable2"] mit den entsprechenden werten belegt.
die session-id  wird über den entsprechenden "hidden input" PHPSESSID mit abgesendet.

die auswertende datei formular-werte.php sieht nun folgendermaßen aus:

  
<body>  
	<?php  
		session_start();  
					  
			$session = $_SESSION["variable"];  
		echo "<h4>session-variablen-wert:</h4> $session ";  
  
			$session2 = $_SESSION["variable2"];  
		echo "<h4>session-variablen-wert2:</h4> $session2 ";  
  
			$input_php = $_POST['input_php'];  
			$_SESSION["input_php"] = $input_php;  
			$input_php2 = $_SESSION["input_php"];  
		echo "<h4>input_php:</h4> $input_php2 ";  
		  
			$sid2 = session_id();  
 		echo "<h4>php-session-id--php-func:</h4> $sid2 ";  
  
					/*$_SESSION["phpsess_id"] = $_POST['PHPSESSID'];  
					$sid = $_SESSION["phpsess_id"];  
				echo "<h4>php-session-id-post:</h4> $sid ";*/	  
	?>  
  
<br><a href="formular-werte-b.php?<?php echo 'PHPSESSID=';echo $sid2; ?>" target="blank">test</a>  
</body>  

alle mit dem formular übergebenden parameter sollen in php abgefragt werden. das funktioniert bis hierher auch wie gewollt.
letztlich sollen per hyperlink alle parameter nochmal weitergereicht werden, und zwar an formular-werte-b.php mit dem entsprechenden session-id-anhängsel für die aresse. die formular-werte-b.php ist genauso aufgebaut wie formular-werte.php und soll wieder alle parameter anzeigen. das funktioniert auch wie erwartet, bis auf die tatsache dass allein für $_SESSION["input_php"] (dem text-input aus dem formular) nichts angezeigt wird.

kann es sein, dass an der stelle "$_SESSION["input_php"] = $_POST['input_php'];" anscheinend nicht der entsprechende wert richtig übergeben wird?

grob gesagt: wie kann ich einen input-text zuerst per formular und dann per hyperlink (das ist der knackpunkt) jeweils weitergeben.

gruß

  1. echo $begrüßung;

    <body>
    <form action="formular-werte.php" method="post" name="form_php" target="_blank" class="php_formular">
    <?php
    session_start();

    Hast du die Anzeige der Fehlermeldungen komplett ausgeschaltet? Wenn nicht, hättest du eine altbekannte Meldung bekommen müssen, die dich darauf hinweist, das vor dem session_start keinerlei Ausgabe an den Client gesendet werden darf, was auch HTML-Code beinhaltet.

    echo "$verabschiedung $name";

    1. Hast du die Anzeige der Fehlermeldungen komplett ausgeschaltet? Wenn nicht, hättest du eine altbekannte Meldung bekommen müssen, die dich darauf hinweist, das vor dem session_start keinerlei Ausgabe an den Client gesendet werden darf, was auch HTML-Code beinhaltet.

      na gut, wenn ich dich richtig verstehe, dann sei der php-teil eben vor oder hinter das formular verschoben. ändern tut sich an dem problem selbst dann aber noch nichts.

      1. echo $begrüßung;

        » Hast du die Anzeige der Fehlermeldungen komplett ausgeschaltet? Wenn nicht, hättest du eine altbekannte Meldung bekommen müssen, die dich darauf hinweist, das vor dem session_start keinerlei Ausgabe an den Client gesendet werden darf, was auch HTML-Code beinhaltet.
        na gut, wenn ich dich richtig verstehe, dann sei der php-teil eben vor oder hinter das formular verschoben. ändern tut sich an dem problem selbst dann aber noch nichts.

        Kontrolliere bitte die Einstellungen zum Anzeigen von Fehlern in der phpinfo()-Ausgabe. display_errors sollte eingeschaltet sein und das error_reporting am besten auf E_ALL.

        Ein session_start() muss (ebenso wie header() oder setcookie()) vor jeglicher Ausgabe stehen. Alles außerhalb der <?php ?>-Bereiche ist ebenfalls Ausgabe. Dazu zählen auch Leerzeichen, die man nicht direkt sieht. Das session_start() muss demzufolge nicht nur vor dem Formular sondern vor allem HTML-Code stehen. Oder du verwendest Ausgabepufferung, die jedoch ebenfalls vor jeglicher Ausgabe aktiviert werden muss.

        Und dann solltest du Fehlersuche mittels Kontrollausgaben durchführen. Vergleiche die Variableninhalte und die Ergebnise von Ausdrücken mit deinem Wunsch. Am genauesten var_dump() für Kontrollausgaben geeignet.

        echo "$verabschiedung $name";

        1. Kontrolliere bitte die Einstellungen zum Anzeigen von Fehlern in der phpinfo()-Ausgabe. display_errors sollte eingeschaltet sein und das error_reporting am besten auf E_ALL.

          Ein session_start() muss (ebenso wie header() oder setcookie()) vor jeglicher Ausgabe stehen. Alles außerhalb der <?php ?>-Bereiche ist ebenfalls Ausgabe. Dazu zählen auch Leerzeichen, die man nicht direkt sieht. Das session_start() muss demzufolge nicht nur vor dem Formular sondern vor allem HTML-Code stehen.

          also, ich habe die fehlermeldung aktiviert und die formular.php entsprechend geändert:

            
          <?php  
          			session_start();  
          			$_SESSION["variable"] = "Ich bin in einer Session-Datei gespeichert.";  
          			$_SESSION["variable2"] = "Ich bin in einer Session-Datei 2 gespeichert.";	  
          		?>  
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
                 "http://www.w3.org/TR/html4/loose.dtd">  
          <html>  
             <head></head>  
          <body>  
            
          	<form action="formular-werte.php" method="POST" name="form_php" target="_blank" class="php_formular">  
          		  
          		<input type="hidden" name="PHPSESSID" value="<?php echo substr(SID, strpos(SID, '=') + 1); ?>">  
          		<input  type="text" name="input_php" id="ident" value="Eintrag">  
                      <input type="submit" value="test-submit">  
          	</form>  
            
            
            
          </body>  
          </html>  
            
          
          

          nach abschicken dieses formulars erscheint nun auch keine fehlermeldung mehr.
          wenn ich nun aber den hyperlink in formular-werte.php betätige, erscheint die fehlermeldung:

          "Notice: Undefined index: input_php in formular-werte.php"

          dies geschieht gerade in der zeile, in der
          "$input_php = $_POST['input_php'];" steht und anschließend "$_SESSION["input_php"] = $input_php;". es gibt anscheinend also ein problem mit der weitergabe des formular-text-inputs per "$_POST['input_php']". wie kann  das sein? ich finde irgendwie keinen ansatz, das zu lösen.

          aussehen der formular-werte.php:

            
          <html>  
                 <head></head>  
          <body>  
          	  
            
          <?php  
          		session_start();  
          		  
          		  
          			$session = $_SESSION["variable"];  
          		echo "<h4>session-variablen-wert:</h4> $session ";  
            
          			$session2 = $_SESSION["variable2"];  
          		echo "<h4>session-variablen-wert2:</h4> $session2 ";  
            
          			$input_php = $_POST['input_php'];  
          			$_SESSION["input_php"] = $input_php;  
          			$input_php2 = $_SESSION["input_php"];  
          		echo "<h4>input_php:</h4> $input_php2 ";  
          		  
          			$sid2 = session_id();  
           		echo "<h4>php-session-id--php-func:</h4> $sid2 ";  
            
          					/*$_SESSION["phpsess_id"] = $_POST['PHPSESSID'];  
          					$sid = $_SESSION["phpsess_id"];  
          				echo "<h4>php-session-id-post:</h4> $sid ";*/	  
          	?>  
            
          <br><a href="formular-werte.php?<?php echo 'PHPSESSID=';echo $sid2; ?>" target="blank">test</a>  
          </body>  
          </html>  
          
          

          dabei habe ich hier auch schon versucht, session_start() vor jegliche ausgabe zu schreiben. auch das hat nichts genutzt.

          danke schon mal für die bisherige und hoffentlich weitere hilfe

          1. echo $begrüßung;

            nach abschicken dieses formulars erscheint nun auch keine fehlermeldung mehr.
            wenn ich nun aber den hyperlink in formular-werte.php betätige, erscheint die fehlermeldung:
            "Notice: Undefined index: input_php in formular-werte.php"
            dies geschieht gerade in der zeile, in der "$input_php = $_POST['input_php'];" steht

            Ein Link veranlasst einen Browser dazu, einen GET-Request abzusetzen. Dabei gibt es selbstverständlich keine POST-Werte und damit auch keine Einträge im $_POST-Array.

            Es ist übrigens überhaupt nicht hilfreich, wenn du die Werte aus $_GET oder $_POST 1:1 in andere Variablen umkopierst. Du erhöhst die Komplexität durch weitere Variablen und verschleierst damit nur, dass man ihr die Herkunft ansieht.

            und anschließend "$_SESSION["input_php"] = $input_php;". es gibt anscheinend also ein problem mit der weitergabe des formular-text-inputs per "$_POST['input_php']". wie kann  das sein?

            Was für eine Weitergabe? Wenn du einen Wert in eine Session schreibst, dann muss du ihn auch dort wieder rausholen (sprich: lesend auf $_SESSION['...'] zugreifen), wenn du damit weiterarbeiten willst.

            aussehen der formular-werte.php:
            <html>
                   <head></head>
            <body>
            <?php
            session_start();

            Du hast hier schon wieder HTML-Code vor dem session_start stehen.

              	$session = $\_SESSION["variable"];  
              echo "<h4>session-variablen-wert:</h4> $session ";  
            

            Greif direkt auf $_SESSION["variable"] zu. Eine zusätzliche Variable ist überflüssig, wenn der Wert nur gelesen wird und keine Änderung, die nicht in der Session festgehalten wird, gemacht werden soll.

              	$sid2 = session\_id();  
            

            <br><a href="formular-werte.php?<?php echo 'PHPSESSID=';echo $sid2; ?>" target="blank">test</a>

            PHP kümmert sich im Allgemeinen selbst um das Weiterreichen der Session-ID. Wenn berechtigte Gründe vorliegen, davon auszugehen, dass Cookies dektiviert sind, dann kann man session.use_trans_sid einschalten und muss sich nicht weiter um die SID sorgen.

            echo "$verabschiedung $name";

            1. Wenn du einen Wert in eine Session schreibst, dann muss du ihn auch dort wieder rausholen (sprich: lesend auf $_SESSION['...'] zugreifen), wenn du damit weiterarbeiten willst.

              also irgendwie hilft mir das noch nicht weiter. ich formuliere vielleicht nochmal anders:
              was ich versucht habe, war ja letztlich, eine mit wert besetzte variable ("$_POST['input_php']"), die aus einem abgeschickten formular kommt, weiterzugeben an eine neue seite. das sollte nun über einen  hyperlink geschehen. dafür sollte der wert von "$_POST['input_php']" in das session-array eingetragen werden:
               "$_SESSION["input_php"] = $_POST['input_php']" .
              nach abschicken des formulares lässt sich "$_SESSION["input_php"]" ja dann auch wunderbar ausgeben. der entscheidende punkt ist nun  allerdings, dass der wert von jetzt "$_SESSION["input_php"]" per hyperlink an weitergereicht werden soll an eine neue seite; und das klappt durch weitergabe der session-id in der adress-zeile einfach nicht, so wie es bei $_SESSION["variable"] funktioniert. die idee, dass das was mit dem absetzen eines GET-requests zu tun hat, habe ich vernommen.
              ich muss aber trotzdem nochmal fragen: wie kann man das richtig umsetzen?
              (die post-methode des formulars soll erhalten bleiben.)

              so, ich hoffe, das  wiederholte geht jetzt nicht zu sehr auf den nerv, aber ich brauche einfach noch einen besseren ansatz, wenn lust besteht auch gerne über eine ungefähre kleine beispielzeile an code.

              (die bemängelten überflüssigen parameter zwischendurch, waren mir natürlich auch schon bewusst. die waren ursprünglich auch noch nicht geplant. ich hatte nur an irgendeiner frühen stelle beim testen eine fehlerseite erhalten, die komischerweise erstmal dadurch wieder verschwunden ist, dass ich die entsprechenden parameter zwischen geschoben hab.)

              gruß

              1. echo $begrüßung;

                der entscheidende punkt ist nun  allerdings, dass der wert von jetzt "$_SESSION["input_php"]" per hyperlink an weitergereicht werden soll an eine neue seite; und das klappt durch weitergabe der session-id in der adress-zeile einfach nicht, so wie es bei $_SESSION["variable"] funktioniert.

                Das heißt, dass du in $_SESSION["variable"] den in einem anderen Script da reingeschriebenen Wert zwar wiederfindest, $_SESSION["input_php"] aber nicht? Wenn das so ist, wie hast du das konkret geprüft? Welche Fehlermeldungen kamen (bei voll aktiviertem error_reporting)?

                Versuch mal klein anzufangen. Nimm zwei neue Dateien, schreib in die eine:

                <?php
                  session_start();
                  $_SESSION['foo'] = 'bar';
                  ?>
                  <a href="datei2.php">andere Datei</a>

                und in die andere:

                <?php
                  session_start();
                  var_dump($_SESSION);

                Wenn das schon nicht geht, was konkret beobachtest du? Wie sind die sessionrelevanten Parameter eingestellt (phpinfo()-Ausgabe)?
                Wenn es keinen Fehler gibt, ersetze den Link durch ein Formular, so wie du das vorhast.

                Session-Handling ist im einfachsten Fall genommen genauso simpel wie oben. Man braucht ein session_start() und Zugriffe auf $_SESSION. Mehr nicht.

                echo "$verabschiedung $name";

                1. also gut, jetzt wollte ich schon ein weiteres mal alles ganz in ruhe erklären bis mir nun folgender fehler aufgefallen ist:
                  ich hatte in der datei, auf die am ende der hyperlink verweisen soll immer noch die zeile "$_SESSION["input_php"] = $_POST['input_php']" stehen, und zwar bevor wieder auf $_SESSION["input_php"] an sich zugegriffen werden sollte.
                  nun macht natürlich auch die schon am 25.02.2009 um 16:38 erwähnte fehlermeldung "Notice: Undefined index: input_php in formular-werte.php" sinn.

                  ja dann danke für die bemühungen

              2. Hallo

                was ich versucht habe, war ja letztlich, eine mit wert besetzte variable ("$_POST['input_php']"), die aus einem abgeschickten formular kommt, weiterzugeben an eine neue seite. das sollte nun über einen  hyperlink geschehen. dafür sollte der wert von "$_POST['input_php']" in das session-array eingetragen werden:
                "$_SESSION["input_php"] = $_POST['input_php']" .
                nach abschicken des formulares lässt sich "$_SESSION["input_php"]" ja dann auch wunderbar ausgeben. der entscheidende punkt ist nun  allerdings, dass der wert von jetzt "$_SESSION["input_php"]" per hyperlink an weitergereicht werden soll an eine neue seite; und das klappt durch weitergabe der session-id in der adress-zeile einfach nicht, so wie es bei $_SESSION["variable"] funktioniert. die idee, dass das was mit dem absetzen eines GET-requests zu tun hat, habe ich vernommen.
                ich muss aber trotzdem nochmal fragen: wie kann man das richtig umsetzen?
                (die post-methode des formulars soll erhalten bleiben.)

                Wenn du eine neue Seite über einen Link aufrufst, tust du das per GET. Ein Formular wird dabei, egal mit welcher Methode es arbeitet, *nicht* übertragen. Wenn du den fraglichen Link innerhalb einer Session aufrufst, ob mit Cookie oder mit der Session-ID als Linkparameter ist dabei egal, wird dir der Sessionwert auch im dabei aufgerufenen Skript zur Verfügung stehen, so dieses Skript ebenfalls innerhalb der Session agiert.

                Tschö, Auge

                --
                Die deutschen Interessen werden am Liechtenstein verteidigt.
                Veranstaltungsdatenbank Vdb 0.3
  2. Hi!

    Mit session_start() veränderst Du den HTTP-Header, welchen der Server sendet - zuvor darf keine Ausgabe erfolgen.
    Adams Gefährtin hilft noch immer;)

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Mit session_start() veränderst Du den HTTP-Header, welchen der Server sendet - zuvor darf keine Ausgabe erfolgen.

      also an welcher stelle müsste session_start() dann erscheinen? aber hat das tatsächlich mit dem problem zu tun?

      1. Hi!

        » Mit session_start() veränderst Du den HTTP-Header, welchen der Server sendet - zuvor darf keine Ausgabe erfolgen.

        also an welcher stelle müsste session_start() dann erscheinen? aber hat das tatsächlich mit dem problem zu tun?

        _Vor jeglicher Ausgabe_ und: ja.

        Evtl. interessieren Dich die Output-Control-Funktionen.

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)