gechger
Goto Top

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

Content-Key: 126238

Url: https://administrator.de/contentid/126238

Printed on: April 24, 2024 at 22:04 o'clock

Member: vonbredowp
vonbredowp Oct 01, 2009 at 12:47:27 (UTC)
Goto Top
Hallo Christof!

Auf die Schnelle:


Gib dem Benutzer / Besucher eine Session ID und gib ihm eine extra Var. , im Sinne von "hat_eingetragen" = true
Member: filippg
filippg Oct 01, 2009 at 12:53:17 (UTC)
Goto Top
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
Member: gechger
gechger Oct 01, 2009 at 13:07:32 (UTC)
Goto Top
Grüß Dich,

eine ähnliche Idee hatte ich auch schon. Beim Aufrufen des Formulares wollte ich ein VAriable setzen:
$send="0";
Beim Versenden des Formulares sollte $send="1", drin stehen.

Der User hat nun aber die Möglichkeit, ohne das Formular zu verlassen, mehrere Datensätze hintereinander einzugeben. $send steht dann aber auf "1" und das Senden eines weiteren Datensatzes würde verhindert.
Er müßte dann immer das Formular verlassen und neu laden.

Unschön.

Ich denke, die Idee mit dem Leeren des Cache ist geschickter.

Aber schönen Dank für die Idee
Member: vonbredowp
vonbredowp Oct 01, 2009 at 13:15:39 (UTC)
Goto Top
eine ähnliche Idee hatte ich auch schon. Beim Aufrufen des
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 ;)
Member: gechger
gechger Oct 01, 2009 at 13:26:42 (UTC)
Goto Top
Hallo Fillip,

das scheint die Idee zu sein, die ich gesucht habe.
Eine weitere Spalte in der Datenbank tut ja nicht weh. Datum und Zufallswert sollte genügen.

Vielen Dank

Schöne Grüße
Christof
Member: Guenni
Guenni Oct 01, 2009 at 15:20:24 (UTC)
Goto Top
Hi Christof,

ich rufe in einem solchen Fall die Funktion header auf, nachdem

der DB-Eintrag erfolgt ist:

Das Skript wird neu geladen und die POST-Daten sind nicht mehr da.

<?php

if(isset($_POST['Name_des_Submitbuttons'])){  
 . . .

 ToDo

 . . .

 header("location:Name_des_Skript");  
}
?>

Gruß
Günni