Sven Rautenberg: Mail-Formular nur einmal absenden

Beitrag lesen

Moin!

habe ein Mailformular auf meiner Seite, um die Seite zu empfehlen.

Nach Absenden der Mail erscheint das Formular wieder mit geleertem Mail-Feld, damit man weitere Freunde anschreiben kann.

Nun ist es bei Opera so, dass beim Aktualisieren der Seite (Schaltfläche) die E-Mail erneut verschickt wird. Wie kann ich das verhindern? Ich möchte die Mails nicht speichern und abgleichen.

Das ist nicht nur bei Opera so, sondern in jedem Browser.

Wenn nach dem Absenden des Formulars, welches die Methode POST nutzt, sofort wieder die gleiche (oder meinetwegen auch eine andere) Seite angezeigt wird, und man im Browser "Reload" ausführt, bedeutet das: Wiederhole den eben gemachten Request.

Und das bedeutet: Führe den POST-Request nochmal aus. Die Browser fragen bei POST in der Regel nochmal nach, ob der User das wirklich will - die Frage kann man aber auch abschalten.

Die Lösung ist eigentlich relativ einfach, und weil sie eigentlich überall angewandt wird, hat sie sogar einen eigenen Namen bekommen: "Post-Redirect-Get" - und das erklärt auch genau, was man tun muss: Das Ergebnis des POST-Requests darf keine neue, fertige Seite sein, sondern ist ein Redirect-Request, meinetwegen auch auf dieselbe URL, aber mit GET ausgeführt. Einen GET-Request darf man beliebig häufig wiederholen - er soll dabei nichts relevantes verändern (wenn man es trotzdem so programmiert, ist man selbst Schuld), insbesondere auch keine Mails versenden.

- Sven Rautenberg