iPhone/Safari schickt HTML-Formular immer wieder neu ab, wie in PHP verhindern (auch für andere Browser)?

  • PHP

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    iPhone/Safari schickt HTML-Formular immer wieder neu ab, wie in PHP verhindern (auch für andere Browser)?

    Ich habe eine HTML-Datei mit einem Formular gebaut. Dieses Formular sendet die in Inputfelder eingegebenen Daten via POST an ein PHP-Skript (bzw. die HTML-Datei ist das PHP-Skript, oben PHP, darunter HTML) und das sendet eine E-Mail.

    Nach dem Absenden ersetze ich im Formular einen Platzhalter und zeige dem User an, dass die Datenübermittlung erfolgreich war (oder dass ein Fehler auftrat).

    Nun befindet sich die PHP-Seite natürlich noch im POST-Zustand, d. h. ein Aktualisieren der Seite würde das Formular erneut absenden. In mir bekannten Browsern wird man davor aber gewarnt. Nur scheinbar beim iPhone in Safari nicht. Anscheinend gibt es bei der von mir entwickelten Seite einen Besucher/Nutzer, der die Ergebnisseite des Formulars im Browser offen hat und alle paar Stunden eine erneute Mail sendet. Vielleicht bei jedem erneuten Öffnen der App.

    Meine Fragen lauten:
    a) Eher aus Interesse: Warum macht (nur) Safari das?
    b) Viel wichtiger: Wie verhindere ich das optimalerweise?

    Bzgl. b): Ich würde normalerweise einfach eine Weiterleitung mit dem PHP-Befehl header machen und mittels eines GET-Parameters der Seite mitteilen, dass die Erfolgsmeldung angezeigt werden soll. Etwa so: header("Location: /form.php?success=true");. Was ich daran aber unschön finde: Ruft man diese Seite mit dem Parameter manuell auf, so erhält man auch die Erfolgsmeldung. Ist nicht schlimm, aber eben nicht perfekt.

    Daher die Frage, wie man das optimalerweise macht, also wie man verhindern kann, dass ein Formular doppelt bzw. erneut abgesendet wird, wenn man die Seite neu lädt. Oder ist das mit dem Location das einzig Mögliche?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich würde nach dem Absenden einene neue Seite anzeigen lassen mit "danke" oder was auch immer. Also eine Weiterleitung einbauen mit Location. Vermutlich gibt es damit generell weniger Probleme
    Danke euch beiden.

    @Runshak Scheint wirklich die einzig wahre Lösung zu sein (siehe auch weiter unten). Wobei es mMn egal ist, ob ich nun eine Extraseite oder meine PHP-Seite erneut aufrufe, hauptsache eine Weiterleitung.

    @xChRoNiKx Ich baue ungern Seiten, die zwingend JS erfordern. JS benutze ich nur zur Verbesserung der User Experience. Natürlich gibt es Ausnahmen, aber bei einem Kontaktformular nicht.

    Ich habe folgendes bei Wikipedia gefunden: de.wikipedia.org/wiki/Post/Redirect/Get
    Das beschreibt exakt mein Problem und die Lösung scheint so zu sein, wie ich es ursprünglich auch machen wollte, was ich aber nicht perfekt fand. Allerdings sende ich nun zusätzlich noch einen speziellen Statuscode, was der richtige Weg zu sein scheint: de.wikipedia.org/wiki/HTTP-Statuscode#code303

    Mein Code lautet (nachdem die Eingaben erfolgreich verarbeitet wurden):

    PHP-Quellcode

    1. http_response_code(303);
    2. header("Location: {$_SERVER['PHP_SELF']}?sent=true");

    In der PHP-Datei wird bei Empfang des GET-Parameters sent=true die Erfolgsmeldung angezeigt.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum