Formulareingaben mit Sessions übergeben

Guten Tag!

Ich zermartere mir nun schon seit einem Tag mein Gehirn mit einem eigentlich einfachen Problem - aber es will und will einfach nicht funktionieren.

Als Ausgangspunkt steht ein mehrseitiges Formular mit rund 120 -feldern. Ich möchte diese als Variable in einer Session speichern - um so dem Nutzer die Möglichkeit zu geben, jederzeit nochmal eine oder mehrere Seiten zurück gehen zu können, um ggf. falsch gemachte Angaben zu korrigieren. Am Schluss sollen alle mit Inhalt gefüllten Formularfelder bzw. Variablen in einer MySQL-Datenbank gespeichert werden.

Mein Problem hängt nun bei der Speicherung der Variablen in einer Session. Auf der ersten Formularseite eröffne ich diese mit

<?php session_start();
session\_register("vorname"); ?\> (exemplarisch möchte ich zunächst nur eine Variable übergeben und die Lösung dann auf alle anderen Variablen übertragen) Im entsprechenden Formularfeld will ich eventuell bereits eingegebene Inhalte mit ausgeben. Die Werte übergebe ich derzeit mittels Session mit <?php printf('Zurück...[Weiter ...](weiter.php?%25s=%25s)', session\_name(), session\_id() ); ?\> auf die nächste (bzw. vorangegangene) Seiten. Aber genau das will und will einfach nicht funktionieren! Ich habe auch schon mit input hidden-fields gearbeitet, um jede Variable auf jeder Seite auszugeben... aber selbst ein einfaches echo $variable; auf einer Folgeseite klappt so schon nicht... Ich muss dazu sagen, dass ich kein gut versierter Programmierer bin - es kann gut sein, dass ich einfach nur den Wald vor lauter Bäumen nicht sehe. Wäre es aufgrund der großen Menge an Daten vielleicht sogar geschickter, alle Variablen temporär in einer MySQL-Datenbank zu speichern? Vielen Dank für Ihre Hilfe! Christoph

Hallo Christoph,

bei der Nutzung von Sessions ist folgendes wichtig:

  • Auf jeder (!) Seite muss am Anfang „session_start()“ stehen.

  • Um die Werte aus dem Formular in Session-Variablen zu speichern, musst Du Das Array „$_SESSION“ verwenden.

Also muss auf der Seite mit dem Formular stehen:

session\_start();
$\_SESSION['vorname']=$\_POST['vorname'];

und bei der Formularanzeige muss stehen

Die Notierung von „$vorname“ kann funktionieren wenn die Globale Variablen an sind. Aber das ist extrem, unsicher, und außerdem was soll er dann an welcher Stelle nehmen, das aus $_POST oder das aus $_SESSION? Daher rate ich DRINGEND dazu, IMMER das Array dazuzuschreiben, dann ist es sicher und eindeutig.

session_register() wird nicht mehr benutzt bzw.ist ab PHP 5.irgendwas sogar entfernt worden. Ich habe noch nie Variablen registriert, die sind wie alle Variablen in PHP assoziativ (automatisch registriert bei der ersten Benutzung und Typunabhängig).

Viele Grüße,
Markus

Hallo Markus,

vielen herzlichen Dank für deine sehr ausführliche Antwort - ich werde mich gleich daran machen, selbiges umzusetzen und gebe dann Bescheid, ob ich erfolgreich damit war.

Viele Grüße und einen schönen Tag,
Christoph

Hallo Markus,

mit deiner Hilfe bin ich schon einmal deutlich weiter. Die Variable wird mit

<?php session_start();
$\_SESSION['vorname']=$\_POST['vorname']; ?\> auf der Ausgangsseite schon einmal auf die nächste Seite übertragen und dort mittels <?php echo $_SESSION['vorname']; ?> auch angezeigt. Mein -Tag sieht hierzu übrigens folgendermaßen aus:

Auf der nächsten Seite steht nun zunächst wieder

<?php session_start();
$\_SESSION['vorname']=$\_POST['vorname']; ?\> und sie wird mittels hidden-Feld innerhalb des sich dort befindlichen anderen Formulars auch in die dortige Auswertung mittels miteinbezogen. wenn ich nun aber dort auf submit klicke, und zwar mittels bleibt das entsprechende Formularfeld auf der Ausgangsseite trotz leer. Es ist doch zum Haare raufen :smile: - Wo liegt mein Fehler?

