Doppelte Einträge verhindern
Heizer
- datenbank
0 Stephan Huber0 Heizer
Liebes Forum
Ich schreibe (wiedereinmal) ein Gästebuch mit PHP und MySQL, und als freund der Handarbeit und selbstgemachten Erfahrung greife ich nicht auf vorhandene Lösungen zurück, sondern schreibe jedes semikolon selbst.
Nun bin ich am überlegen, wie ich an sinnvollsten doppelte einträge vverhindern kann (ervorgerufen z.B. durch einen klick auf den "zurück" Button, dann wird ja das formular erneut abgeschickt).
Meine Ideen waren:
Den Eintrag mithilfe einer Session beim Besucher zu speichern und bei einem Gästebucheintrag abzufragen, ob dieser Eintrag schon getätigt wurde (Nachteil: Eigentlich brauche ich keine Session und möchte die besucher nicht unnötig mit Cookies belasten)
Ich öffne nach dem Eintragen ein neues Fenster und schließe das alte, dadurch ist die Information bei Besucher nicht mehr vorhanden (Nachteil: Zumindest das schließen benötigt Javascript und ist damit eigentlich indiskutabel für eine Sicherheitsfunktion, auch das öffnen kann unterdrückt werden)
Ich speichere einen md5 mit dem Eintrag zusammen, der aus allen Angaben außer Ordnungszahl und Zeitpunkt besteht, und lasse keine Einträge mit gleichem md5-wert zu (Nachteil: einfache geschichten wie "ich grüße euch" könnte jeder nur einmal während der Existenz des Gästebuchs schreiben, evtl. könnte ich diesen Nachteil aber ausgleichen, in dem ich den md5 nur für Einträge überprüfe, die nicht älter als einen Tag sind... o.ä.)
Jetzt wüßte ich gerne, was ihr denkt, wie es am sinnvollsten zu lösen ist. Wie macht es denn dieses Forum (denn das es diese Funktion gibt ist mir schon aufgefallen)?
Für alle anregungen dankbar
euer Heizer
p.s.: Witzigerweise hat offensichtlich gerade jetzt die Software dieses Forums einen kleinen Bug, ich konnte das Posting nicht posten, da behauptet wurde, ich hätte es bereits gepostet...
Hi Heizer,
- Ich speichere einen md5 mit dem Eintrag zusammen, der aus allen Angaben außer Ordnungszahl und Zeitpunkt besteht, und lasse keine Einträge mit gleichem md5-wert zu (Nachteil: einfache geschichten wie "ich grüße euch" könnte jeder nur einmal während der Existenz des Gästebuchs schreiben, evtl. könnte ich diesen Nachteil aber ausgleichen, in dem ich den md5 nur für Einträge überprüfe, die nicht älter als einen Tag sind... o.ä.)
Wie wäre es stattdessen, in das Eintragsformular ein hidden field mit
einer hinreichend zufälligen id zu schreiben (z.B. md5 (uniqid (rand())); ), und dann keine Einträge mit gleicher id innerhalb von 24h zuzulassen? Ich denke das ist am einfachsten. (Wenn ich mir den Quelltext dieses Formulars so anschaue, scheint mir das hier auch ähnlich zu funktionieren.)
Viele Grüße
Stephan
Hi Heizer,
- Ich speichere einen md5 mit dem Eintrag zusammen, der aus allen Angaben außer Ordnungszahl und Zeitpunkt besteht, und lasse keine Einträge mit gleichem md5-wert zu
Wie wäre es stattdessen, in das Eintragsformular ein hidden field mit
einer hinreichend zufälligen id zu schreiben (z.B. md5 (uniqid (rand())); ), und dann keine Einträge mit gleicher id innerhalb von 24h zuzulassen? Ich denke das ist am einfachsten.
Und wo speicherst du dann diese Zufallswerte?
Danke einstweilen
Heizer
Hi Heizer
Und wo speicherst du dann diese Zufallswerte?
In der Datenbank, wo den sonst ;-). Wenn Dich die IDs in der Tabelle mit den Guestbookeinträgen aus ästhetischen oder sonstigen Gründen stören, kannst Du ja auch in MySQL eine HEAP-Tabelle machen, und dort nur die id der letzten 24 Stunden mit Timestamp speichern.
Viele Grüße
Stephan