Erneutes senden des Forumlars unterbinden
Johannes Bauer
- php
Hi Leute,
also, folgendes Problem: Ich habe mich an einem Gästebuch in PHP/MYSQL versucht, was eigentlich auch wunderbar funktioniert.
Jedoch gibt es ein Problem: Nach einem erfolgreichen Eintrag gibt das GB eine Bestätigung aus. Wenn ich auf dieser Seite nun im Browser auf "Zurück" klicke erscheint die vorherige Formularseite. Dort kann ich dann auf "Eintragen" klicken und der Eintrag wird erneut vorgenommen.
Wie kann ich das unterbinden (also die Möglichkeit, beim Klick auf "Zurück die Daten nochmal abzuschicken)?
AUf eine Javascript-Lösung möchte ich verzichten...
Dankeschön..
MfG Johannes
Hi Leute,
also, folgendes Problem: Ich habe mich an einem Gästebuch in PHP/MYSQL versucht, was eigentlich auch wunderbar funktioniert.
Jedoch gibt es ein Problem: Nach einem erfolgreichen Eintrag gibt das GB eine Bestätigung aus. Wenn ich auf dieser Seite nun im Browser auf "Zurück" klicke erscheint die vorherige Formularseite. Dort kann ich dann auf "Eintragen" klicken und der Eintrag wird erneut vorgenommen.Wie kann ich das unterbinden (also die Möglichkeit, beim Klick auf "Zurück die Daten nochmal abzuschicken)?
AUf eine Javascript-Lösung möchte ich verzichten...
Dann vergiss es
Dankeschön..
MfG Johannes
Hallo Johannes,
Jedoch gibt es ein Problem: Nach einem erfolgreichen Eintrag gibt das GB eine Bestätigung aus. Wenn ich auf dieser Seite nun im Browser auf "Zurück" klicke erscheint die vorherige Formularseite. Dort kann ich dann auf "Eintragen" klicken und der Eintrag wird erneut vorgenommen.
Dann leite auf die Bestätigungsseite mit
header("Location: bestaetigungsseite.php"); //[1]
weiter, dann kommt man nicht mehr auf die Seite die das in die Datenbank einträgt zurück. Du könntest natürlich auch prüfen, ob der Eintrag schon vorhanden ist, und wenn ja, Bestätigungsseite nochmal ausgeben, und wenn nicht eben eintragen.
AUf eine Javascript-Lösung möchte ich verzichten...
würde ich auch :-)
Grüße aus Nürnberg
Tobias
Hallo Tobias, Hallo Johannes,
header("Location: bestaetigungsseite.php"); //[1]
Das ist laut RFC2616, im Volksmund 'HTTP-Spezifikation', nicht möglich. Ein Location-Header muss _immer_ eine Absolute URI enthalten, also z.B. http://irgendeinserver.tld/irgendeinpfad/bestaetigungsseite.html.
weiter, dann kommt man nicht mehr auf die Seite die das in die Datenbank einträgt zurück. Du könntest natürlich auch prüfen, ob der Eintrag schon vorhanden ist, und wenn ja, Bestätigungsseite nochmal ausgeben, und wenn nicht eben eintragen.
Bedenke, dass 2x Abschicken nicht ausschließlich durch Reload entstehen kann - jemand kann auch 2x auf den Knopf drücken.
Vergib doch pro Formular eine zufällige, eindeutige ID und merk Dir diese dann für einen gewissen Zeitraum (ein paar Tage dürfte reichen) Wenn diese ID schon aufgetaucht ist, dann wird einfach nochmal die Bestätigungsseite ausgegeben.
AUf eine Javascript-Lösung möchte ich verzichten...
würde ich auch :-)
dito. :-)
Grüße,
Christian
Hi,
Dann leite auf die Bestätigungsseite mit
header("Location: bestaetigungsseite.php"); //[1]
weiter, dann kommt man nicht mehr auf die Seite die das in die Datenbank einträgt zurück.
(abgesehen von der relativen URL, die nicht zugelassen ist):
Wirklich?
Man kann ja problemlos mehrere Seiten zurückspringen (z.B. im Mozilla auf den kleinen Pfeil-nach-unten rechts unterhalb des "Back"-Buttons im Toolbar)
M.E. ist es sinnvoller, zu überprüfen, ob die Daten bereits eingetragen wurden bzw. noch eingetragen werden dürfen.
Z.B. in dem man im Formular in einem Hidden-Feld eine eindeutige id hinterlegt und diese mit in der Datenbank speichert. Wenn dann nochmal die selbe id kommt, ignoriert man die Daten bzw. gibt ne Fehlermeldung aus.
Steigerung: die id wird schon beim Erzeugen in einer speziellen Tabelle in der DB abgelegt. Wenn dann die Formulardaten ankommen, werden sie nur akzeptiert, wenn eine id aus dieser Tabelle mitkommt.
cu,
Andreas
ich mach so eine überprüfung immer mit einem token. darum hab ich mir für sowas auch eine klasse geschrieben. kannst du auf meiner homepage downloaden: http://www.flaimo.com/php_scripts.php
Hi,
ich mach so eine überprüfung immer mit einem token.
Ob man es wie Du token oder wie ich id nennt, ist doch egal...
Ok, Du speicherst das in der Session, ich würd es im Normalfall in der DB machen, ist aber vom Effekt her fast egal: Deine Methode benötigt ne session, meine nicht.
cu,
Andreas