Sven Rautenberg: $_POST-Register nach Formularauswertung wieder löschen

Beitrag lesen

Moin!

Das Speichern eines oder mehrerer Termin in meine CSV-Datei funktioniert. Wenn ich nun mindestens einen Termin gespeichert habe und die Seite aktualisiere, bringt mir der IE folgende Meldung ...

Das liegt daran, dass die Ergebnisseite des Speichervorgangs aufgrund des POST-Requests an den Browser gelangte.

Der Browser zeigt eine Seite immer aufgrund einer von zwei üblichen Methoden an: GET ist der Standard (wenn da Parameterdaten ausgewertet werden sollen, stecken die in der URL drin), POST ist für größere Formulardatenmengen vorgesehen.

Das Versenden eines Formulares ist für einen Browser deswegen eine größere "Aktion", weil der Benutzer in der Regel etwas deutlicher darauf hingewiesen wird, dass er Formulardaten im Begriff ist wegzusenden.

Wenn du eine mit GET aufgerufene Seite neu lädst, wird einfach die URL neu abgerufen. Würde dein Skript die URL-Daten (also $_GET statt $_POST) auswerten, würde auch dann jedes neue Aufrufen einen neuen (alten) Eintrag (doppelt) in die Datei speichern.

Beim Seitenabruf mit POST müssen die zugrundeliegenden Formulardaten ja irgendwie dem Server zur Verfügung gestellt werden. Deswegen fragt der Browser nach, ob er die nochmal senden soll. Das hat aber mit dem Ergebnis "doppelter Eintrag" nichts zu tun.

Im Endeffekt gibt es nur eine Lösung: Die Ergebnisseiten-URL darf keine Formulardatenbestandteile enthalten - dann kann man sie beliebig oft abrufen und verursacht keine Dopplungen. Das bedeutet: Keine Parameter in der URL (GET-Formular) und keine im POST-Request. Und sowas erreicht man typischerweise dadurch (steht aber auch schon häufiger im Archiv - warum hast du da nicht gesucht?), dass die verarbeitende Seite den Browser mittels eines Redirects auf die Ergebnisausgabeseite schickt. Der Redirect verhindert also, dass der Browser die Formular-URL mehrfach abrufen kann, weil er ja gesagt bekommt, dass er nicht diese Seite abrufen soll, sondern die Ergebnisseite.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)