Mehrfaches Absenden von Formularen in manchen Fällen zulassen

supachecka

Mitglied
Hallo,

ich habe mal ein etwas anderes Problem. Ich bastel gerade ein Feedbackformular und will natürlich verhindern, dass Posts doppelt versendet werden. Das habe ich auch hinbekommen wie hier beschrieben:
http://www.selfphp.de/kochbuch/kochbuch.php?code=21

Nun mein Problem: Der User kann das Formular nur einmal absenden, auch wenn er es nachträglich mit anderen Daten füllt um zb etwas zu ergänzen...

Zusammengefasst:
Doppel versenden mit Submit-Button -> ja
Doppel versenden, durch Seitenaktualisierung oder durch Zurückbutton -> nein

Ich hoffe mein Problem ist verständlich und ihr könnt mir ob und wie das geht?
 
Zuletzt bearbeitet:
Du könntest du checkID aus den eingegebenen Daten und der IP-Adresse des Benutzers erstellen lassen anstatt aus der Zeit.

$checkid = md5($_POST['vorname'] . $_POST['name'] . $_SERVER['REMOTE_ADDR']);

Dann musst du die auch nicht mehr im Formular übergeben, sondern immer vor dem Suchen der ckeckID in der Datenbank erstellen.
 
Das kommt darauf an, welche Daten du in die Berechnung der Prüfsumme einfließen lässt. Wenn du den Wert nur aus Name und IP berechnen lässt, dann wird nur ein Eintrag pro Name und IP erlaubt, daher solltest du vielleicht noch den Inhalt und die Kategorie dazunehmen.

Zusätzlich sollte man noch erwähnen, dass eine sehr geringe Chance besteht, dass ein berechtigter Eintrag blockiert wird. Ein md5-Hash auch "nur" 128 Bit lang, es gibt also immerhin 2^128 verschiedene Werte. Auf 128 Bit kommt man allerdings auch schon mit der IP Adresse (32 Bit) und 16 lesbaren Zeichen (ca. 6 Bit), es gibt also sicher wesentlich mehr verschiedene Einträge, als md5-Hashs. Du könntest die Chance auf einen solchen Zufall noch weiter minimieren, wenn du die gespeicherten Prüfsummen einige Tage nach dem Eintragen wieder löschst.
 
Würde also bedeuten,wenn ich einen Teil der Nachricht und den Namen mit in die CheckID einbeziehe, kann ich mir ziemlich sicher sein, dass der Eintrag nicht doppelt erfolg.

Gut danke ich denke das hab ich verstanden...
 
Einfachste Möglichkeit dieses "Risiko" zu minimieren, wäre einfach [phpf]sha1[/phpf] einzusetzen.
40-Byte Hash (bzw. 160bit).
 
Vielleicht fehlt mir doch noch ein bisschen das Verständnis für die Sache. Also eigentlich dachte ich dass aus einem Wert immer der selbe Hashwert ermittelt wird, soweit doch richtig oder?
Deswegen versteh ich nicht warum das das "Risiko" minimiert, dass ein Formular mit den selben Daten vom selben User doppelt abgeschickt wird und in die Datenbank eingetragen wird.

Meiner Meinung nach geht es doch nur um den Inhalt der Felder, oder lieg ich da falsch. Kann mir das wer erklären? Bin noch mehr verwirrt als vorher...
 
Es gibt sogenannte Kollisionen bei Prüfsummen.

Sprich zwei unterschiedliche Werte können die selbe Prüfsumme ergeben.
Es ist selten, aber es kann passieren. Deshalb sollte man (meiner Meinung nach grundsätzlich) eher sha1 als md5 nutzen.
 
Zurück