Internetexplorer Zurück-Button und Formulare

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Internetexplorer Zurück-Button und Formulare

    Nach mehrmaligem aufeinanderfolgendem Versenden eines Formulars liefert der IE nach Betätigen des Zurück-Buttons des Browsers den Fehler "Die Seite kann nicht angezeigt werden".

    Der folgende Code ist lediglich ein auf das Problem reduziertes Beispiel für die Umsetzung einer schrittweisen Auswahl eines Artikels über ein Formular.
    Verwendet wird PHP und Smarty.

    Template:
    <form method="post" action="formtest.php">
    <input type="text" name="test" value="{$smarty.post.test}">
    <input type="submit">
    </form>

    PHP:
    <?php
    require_once("Smarty.php");
    $smarty = new Smarty();
    $smarty->display("formtest.tpl");
    ?>

    Gebe ich, statt Smarty zu benutzen, den HTML-Code mit "echo" im PHP-Script aus tritt das Probelm nicht auf.

    z.B.:
    <?php
    echo "
    <form method=post action=formtest2.php>
    <input type=text name=test value=".$_POST['test'].">
    <input type=submit>
    </form>";
    ?>

    In anderen Browsern klappt alles auch mit Smarty prima.
    Kennt jemand die Ursache für dieses Verhalten und weiss Abhilfe?

  • #2
    Nach mehrmaligem aufeinanderfolgendem Versenden eines Formulars liefert der IE nach Betätigen des Zurück-Buttons des Browsers den Fehler "Die Seite kann nicht angezeigt werden".
    Das ist kein Fehler, sondern ein völlig normales Verhalten.
    Nimm GET oder baue um.
    Was willst Du genau machen?

    Kommentar


    • #3
      GET kommt nicht in Frage. Ich verwende mod_rewrite. Bei der Verwendung von GET würde die Formulardaten mit ?... an den URL angehängt werden. Das will ich auf jeden fall vermeiden.

      Es soll in einem Step by Step Assistenten ein Artikel ausgewählt werden. Dazu wird die Auswahl in jedem Schritt durch Formulareingaben eingegrenzt.

      Das Script selbst funktioniert auch - bis auf das beschriebene Problem im IE.

      Kommentar


      • #4
        Ich glaube, es gab irgendeine META-Angabe, die den IE von dem Verhalten abbringt. Bin mir aber nicht sicher und weiß nicht, wie die heißt...

        Die meisten Sites behelfen sich mit dem Hinweis "Bitte benutzen Sie nicht den Zurück-Button" und manuell implementierten Weiter- und Zurück-Links, die das Formular mit jeweils anderem Ziel submitten.

        Oder Du speicherst die Ergebnisse der Formulareingaben in einer Session statt als einen Haufen POST-Variablen.

        Kommentar


        • #5
          Die Daten werden, da der Assistent über mehrere Schritte läuft schon in einer Session gespeichert und von dort in das Formular eingefügt. Das ändert nichts am Problem .

          Ein funktionierender Zurück-Button ist bereits im HTML-Code implementiert .

          Da es sich um ein Auftragsprojekt handelt fallen den User
          einschränkende Hinweise aus ... . Auch Einschränkungen wie das Ausblenden der Browser-Symbolleiste werden vom Auftraggeber ausgeschlossen.

          Aber ich werde mal den Tip mit dem META-Tag googeln ...

          Kommentar


          • #6
            Ich habe eine (wenn auch nicht besonders zufriedenstellende) Lösung gefunden

            Die Antwort von xpatx im Thread 23264 hat mich drauf gebracht.
            Ich sende alle Formulare mit POST an ein Script, das die übergebenen Daten in einer Variablen in einer Session speichert. Dann leitet das Script mit header() an den HTTP_REFERER weiter.
            Sollen mehrere Formulare von einem Script verarbeitet werden ließe sich bei der Weiterleitung auch per GET ein Parameter zur Identifikation des vorher gesendeten Formulars übergeben.

            Die Folge:
            Der Zurück-Button des Browsers ist nach der Weiterleitung nicht aktiv und die Variablen aus POST stehen in der Session zur Verarbeitung zur Verfügung.

            Nebeneffekt:
            Auch das mehrfache Speichern von Formulardaten in der Datenbank kann so vermieden werden.

            Das könnte z.B. so aussehen ...

            formtest.php:
            <?php
            require_once("Smarty.php");
            $smarty = new Smarty();
            $smarty->display("formtest.tpl");
            ?>

            formtest.tpl:
            <form method="post" action="post.php">
            <input type="text" name="test" value="{$smarty.session.post.test}">
            <input type="submit">
            </form>

            post.php:
            <?php
            session_start();
            unset ($_SESSION['post']);
            $_SESSION['post'] = $_POST;
            header("Location: ".$_SERVER['HTTP_REFERER']);
            ?>

            Statt/außer dem Speichern der Variablen in einer Session könnte in der post.php ggf. auch die Prüfung der übergebenen Variablen und/oder deren Verarbeitung erfolgen.

            Kommentar


            • #7
              Re: Ich habe eine (wenn auch nicht besonders zufriedenstellende) Lösung gefunden

              Original geschrieben von MaKru
              Dann leitet das Script mit header() an den HTTP_REFERER weiter.
              Und was soll ein Client damit anfangen, wenn du ihm eine Redirect-Aufforderung beispielsweise zu "Field blocked by Outpost" sendest ...?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar

              Lädt...
              X