$_POST-Variable dauerhaft "entleeren"
Christopher
- php
0 Jeena Paradies0 globe
Hallo zusammen!
Folgendes Problem: Es wird nach diversen Usereingaben ein Formular abgesendet, dessen Inhalte in eine DB-Tabelle gespeichert werden. Der User bekommt eine Ausgabe, dass alles problemlos ablief und wird automatisch weitergeleitet. Gibt der User allerdings (versehentlich) auf einen "Zurück"-befehl, werden die ganzen Eingaben wieder in der DB abgelegt, weil der Browser die (hier) Post-variablen wiederherstellt.
Wie ließe sich dieses vorbeugen (ohne dass ich die ganze DB-Infrastruktur ändern muss)?
Hallo,
Wie ließe sich dieses vorbeugen (ohne dass ich die ganze DB-Infrastruktur ändern muss)?
Wenn es nur um das versehentlich geht dann ist das ganz einfach.
Du generierst eine Sicherheits ID (sid), welche eizigartig (unique) sein sollte. Ich nehme da zum Beispiel den Zeitstempel kombiniert mit der IP des Users. Diese gibst du mit dem Formular in einem versteckten Formularfeld aus. Wenn das Formularfeld abgeschickt wird wird auch die sid in der Datenbank abgelegt in einem Feld welches auf unique eingestellt ist.
Sobald der User wieder auf zurück im Browser klickt und noch mal absendet wird die gleiche sid verschickt. Die Datenbank registriert, dass es diese sid schon gibt und gibt einen Fehler aus, dass die sid nicht unique ist. Diesen fängst du ab und gibst einen Dinweis darauf aus, dass aus versehen zwei mal das gleiche Formular abgesendet wurde.
Grüße
Jeena Paradies
n'abend,
Gibt der User allerdings (versehentlich) auf einen "Zurück"-befehl, werden die ganzen Eingaben wieder in der DB abgelegt, weil der Browser die (hier) Post-variablen wiederherstellt.
ich missbrauche für diese funktion ganz gerne den webserver, statt das kompliziert über die Datenbank zu lösen.
wenn du nach dem schreiben der daten in deine datenbank einfach folgendes ausführst:
<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].'?insert=done');
exit;
?>
wirst du automatisch auf das angegebene script weitergeleitet - dort kannst du dann deine "juhu, der insert hat geklappt"-meldung ausgeben.. und egal wie oft der user auf "zurück" oder "aktualisieren" drückt.. das formular wird nicht noch mal abgesendet...
weiterhin schönen abend...
Vielen Dank für den Hinweis! Ich wusste doch, dass sich eine Funktion dafür finden lassen müsste ;-)