Session und Formulare

Hallo liebe Experten,

ich habe vor einiger Zeit schon einmal eine Frage dazu gestellt. Nach Ausfüllen eines Formulars und dem Absenden (z.B. an eine Vorschau bzw. Übersicht der eingegebenen Daten) soll der Benutzer die Möglichkeit haben, seine Eingaben zu korrigieren. Dazu versuchte ich, durch den history.back() Befehl wieder zurück zum Formular zu gehen. Das Formular war dann leider leer und der Benutzer musste alles neu eingeben. Das wollte ich nicht. Darum habe ich ein Workaround programmiert, das alle Daten temporär in einer zusätzlichen MySQL-Tabelle speichert, von woaus sie wieder ausgelesen und gelöscht werden. Nun hat sich diese Praxis als sehr umständlich erwiesen, da die Seite, um die es geht, voller Formulare für die unterschiedlichsten Zwecke ist. Auf gut Deutsch: Es nervt wie Sau! Damals konnte mir leider niemand wirklich helfen. Man schob die Schuld auf den Browser und spekulierte mit anderen nahe liegenden Möglichkeiten.

Jetzt habe ich ganz aktuell festgestellt, dass die Löschung der eingegebenen Inhalte aus den Formularfeldern damit zu tun hat, ob eine Session läuft oder nicht. Also: session_start(); ?> löscht die Daten und wenn es fehlt, bleiben die Formulareingaben erhalten. Darum jetzt meine Fragen:

Gibt es eine ähnlich bequeme Möglichkeit, eine ganze Reihe von Daten eine Session lang (bis der Browser geschlossen wird) schnell bereit zu halten, ohne jedoch die session_start()-Anweisung zu benutzen? Wenn ja, wie sieht so etwas in PHP-Code aus (Sniplet genügt)? Oder kann man irgendwie verhindern, dass durch den session_start()-Befehl die Formulardaten gelöscht werden? Am Server und der PHP-Konfiguration kann ich leider nichts machen, da die Ressourcen am Ende nicht auf meinem Rechner, sondern auf dem Server eines Webspace-Providers liegen werden. Die Übergabe per „get“ geht auch nicht, da die Datenmenge ein Vielfaches der höchstmöglichen Zeichenanzahl (256 glaube ich) ist.

Ich bin für jeden noch so kleinen Hinweis sehr dankbar.

Schönen Gruß aus dem sonnigen Saarland

Huttatta

ich habe vor einiger Zeit schon einmal eine Frage dazu
gestellt. Nach Ausfüllen eines Formulars und dem Absenden
(z.B. an eine Vorschau bzw. Übersicht der eingegebenen Daten)
soll der Benutzer die Möglichkeit haben, seine Eingaben zu
korrigieren.

Versuch mal den Kontaktformular-Generator:
http://www.rent-a-tutor.com/tools/

damit kannst Du ein Kontaktformular erstellen, in dem Du falsch ausgefüllte Felder nach dem Absenden korrigieren kannst. Den PHP-Quellcode bekommst Du nach der Erstellung per e-Mail geschickt. Da kannst Du mal nachsehen, wie das programmiert ist und als Vorlage für Deine Formulare nutzen.

Gruß
Marian

Hallo Marian,

Versuch mal den Kontaktformular-Generator:
http://www.rent-a-tutor.com/tools/

damit kannst Du ein Kontaktformular erstellen, in dem Du
falsch ausgefüllte Felder nach dem Absenden korrigieren
kannst. Den PHP-Quellcode bekommst Du nach der Erstellung per
e-Mail geschickt. Da kannst Du mal nachsehen, wie das
programmiert ist und als Vorlage für Deine Formulare nutzen.

leider auch hier das gleiche Problem. Wenn ich ganz zu Anfang einfach nur session_start(); ?> einfüge, was für mich wichtig ist, sind die Eingaben nach dem Zurückspringen wieder auf die Vorgabewerte zurückgesetzt. Kannst ja selbst mal probieren.

Gruß

Huttatta

leider auch hier das gleiche Problem. Wenn ich ganz zu Anfang
einfach nur session_start(); ?> einfüge, was für mich
wichtig ist, sind die Eingaben nach dem Zurückspringen wieder
auf die Vorgabewerte zurückgesetzt. Kannst ja selbst mal
probieren.

deshalb sollte man ja möglichst einen eigenen „Zurück“-Button verwenden. Die History-Back Funktion des Browsers macht eigentlich immer solche Probleme in Verbindung mit Sessions.

Das Ganze ist auch teilweise abhängig vom Browser. Mit Opera hat man das Problem z.b. nicht.

Gruß
Marian

1 „Gefällt mir“

Mit den Sessions hat das sicher nichts zu tun, das hängt ja vom Browser ab ob er dann nen neuen Request macht oder das aus dem Cache zieht.

Aber du solltest auf keinen Fall zurück gehen per history.back(), dann ist undefiniert was passiert. Gebe einfach ein neues Formular aus und schreibe die Werte dort als Vorauswahl rein, die schon eingegeben waren.
Vorwärts, nicht rückwärts :smile: Der Benutzer sieht das ja nicht offensichtlich, du musst das nur geschickt programmieren

Grüße
Bruno

Hallo Bruno,

