fabiana: Back-Button vom Browser ? und Javasript ?

  
<form name="expoaufruf" action="javahistory2.php" method="POST">  
    <input type="hidden" name="datsatz" value="81" />  
</form>  
<script type="text/javascript">document.expoaufruf.submit();</script>";  

Hallo,
ich habe eine Seite, auf der ich mit PHP verschiedene Sachen steuere. So auch einen Sprung auf eine andere Seite mit Übergabe von Variablen ohne Betätigung eines Buttons oder Links (s. Code). Das Problem: Die Chronik des Browsers erfasst diesen Seitenwechsel nicht, also der Back-Button von der Seite javahistory2.php ruft immer wieder javahistory2.php auf.
Gibt es da eine Möglichkeit, dies zu beheben, vielleicht mit javascript dem Browser einen Eintrag in der history zu verpassen?
Gruß
fabiana

  1. Mahlzeit,

    ich hab da mal ne Seite im Netz gefuden... wie hies die gleich noch? ...Self....Self....Achja ...Selfhtml.

    http://de.selfhtml.org/javascript/objekte/location.htm#replace

    Auch wenn etwas alt, ist diese Doku immer noch lesenswert ;)

    --
    42
    1. ja, aber ich hab jetzt nicht rauskriegen können, wie das (location.replace) hilft.
      Ich mach ja den Aufruf der anderen Seite mit einem Formular und submit, wegen der Werteübertragung, und nicht mit href.
      fabiana

      1. Mahlzeit,

        Ich mach ja den Aufruf der anderen Seite mit einem Formular und submit, wegen der Werteübertragung, und nicht mit href.

        Du überträgst genau einen Wert. Wieso muss das per POST passieren? Per GET kannst du replace nutzen.

        --
        42
        1. Du überträgst genau einen Wert. Wieso muss das per POST passieren? Per GET kannst du replace nutzen.

          Es sind leider 35 Werte. Habs im beispiel gekürzt.
          fabiana

          1. Mahlzeit,

            Es sind leider 35 Werte. Habs im beispiel gekürzt.

            und was soll das bringen? Wenn du die Werte schon hast, brauchst du sie nicht per Formular nochmal an den Server senden. Und wenn das, aus unerfindlichen Gründen, doch sein muss, mach das per Ajax im Hintergrund.

            --
            42
            1. und was soll das bringen? Wenn du die Werte schon hast, brauchst du sie nicht per Formular nochmal an den Server senden. Und wenn das, aus unerfindlichen Gründen, doch sein muss, mach das per Ajax im Hintergrund.

              hm, Ajax wäre jetzt was völlig neues für mich.

  2. Meine Herren!

    Das Problem: Die Chronik des Browsers erfasst diesen Seitenwechsel nicht, also der Back-Button

    Doch vermutlich schon, aber was passiert wohl, wenn du auf der Seite mit dem Formular landest? Du wirst direkt wieder weitergeleitet.

    Ich frage mich, wieso du überhaupt diese clientseitige Weiterleitung brauchst. Gehen wir dein Szenario mal schrittweise durch:

    1. Der Benutzer tippt http://example.com/formular.php in seine Adresszeile
    2. Du generierst mit PHP dieses Formular mit PHP und schreibst 81 in das Eingabefeld
    3. Der Benutzer bekommt kurz das Formular zu sehen, das schickt sich aber von selber wieder ab.
    4. Das javahistory2.php Skript wird aufgerufen und erhält irgendwo den Wert 81 im Post-Array.

    Wieso konnte Schritt 2 nicht direkt mit dem Wert 81 arbeiten?

    --
    “All right, then, I'll go to hell.”
    1. Ich frage mich, wieso du überhaupt diese clientseitige Weiterleitung brauchst. Gehen wir dein Szenario mal schrittweise durch:

      Also: Das Beispiel ist stark vereinfacht.
      Auf der Seite gibst ein Formular. In diesem werden php-Variable eingegeben. Das Formular ruft die gleiche Seite wieder auf (action="#"). Außer bei einem bestimmten (php-) Wert. Bei diesem wird bei einem zweiten Formular (action="javahistory2.php) über if_anweisung die Zeile <script type="text/javascript">document.expoaufruf.submit();</script> eingefügt. Damit gehts zur Seite javahistory2.php mit allen werten des Formulars. (Sonst hätte ich Formulare verschachteln müssen).
      fabiana

      1. Meine Herren!

        Ich frage mich, wieso du überhaupt diese clientseitige Weiterleitung brauchst. Gehen wir dein Szenario mal schrittweise durch:

        Also: Das Beispiel ist stark vereinfacht.

        Der Einfachheit halber lass uns die Nomenklatur beibehalten. Das Skript, das das Formular generiert und im Regelfall auch wieder auswertet nennen wir "formular.php". Das Skript, das den Ausnahmefall behandelt nennen wir "javahistory.php".

        Der Ausnahmefall soll scheinbar eine andere Ausgabe als das normale Formular erzeugen. Ob der Ausnahmefall eingetreten ist, weißt du bereits während der Ausführung von formular.php, denn da generierst du ja auch die JavaScript-Zeile, die für die Weiterleitung verantwortlich ist.

        Wenn dir aber bereits bekannt ist, dass der Ausnahmefall eingetreten ist, wieso machst du dann nich direkt eine serverseitige Fallunterscheidung und generierst von vornerein die Ausgabe, die javahistory.php erst nach der Weiterleitung generieren würde? Es liegen dir auch alle relevanten Daten vor, denn das Formular und die damit verbundenen POST-Parameter werden ja auch erst von formular.php erzeugt.

        --
        “All right, then, I'll go to hell.”
        1. Der Einfachheit halber lass uns die Nomenklatur beibehalten. Das Skript, das das Formular generiert und im Regelfall auch wieder auswertet nennen wir "formular.php". Das Skript, das den Ausnahmefall behandelt nennen wir "javahistory.php".

          Der Ausnahmefall soll scheinbar eine andere Ausgabe als das normale Formular erzeugen. Ob der Ausnahmefall eingetreten ist, weißt du bereits während der Ausführung von formular.php, denn da generierst du ja auch die JavaScript-Zeile, die für die Weiterleitung verantwortlich ist.

          Wenn dir aber bereits bekannt ist, dass der Ausnahmefall eingetreten ist, wieso machst du dann nich direkt eine serverseitige Fallunterscheidung und generierst von vornerein die Ausgabe, die javahistory.php erst nach der Weiterleitung generieren würde? Es liegen dir auch alle relevanten Daten vor, denn das Formular und die damit verbundenen POST-Parameter werden ja auch erst von formular.php erzeugt.

          Ich weiß nicht, ob ich dich jetzt richtig verstehe. Aber der Aufruf von javahistory.php soll sein. Das ist nicht nur eine Ausgabe, sondern mehr eine eigene Seite mit wiederum eigenen Verzweigungen.

        2. ja nun hab ichs durch Umbauen gelöst, so dass ich keine Weiterleitung und keine history mehr brauchte.
          danke.

      2. Hallo,

        Auf der Seite gibst ein Formular. In diesem werden php-Variable eingegeben. Das Formular ruft die gleiche Seite wieder auf (action="#"). Außer bei einem bestimmten (php-) Wert. Bei diesem wird bei einem zweiten Formular (action="javahistory2.php) über if_anweisung die Zeile <script type="text/javascript">document.expoaufruf.submit();</script> eingefügt. Damit gehts zur Seite javahistory2.php mit allen werten des Formulars.

        Ich habe trotz dieser Beschreibung nicht ganz verstanden, was du da tust, aber ich vermute, Post/Redirect/Get könnte dein History-Problem lösen.

        (Sonst hätte ich Formulare verschachteln müssen).

        Formulardaten vom Client zum Server zum Client zum Server zu schicken ist nicht sehr elegant. Du hast sie doch bereits auf dem Server. Wenn du sie weitergeben willst, dann kannst du das durch Aufruf der entsprechenden PHP-Funktionen oder durch Weitergabe in der Session. Serverseitige Redirects kannst du auch sicher verwenden.

        Versuche das Getrickse mit per JavaScript automatisch abgesendeten Formularen möglichst zu vermeiden. Das ist untypisch und es wundert mich nicht, dass die Browser komisch darauf reagieren.

        Mathias