POST-Variablen leeren
ralf
- php
0 Alexander Foken0 ralf
0 Sven Rautenberg0 ralf
Hallo,
gibt es eine Möglichtkeit übergebene POST-Variablen zu löschen?
Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)
Ich habs schob mit $_POST["aby"]=""; und unset($_POST); probiert, leider ohne erfolg
Gruß
Ralf
Moin Moin !
Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)
Nein, ist auch nicht nötig. Nimm eine ID mit in die Daten auf (<input type="hidden" ...>) und prüfe, ob Du diese ID schon verarbeitet hast (sprich: ob sie in der DB steht).
Beispiel: Dieses Forum. Versuch mal, ein Posting mit [Back] und [Reload] zweimal abzuschicken.
Alexander
Hi,
Moin Moin !
Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)
Nein, ist auch nicht nötig. Nimm eine ID mit in die Daten auf (<input type="hidden" ...>) und prüfe, ob Du diese ID schon verarbeitet hast (sprich: ob sie in der DB steht).
Versteh ich nicht ganz, sorry
Ich hab auf meiner Page eine Eingabe Zeile in der Kommentare eingefügt werden. Unterhalb des Formular stehen dann die eingefügten Kommentare. Mit Enter wird das Formular abgeschickt, und die gleiche Seite nochmals aufgerufen. Der Kommentar wird in die DB geschrieben. Danach wird die Tabelle mit den Kommentaren ausgelesen und wieder in die Seite geschrieben, womit Dein Kommentar dann sofort Online ist.
Was soll ich nun mit nem ID-Feld machen?
Gruß
Ralf
Moin Moin !
Du willst ein Formular, dessen Abschicken Deine DB verändert, reload-fest machen. Richtig?
Du mußt also Reloads erkennen.
Das kannst Du nur, wenn Du in das Formular (und damit in die übermittelten Daten) eine eindeutige ID einbaust, anhand derer Du mehrfaches Abschicken erkennen kannst (denn dann wird die eindeutige ID erneut übermittelt).
Sprich:
Im Formular <input type="hidden" value="$systemzeit$remoteaddr$zufallszahl" name="FINDME">
Im Request-Handler:
if (SchonBenutzt(parameter("FINDME"))) { // z.B. "select count(*) as n from idlist where findme=?" liefert n>0
Fehler("Bitte nur einmal abschicken")
} else {
DatenEintragen(...)
}
Probier bitte mal aus, wie das Forum auf doppelte Submit-Versuche (BACK -> RELOAD) reagiert. Dann siehst Du es. (Im Quelltext: <input type="hidden" name="unid" value="Zy0Y06Yy74YZ">)
Alexander
Moin!
gibt es eine Möglichtkeit übergebene POST-Variablen zu löschen?
Sinn ist das, falls der User auf aktualisieren klickt, die Daten nicht nochmals verfügbar sind (werden in DB geschrieben)
Ich habs schob mit $_POST["aby"]=""; und unset($_POST); probiert, leider ohne erfolg
Das geht so nicht!
Bedenke den Weg, den die Daten nehmen. Der Benutzer gibt etwas ins Formular ein, und beim Abschicken wird ein POST-Request an den Server geschickt, der daraufhin die POST-Daten verarbeitet.
Beim Reload sendet der Browser die eingegebenen Formulardaten in einem erneuten, identischen POST-Request einfach nochmal - der Server fängt damit wieder an zu arbeiten.
Das bedeutet: Entweder mußt du verhindern, dass du zweimal mit identischen Daten arbeitest. Das funktioniert z.B., indem du als hidden-Feld eine eindeutige ID mitsendest und vor der Verarbeitung prüfst, ob du diese ID schon vorher mal empfangen hast - in diesem Fall brichst du die Verarbeitung dann ab, informierst den User darüber, und bietest Abhilfe an (oder auch nicht).
Oder (einfacher) du nimmst dem User einfach die Seite mit dem POST-Request weg, indem du den POST-Request nicht mit der Ausgabe einer kompletten Seite beantwortest (diese Seite kann man mit Reload neu laden), sondern mit einem Redirect auf eine Ergebnisseite, welche vom Browser dann mit einem (formulardatenlosen!) GET-Request geholt werden.
Also POST -> Verarbeitung und Redirect auf Danke-Seite (oder so ähnlich) -> Danke-Seite ausgeben.
Die Danke-Seite kann dabei durchaus vom selben Skript ausgegeben werden. Reloads beziehen sich dann immer auf die GET-URL der Danke-Seite - und damit entsteht kein Schaden, weil keine Formulardaten mehrfach verarbeitet werden.
- Sven Rautenberg
Hi,
Das bedeutet: Entweder mußt du verhindern, dass du zweimal mit identischen Daten arbeitest. Das funktioniert z.B., indem du als hidden-Feld eine eindeutige ID mitsendest und vor der Verarbeitung prüfst, ob du diese ID schon vorher mal empfangen hast - in diesem Fall brichst du die Verarbeitung dann ab, informierst den User darüber, und bietest Abhilfe an (oder auch nicht).
Ich hab ein Hiddenfeld mit der Timefunktion bestückt, also das im Feld der Timestamp steht. Beim Abschicken des Formulars wird geprüft ob die gleich Zeit bereits vom gleichen User (IP) abgeschickt wurde. Bei Ja passiert nichts bei Nein wird sein Eintrag in die Liste eingeschrieben
Danke für Eure Hilfe
Gruß
Ralf