Mit den Sessions hat das sicher nichts zu tun, das hängt ja
vom Browser ab ob er dann nen neuen Request macht oder das aus
dem Cache zieht.

Aber ganz bestimmt. Immer gleicher Browser, einmal mit und ein anderes Mal ohne Session --> einmal gehts gut und ein anderes Mal nicht. Ich habe es zigmal getestet. Immer das Gleiche: ist von Session abhängig. Probier’s mal aus.

Aber du solltest auf keinen Fall zurück gehen per
history.back(), dann ist undefiniert was passiert. Gebe
einfach ein neues Formular aus und schreibe die Werte dort als
Vorauswahl rein, die schon eingegeben waren.
Vorwärts, nicht rückwärts :smile: Der Benutzer sieht das ja nicht
offensichtlich, du musst das nur geschickt programmieren

Vorwärts, nicht rückwärts. Das scheint hier wirklich die beste Lösung zu sein. Ich werde mir da was überlegen müssen.

Dann stellt sich mir im Augenblick bloß die Frage, wie ich ein Formular erstelle, das 2 verschiedene Ziele (action) hat: einmal die Vorschau und einmal das entgültige Absenden an das eigentliche Zielscript. Ich glaube, das geht nicht. Aber wenn ich 2 Submit-Buttons unterschiedliche Namen gebe, werden dann die Namen als Variablen mit dem Inhalt des Values an das Zielscript mit übergeben? Dann könnte ja das Zielscript ganz einfach entscheiden, wie mit den Variablen weiter umgegangen wird.

Ich teste es mal aus. Jedenfalls vielen Dank für deine Antwort.

Gruß
Huttatta

Hallo Marian,

deshalb sollte man ja möglichst einen eigenen „Zurück“-Button
verwenden. Die History-Back Funktion des Browsers macht
eigentlich immer solche Probleme in Verbindung mit Sessions.

leider auch der eigene „Zurück“-Button. Ist offensichtlich einfach so und muss hingenommen werden.

Das Ganze ist auch teilweise abhängig vom Browser. Mit Opera
hat man das Problem z.b. nicht.

Das habe ich auch schon mit Verwunderung festgestellt. Wären doch nur auch die „Großen“ so unproblematisch !!! Naja … ich werde es mit der Vorwärts-Taktik (siehe parallelen Thread) versuchen: Angriff ist die beste Verteidigung :wink:

Gruß und danke für deine Antworten.

Huttatta

leider auch der eigene „Zurück“-Button. Ist offensichtlich
einfach so und muss hingenommen werden.

Das ist wohl so. Wenn es sich nicht vermeiden lässt, kannst Du halt um das Problem herum programmieren. Den Ansatz hast Du ja schon richtig erkannt (per mySQL Tabelle), nur kannst Du die Daten auch in der Session speichern, statt in einer DB-Tabelle.

Ich schicke Dir mal ein Beispiel per e-Mail zu.

Gruß
Marian

Aber ganz bestimmt. Immer gleicher Browser, einmal mit und ein
anderes Mal ohne Session --> einmal gehts gut und ein
anderes Mal nicht. Ich habe es zigmal getestet. Immer das
Gleiche: ist von Session abhängig. Probier’s mal aus.

Das mag schon sein, aber selbst wenn es bei dir so ist, eine Garantie gibt es dafür nicht… das Verhalten beim Klicken vom back-Button ist aus deiner Programmierersicht undefiniert, deswegen: mach das nicht.

Vorwärts, nicht rückwärts. Das scheint hier wirklich die beste
Lösung zu sein.

Nicht nur hier, immer.

Dann stellt sich mir im Augenblick bloß die Frage, wie ich ein
Formular erstelle, das 2 verschiedene Ziele (action) hat:
einmal die Vorschau und einmal das entgültige Absenden an das
eigentliche Zielscript. Ich glaube, das geht nicht. Aber wenn
ich 2 Submit-Buttons unterschiedliche Namen gebe, werden dann
die Namen als Variablen mit dem Inhalt des Values an das
Zielscript mit übergeben? Dann könnte ja das Zielscript ganz
einfach entscheiden, wie mit den Variablen weiter umgegangen
wird.

Jo du kriegst den Buttonvalue übergeben, mir gefällt das persönlich nicht (so ein Text kann ja durchaus sonderzeichen enthalten oder mehrsprachig übersetzt sein), aber falls du wirklich zwei Submitbuttons in einem HTML Formular brauchst, dann ist das ein gangbarer Weg.

Grüße
Bruno

Hallo Bruno,

danke für deine Tipps und Ausführungen. Du hast Recht. Ich werde es deinen Vorschlag beherzigen und es (wie im Grunde vorher auch schon) „vorwärts“ machen mit echten Links zur nächsten (bzw. vorherigen) Seite. Nur mit dem Unterschied, dass ich die Daten jetzt in der Session speichern werde (Vorschlag von Marian). Ist wesentlich einfacher als die temporäre DB.

Gruß
Huttatta

Hallo Marian,

Ich schicke Dir mal ein Beispiel per e-Mail zu.

1000 Sterne De Luxe für deine Mail. Da hätte ich eigentlich selbst drauf kommen müssen. Manchmal sieht man den Wald vor lauter Bäumen nicht. Danke für den netten Klaps auf den Hinterkopf.

Gruß
Huttatta