SOLVED: klein, gemein, aber fein, die Lösung:

natürlich braucht dieses Input-Feld auch name=„vorname“ zugewiesen.

Juhu, VIELEN DANK! Damit ist dieses Problem dank deiner Hilfe gelöst!

Hallo Christoph,

möglicherweise ist register_globals auf dem Webserver ausgeschaltet.
Dann kannst Du Deine hidden-Felder (dich ich übrigens auch bevorzugt hätte) nicht mehr mit $vorname ausgeben, sondern nur mit $_POST[‚vorname‘].

Das macht man aus Sicherheitsgründen so.

Was Du mit der Schreibweise
session_name(),
session_id()
bezweckst, ist mir nicht ganz klar.

Du kannst die Variable, die Du vorher in der Session registered hast, danach mit $_SESSION[‚vorname‘] ansprechen.

Das hängt aber auch etwas davon ab, wie die Einstllungen für Session-Verarbeitung auf dem Server sind und da kann man schwierig was sagen so aus der Ferne.

Wichtig ist noch, daß Du mit method=‚post‘ arbeitest, wenn Du das Formular baust und die übergebenen Werte mit $_POST ansprechen willst.
Das ist allerdings auch Voreinstellung.

Wenn Du mit method=‚get‘ arbeitest, dann werden die Variablen in der URL übergeben und werden mit $_GET angesprochen.
Das ist aber bei 120 Input-Feldern nicht so geschickt.

Gruß, Regina

hi,

hier einige session-funktionen zum setzen und auslessen der sessionvariable

/* wert der session hinzufuegen */
function setSessionValue( $name, $wert ) {
global $HTTP_SESSION_VARS, $_SESSION;

/* neues handling */
$_SESSION[$name] = $wert;
/* altes handling */
$HTTP_SESSION_VARS[$name] = $wert;
}
/* werte der session abfragen */
function getSessionValue( $name ) {
global $HTTP_SESSION_VARS, $_SESSION;

/* neues handling */
$value = @$_SESSION[$name];
/* altes handling */
if (!$value) $value = @$HTTP_SESSION_VARS[$name];
return $value;
}
/* werte der session loeschen */
function deleteSessionValue($name) {
global $HTTP_SESSION_VARS, $_SESSION;

/* neues handling */
unset($_SESSION[$name]);
/* altes handling */
unset($HTTP_SESSION_VARS[$name]);
}

in deinem skript session_start(); aufrufen und dann die entsprechende funktion aufrufen.

cu
harald

Hallo,

Zunächst einmal: Die Funktion session_register() ist veraltet (deprecated) und sollte nicht mehr verwendet werden. Du kannst Variablen in der Session speichern und aus der Session auslesen mittels $_SESSION, genauso wie du ja mit $_POST auf Variablen von Formularen zugreifst. (Solltest du direkt mittels $variablenname auf übertragene Formularinhalte zugreifen, benutzt du die eigentlich schon längst abgeschalteten register_globals - ein großes Sicherheitsrisiko.)

Zu beachten ist auch, dass auf jeder Seite, auf der die Session Verwendung finden soll, die erste Anweisung sein muss, die abgearbeitet wir…

Hallo Christoph,

schön dass ich Dir helfen konnte.

Viele Grüße,
Markus

Hallo,

soweit ich deinen Code verstanden habe, hast Du an keiner Stelle die Variable an die Session übergeben.

z.B. $vorname = $_SESSION[‚vorname‘];

Ausserdem ganz wichtig muss auf jeder Seite wo Du die Sessions verarbeiten möchtest ganz am Anfang vor allem anderen session_start(); stehen.

Wenn Du die Variablen ausgeben möchtest, kannst Du auf jeder Seite z.b. mit echo $_SESSION[‚vorname‘]; die Daten aus der Session wieder ausgeben oder weiterverarbeiten - solange du nicht die Session beendet oder den Browser geschlossen hast.

Ich hoffe das hilft Dir auf die richtige Spur…

Hier gibts noch eine gute Anleitung
http://de3.php.net/manual/de/function.session-start.php

Viel Erfolg.

Problem mit Dropdowns und Radio-Buttons
Hallo Markus,

das Übergeben der Variablen von Seite zu Seite funktioniert mittlerweile einwandfrei - und ich dachte nun, es wäre ein Einfaches, dies damit auf Dropdowns und Radio-Buttons zu portieren:

