$_POST-Register nach Formularauswertung wieder löschen
Beili
- php
0 Mark0 Sven Rautenberg0 Beili
Hallo zusammen,
ich verwende eine PHP-Datei um ein Formular (Eingabemaske für einen kleinen Terminkalender) anzuzeigen und auszuwerten.
Oben PHP-Quelltext für die Auswertung, unten HTML mit 'inline' PHP-Zeilen.
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 ...
Die Seite kann ohne erneute Senden der Information nicht aktualisiert werden. Klicken sie auf "Wiederholen", um die Information erneut zu versenden oder klicken sie auf "Abbrechen", um zu der Seite zurückzukehren, die Sie anzeigen möchten.
So oft ich diese Meldung mit Wiederholen bestätige, so oft speichert mir mein Skript den letzten Termin in meine Datei :-(.
Kann ich die $_POST-Register irgendwie löschen, oder habt ihr eine andere geniale Idee ...
Beili
... interessiert mich jetzt auch. Bisher erzeuge ich immer ne id beim Aufruf des Formulars, speicher die ab und beim versenden wird die im Hidden-Feld auch mit übermittelt und überprüft ob diese auch da ist. wenn ja, kann der Eintrag erfolgen, und die ID wird gelöscht. Wenn die ID nicht vorhanden ist, Ist der Datensatz bereits eingetragen... da zuvor gelöscht
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
Hallo zusammen,
ich danke euch beiden.
Werde auch mal das Archiv durchsuchen, da ich nun eher weiß nach was ich suchen muss.
Beili