Erneutes senden der Formular-Informationen verhindern
Fonk
- javascript
Hallo,
im Internet werden zwar viele Lösungen dazu angeboten, aber keine die speziell auf mein Problem passt:
Ich habe ein Login-Frame und ein Main-Frame das bei jedem Login, bzw. Logout neu geladen wird um die Informationen an den jeweiligen User anzupassen.
Nun sehen diverse Seiten, die im Mainframe angezeigt werden so aus, dass beim ersten Aufruf ein Formular angezeigt wird, wo man (wenn man nicht eingeloggt ist) Name etc. eintragen kann oder es halt automatisch eingefügt wird, wenn man eingeloggt ist. Nach absenden des Forms werden die eingetragenen daten an die selbe Seite gesendet und geprüft ob das (erforderliche) Namensfeld ausgefüllt wurde. Falls dem so ist werden die Informationen weiterverarbeitet, irgendwo eingepflegt, etc. und eine Information wie z.B. Die Daten wurden versendet angezeigt (realisiert über php).
Der o.g. reload der Seite beim Einloggen hat nun den Sinn, dass wenn man die Seite aufruft und sich dann erst einloggt die Felder trozdem automatisch ausgefüllt werden, bzw. wenn das Formular angezeigt wird und man sich ausloggt die Felder halt auch gelöscht werden.
Falls nun allerdings der Sonderfall eintritt, dass man das Formular abgesendet hat und sich dann nochmal ein- bzw. ausloggt und die Seite neu geladen wird zeigt der Internet Explorer die äußerst nervige Meldung an, dass die Informationen erneut gesendet werden müssen um die Seite zu aktualisieren - wobei die Informationen einfach nicht nochmal gesendet werden (weil ich u.a. dann Mails doppelt bekomme usw...)
Ich habe schon mit dem $_ENV('HTTP_REFERER') von PHP rumprobiert, der scheint aber nur zu gehen, wenn eine Seite vom Link aufgerufen wird. Eine Lösung mit <body onReload=> bringt mich auch nicht weiter, weil dann die Seite nicht neu geladen würde, wenn das Formular angezeigt wird...
Wer bis hierhin gelesen hat: Besten Dank! Und hoffentlich weiß jemand eine Lösung...
Hi,
Das erneute Senden wirst Du nicht verhindern können.
Verhindere serverseitig das erneute Auswerten (z.B. per eindeutiger Id als hidden-Feld im Formular...).
cu,
Andreas
Kannst du mir bitte eine genauere Anelitung geben.
Man doch auch den Button nach dem Anklicken verschwinden lassen oder?
Hi,
Kannst du mir bitte eine genauere Anelitung geben.
z.B.:
aus timestamp + ip + Zufallszahl + ... eine eindeutige Id generieren - der Aufbau sollte nicht so einfach erkennbar sein (s.u.)
Diese z.B. in einer Datenbank samt Zeitpunkt der Speicherung ablegen.
Außerdem die id in ein hidden-Feld des Formulars reinschreiben.
Wenn die Formulardaten wieder ankommen, prüfen, ob die id in der Datenbank vorhanden ist.
Falls ja: id aus Datenbank löschen, Formulardaten auswerten.
Falls nein: Fehlermeldung ausgeben, daß Formular schon mal ausgewertet wurde.
Gelegentlich noch die ids aus der Datenbank löschen, die ein gewisses (von Dir festzulegendes) Alter (z.B. 1 Tag) überschritten haben...
Man doch auch den Button nach dem Anklicken verschwinden lassen oder?
Das funktioniert nur, wenn Javascript aktiviert ist.
Es verhindert auch nicht, daß z.B. auf der folgenden Seite ein Refresh ausgeführt wird usw.
Obige Methode verhindert z.B. auch, daß irgendein Script Kiddie Schaden anrichten kann (außer dem Traffic/Serverauslastung), indem es denselben Request zigmal schickt - ausgewertet wird nur einmal.
Den Button wegzunehmen mag zwar einige Doppel-Absendungen verhindern, aber längst nicht alle.
Das Problem ist ein serverseitiges (Mehrfachauswertung von Formulardaten), sollte also auch serverseitig gelöst werden.
cu,
Andreas
Man doch auch den Button nach dem Anklicken verschwinden lassen oder?
Grundsätzlich habe ich kein Button den ich verschwinden lassen könnte... und der Login-Button sollte fairerweise bleiben, da er nebenbei noch recht funktional ist! ;-)
Wenn die Formulardaten wieder ankommen, prüfen, ob die id in der Datenbank vorhanden ist.
Falls ja: id aus Datenbank löschen, Formulardaten auswerten.
Falls nein: Fehlermeldung ausgeben, daß Formular schon mal ausgewertet wurde.
Mein Problem ist weniger, dass die Formulardaten doppelt ankommen (teilw. wird nämlich nur irgendein ausgegebener Text angepasst - da ist das ziehmlich egal...), sondern vielmehr das Fenster "erneutes senden der blabla", was sich aus dem reload beim login/logout ergibt! Hintergrund der Sache ist, dass diverse DAU's mit der Page arbeiten müssen, die direkt anrufen, wenn irgendwas unerwartetes auftritt...