[PHP/mySQL] Durch F5 werden die Daten immer wieder in die Datenbank eingetragen!!

bigtail

kennt sich schon aus
Durch F5 werden die Daten immer wieder in die Datenbank eingetragen!!

Hi,

ich habe gerade was komisches entdeckt.

Ich habe zwei PHP-Dateien geschrieben. form.php und insert.php.

"form.php" ist ein Formular, das einige Werte an "insert.php" übergibt.
"insert.php" stellt eine Verbindung zur Datenbank her und schreibt diese Werte in die Datenbank rein.

Soweit, so gut.

Nun habe ich festgestellt, dass auch wenn ich "insert.php" direkt ausführe, leere Einträge in die Datenbank eingetragen werden.

Oder wenn ich mit dem Formular Werte an "insert.php" übergebe und "insert.php" diese dann in die Datenbank reinschreibt,und jedesmal wenn ich den Browser aktualisiere (F5) die Daten erneut in die Datenbank eingetragen werden.

Ist das normal?


Wie kann ich das unterbinden?

Gruß
 
Kein check auf leere Felder bzw. falsche Übergabe.
Wie auch immer, Code posten wäre hilfreich.
 
Zum ersten Problem - siehe Sokos Antwort. Nie Werte ungetestet in die DB schreiben.

Problem 2: Das ist normal, da beim Reload auch Post-Variablen übergeben werden. Es gibt mehrere Möglichkeiten um das zu unterbinden. z.B. Cookie, Session, IP oder serialisierte Formularerkennung.
 
@Pennywise,
Mein Problem hat mit "check auf leere Felder bzw. falsche Übergabe" nichts zu tun, ich wollte ja wissen, wie man das erneuten Eintragen in die DB verhindert wenn man die Seite reloadet. Beim Relaod werden ja die POST auch wieder gesendet.

Das ist normal, da beim Reload auch Post-Variablen übergeben werden. Es gibt mehrere Möglichkeiten um das zu unterbinden. z.B. Cookie, Session, IP oder serialisierte Formularerkennung.
Genau nach so einer Lösung suche ich.
Kannst du hier bitte ein kleines Beispiel posten, oder kennst du vielleicht irgend ein Tutorial?
 
Ich wende hin und wieder in diesem Fall einen einfachen Trick an, ich lasse nach dem schreiben in die Datenbank die Seite per header neu laden, damit wären dann alle Post-Variablen gelöscht.

header("location:side.php");
 
Ne andere Möglichkeit wäre im Formular ein verstecktes Eingabefeld mach z.B. mit dem Namen "eingetragen". Dessen Wert setzt du im Formular auf 0. Wenn das Formular jetzt an die Datei insert.php weitergegeben wird, prüfst du ob der wert 0 ist. Wenn er der Wert 0 ist dann prüfst du die Werte und trägst die in die DB ein. Dann setzt du den Wert auf 1. wenn man jetzt einen reload macht, dann wird der werd 1 übertragen, und schon nicht mehr eingetragen.
 
Oben