Eingabeformular nach Senden in MYSQL Datenbank sendet beim Drücken des Browser Aktualisierungsbutton den Datensatz nochmal
Datensätze aus einem Eingabeformular werden erneut in eine Datenbank geschrieben, wenn das Formular nicht geschlossen wird und im Browser der Aktualisierungsbutton gedrückt wird. Wie verhindere ich das?
Hallo Forum,
wie im Vorwort bereits beschrieben, will ich verhindern, daß nach Absenden eines Datensatzes in die MySQL Datenbank der Datensatz mehrfach gespeichert wird, falls jemand den Aktualisierungsbutton drückt.
Versuche, die benutzen Variablen am Ende mit unset zu löschen, brachten kein Ergebnis. Der Browser scheint sich die Eingaben irgendwie zu merken.
Gibt es einen php Befehl zum Löschen des Caches oder eine andere sichere Methode, um dies zu verhindern?
Vielen Dank für jede Idee
Schöne Grüße
Christof
Hallo Forum,
wie im Vorwort bereits beschrieben, will ich verhindern, daß nach Absenden eines Datensatzes in die MySQL Datenbank der Datensatz mehrfach gespeichert wird, falls jemand den Aktualisierungsbutton drückt.
Versuche, die benutzen Variablen am Ende mit unset zu löschen, brachten kein Ergebnis. Der Browser scheint sich die Eingaben irgendwie zu merken.
Gibt es einen php Befehl zum Löschen des Caches oder eine andere sichere Methode, um dies zu verhindern?
Vielen Dank für jede Idee
Schöne Grüße
Christof
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 126238
Url: https://administrator.de/contentid/126238
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo,
wenn der Nutzer "Aktualisieren" drückt werden die letzten Formulardaten nochmal gesendet - daher wird ein "unset" in PHP auch nicht helfen. Eine Methode, dem Browser das "nochmal senden" zu verbieten gibt es auch nicht direkt.
Eine Möglichkeit: du baust in das Formular ein verstecktes Feld ein (etwa "PostID"), das als Wert einen Identifier hat (etwa Datum+Uhrzeit+Zufallszahl). Wenn ein Datensatz gespeichert wird, wird dieser Wert mit in die DB geschrieben. Und vor jedem Speicher eines Datensatzes prüfst du, ob die PostID schon in der DB vorhanden ist. Wenn ja wird das speichern verweigert. Alternativ zur Speicherung in der DB kann man das auch über die PHP Session-Verwaltung lösen. Der Ansatz bleibt aber letztlich immer der gleiche: Du musst dafür sorgen, dass dieses Formular eindeutig identifizierbar ist und dann serverseitig schauen, ob es schon verarbeitet wurde.
Gruß
Filipp
wenn der Nutzer "Aktualisieren" drückt werden die letzten Formulardaten nochmal gesendet - daher wird ein "unset" in PHP auch nicht helfen. Eine Methode, dem Browser das "nochmal senden" zu verbieten gibt es auch nicht direkt.
Eine Möglichkeit: du baust in das Formular ein verstecktes Feld ein (etwa "PostID"), das als Wert einen Identifier hat (etwa Datum+Uhrzeit+Zufallszahl). Wenn ein Datensatz gespeichert wird, wird dieser Wert mit in die DB geschrieben. Und vor jedem Speicher eines Datensatzes prüfst du, ob die PostID schon in der DB vorhanden ist. Wenn ja wird das speichern verweigert. Alternativ zur Speicherung in der DB kann man das auch über die PHP Session-Verwaltung lösen. Der Ansatz bleibt aber letztlich immer der gleiche: Du musst dafür sorgen, dass dieses Formular eindeutig identifizierbar ist und dann serverseitig schauen, ob es schon verarbeitet wurde.
Gruß
Filipp
eine ähnliche Idee hatte ich auch schon. Beim Aufrufen des
Formulares wollte ich ein VAriable setzen:
Formulares wollte ich ein VAriable setzen:
Nein, ich denke da verstehst du etwas falsch ;)
Das Session Management wird vom Server übernommen.
Schau dir kurz die drei Seiten dazu an:
http://tut.php-q.net/de/sessions.html
http://de3.php.net/manual/en/features.sessions.php
http://www.selfphp.de/praxisbuch/praxisbuch.php?group=35
Du kannst natürlich auch die IP als "Identifier" nehmen.
Bedeutet, dein Skript überprüft ob die IP schon was eingetragen hat oder nicht ;)