disabled=„disabled“>Bitte auswählen… value=„Deutschland“>Deutschland

etc…

Die Variable $Nationalitaet kann ich außerhalb dieser if-Schleife auch problemlos mittels echo anzeigen, egal auf welcher Seite… nur der gewünschte Effekt, dass die Dropdowns entsprechend der vorher getätigten Auswahl gespeichert bleiben, klappt nicht…

Wo ist mein Denkfehler?

Nochmal vielen, vielen Dank!!
Christoph.

Problem mit Dropdowns und Radio-Buttons
Hallo Markus,

das Übergeben der Variablen von Seite zu Seite funktioniert mittlerweile einwandfrei - und ich dachte nun, es wäre ein Einfaches, dies damit auf Dropdowns und Radio-Buttons zu portieren:

disabled=„disabled“>Bitte auswählen… value=„Deutschland“>Deutschland

etc…

Die Variable $Nationalitaet kann ich außerhalb dieser if-Schleife auch problemlos mittels echo anzeigen, egal auf welcher Seite… nur der gewünschte Effekt, dass die Dropdowns entsprechend der vorher getätigten Auswahl gespeichert bleiben, klappt nicht…

Wo ist mein Denkfehler?

Nochmal vielen, vielen Dank!!
Christoph.
… mehr auf http://www.wer-weiss-was.de/app/query/display_query?..

Hallo,

zuerst mußt du dafür sorgen, dass bei einem neuen Formular auch eine neue Session angelegt wird. Sonst arbeitet er ja mit eventuell seiner alten Session oder einer fremden.

Dann solltest du nicht mit session_register sondern mit der Superglobalen $_SESSION[‚vorname‘] arbeiten.

Die Session-ID mußt du nicht an das andere Formular übergeben, das mach PHP bei entsprehender Einstllung selbts durch ein Cookie. Wenn cookies nicht erlaubt sind, fügt PHP die sessionID automatisch an eine GET-Abfrage an.

Nein, ein speichern in SQL ist nicht notwendig. für jede Session in eine „normale“ Datei angelegt und die Datenmenge ist theoretisch unbegrenzt.

Das Formular mußt du mit einer Action beenden.

Mehr fällt mir jetzt nicht ein, was falsch sein könnte.

Grüße
Tom

Hallo Christoph,

alle Radiobuttons die denselben Wert repräsentieren müssen denselben Namen tragen:

http://de.selfhtml.org/html/formulare/auswahl.htm#ra…

Also:

name="Nationalitaet" value="" disabled="disabled"\>Bitte auswählen... 
name="Nationalitaet" value="Deutschland"\>Deutschland

Nur dann weiß der Browser, dass die Radiobuttons zusammengehören.

Viele Grüße,
Markus

Für mich sieht es so aus, als ob du der Session gar keinen Wert zuweist.
$_SESSION[‚vorname‘] = „Name“;
und dann kannst du den Inhalt einfach mit:
echo $_SESSION[‚vorname‘] wieder ausgeben.

Hallo,

dein Problem ist, dass vordeffinierte Variablen zum Übergeben von Werten sehr oft keine normalen Variablen sind, sondern meistens Arrays (damit du mehr als nur einen Wert übergeben kannst). Diese werden mit eckigen Klammern geschrieben.

Ich verlinke dir hier mal die entsprechende Seite der php-Dokumentation, die das sehr schön erklärt:
http://php.net/manual/de/session.examples.basic.php

Die Doku enthält auch ein kleines Beispielscript, wie derartige Variablen gesetzt werden können. Wieder auslesen geht wie gewohnt mit echo. Du musst die Variable eben als Array ansprechen (also wie in der Doku beim Schreiben der Werte in das Array).

Viel Erfolg.

Hallo,

sorry, dass ich erst jetzt antworte, ich stecke mitten im Umzug. Zum Thema Session gibt es einige sehr gute Tutorials, einfach mal danach googlen.
Ich habe vor längerer Zeit mal was mit Sessions gemacht, aber vieles auch wieder vergessen.
Allerdings würde ich bei der Menge der zu speichernden Daten, die einzelnen Werte direkt in eine MySQL-Tabelle schreiben und dann beim Blättern entsprechend auslesen.

Gruß aus München,
Frank