Tom: Bei neu laden kein neuer Eintrag

Beitrag lesen

Hello,

Wenn sich jemand registrieren will und die Seite, auf der die Query gesendet wird neu lädt, werden ja zwei Querys gesendet.
Wie kann ich das verhindern?

Dass Requests mehrfach ausgelöst werden, kann man nur schwer verhindern.
Man kann aber verhindern, dass ein "Multipost" zu einem mehrfachen Query führt, bzw. dass dieses Query mehrfach zu einem Insert führt.

1. Kombination aus Nachname, Vorname und eMail ist eindeutig (setzen wir jetzt mal voraus).
   Du kannst also bei Deiner Datenbank einen Unique Index über diese drei Felder
  (nicht auf jedes einzeln!) setzen. Dann ist kein Mehrfacheintrag mehr möglich.

2. Du kannst mit Sessions arbeiten.
   Im ersten Formular baust Du einen POST-Button, dessen Script das Eintragungsformular
   erzeugt. Das "Button-Script" legt unter der aktuellen Zeit einen Schlüssel in der
   Session ab. Dieser Schlüssel wird dem Eintragungsscript als Hidden-Field mitgesendet.
   Wenn nun der Post aus dem Formular kommt, wird im Array der Schlüssel nach dem Schlüssel
   gesucht. Er muss enthalten sein und seine Zeit darf noch nicht zu alt sein.
   Beim Suchdurchlauf kann man auch gleichzeitig zu alte Schlüssel entfernen...
   Wenn der Schlüssel enthalten war, wird er entfernt und der Eintrag wird vorgenommen.
   War der Schlüssel nicht enthalten oder zu alt, wird eine Fehlermeldung ausgegeben ...

So schützt Du Dich im übrigen auch gegen automatische Spammer. Ein Spambot hat i.d.R. nur an Formularen mit Inputfeldern udn Textareas Interesse. Das Form mit dem Button nützt ihm nichts, also verwirft er es. Das Formular mit den Eingabefeldern nützt ihm aber ohne aktuellen Key _und_ dazu passende Session nichts. Er kann es zwar benutzen, aber Du erkennst sofort, dass hier nichts zu tun ist -  außer "Rote Lampe anknipsen" ...

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau