Moin!
Prüfe also vor einem Insert, ob er bereits durchgeführt wurde. Ob Du das über einen Select machst (eher suboptimal, wenn auch möglich), oder ob Du eine entsprechende Information in Session-Variablen oder sonstwo ablegst, ist eine Frage Deiner Optimierung.
Mit Session wäre das schon besser, aber dann müßte ich mir ja ein neues System zulegen, mit dem ich alle aktionen die nicht wiederholt ausgeführt werden dürfen definitiv erkennen kann, damit ich in einer Sessionvariable speichern kann $action_xyz=ausgefuehrt oder sowas. Hat jemand einen Tip wie man sowas vernünftig macht? Bis jetzt über gebe ich immer die Variable $action mit entsprechenden Befehlen, die im Script abgefragt werden. Ich bräuchte aber für jede Mögliche Aktion eine extra Variable, oder?
Meine Idee dazu wäre: Gib dem Formular noch ein hidden-Feld mit einem Formularschlüssel mit. In einer separaten Tabelle der Datenbank führst du parallel Buch, welche Formularschlüssel ausgeliefert wurden, und welche zurückkamen. Beispielsweise könntest du die aktuelle Zeit in einem Format deiner Wahl MD5-verschlüsseln, damit eine möglichst seltsame und eindeutige Zeichenkombination rauskommt - und falls zufällig zwei parallele Benutzer zum sekundengenau gleichen Zeitpunkt das Formular erstmals laden, bau noch die IP-Adresse, den Referrer und den User-Agent-String mit ein - irgendwas eindeutiges halt. Die Session-ID würde sich auch sehr gut eignen.
Wenn das Formular abgeschickt wieder beim Server landet, kannst du anhand des Formularschlüssels erkennen, ob das Formular ausgeliefert wurde (dann ist der Schlüssel eingetragen worden), und ob das Formular vormals schon zurückgeschickt wurde (dann ist der Schlüssel als verbraucht gekennzeichnet).
Wenn die Formularschlüsseltabelle nicht unendlich anwachsen soll, packst du noch einen TIMESTAMP als Information hinzu und löschst beispielsweise alle Schlüssel, die älter als einen Tag sind. Wer nach Ablauf eines Tages immer noch den Browser offen hat, der ist sowieso nicht zu retten - und du erkennst im Zweifel, daß der Browserschlüssel garnicht ausgegeben wurde und bist immer noch auf der sicheren Seite.
- Sven Rautenberg