Fritz: bei "zurück" formularinhalte weg

Hallo zusammen

Ich hab ein Problem und werde wirklich nicht schlau daraus. Ich habe ein mehrseitiges Formular und möchte, falls der zurück-button angeklickt wird, dass die eingegebenen Inhalte von der vorhergehenden Seite immer noch im Formular stehen. Nun klappt das bei mir, wenn ich von der dritten auf die zweite Seite zurückgehe, allerdings nicht, wenn ich von der zweiten auf die erste Seite gehe (Formularinhalte sind weg). Sieht jemand, wo der Fehler in meinem Code liegt? Übrigens, der Fehler taucht bei IE und Firefox auf, am Browser sollte es also nicht liegen

1. Seite

<!DOCTYPE html Public "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Allgemeine Angaben zu ihrem Betrieb</title>
  <script language="JavaScript">
  <!--
   function ok() {
    var message="Sie haben nicht alle erforderlichen Felder ausgefüllt!"
    if(document.forms[0].name1.value=="") {
     alert(message);
     return false;
    }
    else if(document.forms[0].strasse.value=="") {
     alert(message);
     return false;
    }
    else {
     return true;
    }
   }
   // -->
   </script>
 </head>
 <body>
  <form action="form2.php" method="post" onSubmit="return ok();">
   <fieldset>
    <legend>Adresse</legend>
   <table border="0">
    <tr align="left">
    <th width="80"><label for="name1">Name*</label></th>
    <th width="150"><input type="text" name="name1" id="name1"/></th>
    </tr>
    <tr align="left">
    <th><label for="strasse">Strasse*</label></th>
    <th><input type="text" name="strasse" id="strasse"/></th>
    </tr>
    <tr align="left">
    <th><label for="plz">PLZ</label></th>
    <th><input type="text" name="plz" id="plz" maxlength="4"/></th>
    <th width="80"><label for="plz">Ort</label></th>
    <th width="150"><input type="text" name="ort" id="ort"/></th>
    </tr>
   </table>
   </fieldset>
   <fieldset>
    <legend>Tätigkeitsbereich</legend>
    <table border="0">
    <tr align="left">
    <th>Wählen Sie bitte den Beruf aus!</th>
    </tr>
    <tr align="left">
    <th width="310"><label for="bcodausg">ausgebildeter Beruf</label></th>
    <th><select size="1" name="bcodausg" id="bcodausg">
    <option value="68200">Kaufmann</option>
    <option value="47110">Polymechaniker</option>
    <option value="23220">Coiffeur</option>
    </select></th>
    </tr>
    <tr height="30"></tr>
    <tr align="left">
    <th>Seit wie vielen Jahren bilden Sie in ihrem Betrieb Lehrlinge aus?</th>
    </tr>
    <tr align="left">
    <th><input type="radio" value="1" name="years" checked> Seit über 10 Jahren</th>
    </tr>
    <tr align="left">
    <th><input type="radio" value="2" name="years"> Zwischen 5 und 9 Jahren</th>
    </tr>
    <tr align="left">
    <th><input type="radio" value="3" name="years"> weniger als 5 Jahre</th>
    </tr>
    </table>
   </fieldset>
   <input type="submit" value="weiter">
  </form>
 </body>
</html>

2. Seite

<!DOCTYPE html Public "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Produktive Zeiten</title>
  <script language="JavaScript">
  <!--
   function pop() {
    var2 = document.forms[0].zei001.value;
    if (var2>=40) {
    var var1=var2;
    fenster=window.open("datei.php?var1="+var2,"name","width=400,height=300,resizable=yes");
    return false;
   }
   return true;
   }
   // -->
   </script>
 </head>
 <body>
  <form action="test2.php" method="post" onSubmit="return pop();">
    <?php function vpassthru()
{
global $HTTP_POST_VARS, $HTTP_GET_VARS;

reset ($HTTP_POST_VARS);
while (list ($key, $val) = each ($HTTP_POST_VARS))
echo "<input type=hidden name='".$key."' value='".$val."'>";

reset ($HTTP_GET_VARS);
while (list ($key, $val) = each ($HTTP_GET_VARS))
echo "<input type=hidden name='".$key."' value='".$val."'>";
} ?>
   <fieldset>
   <legend>Arbeitszeit</legend>
    <label for="zei001">Stunden/Woche</label>
    <input type="text" name="zei001" id="zei001"><br>
   </fieldset>
   <?php vpassthru(); ?>
   <input type="submit" value="weiter">
  </form>
 </body>
</html>

3. Seite

<!DOCTYPE html Public "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Überprüfung ihrer Angaben</title>
 </head>
 <body>
  <form action="end.php" method="post">
  <?php
  echo "Bitte überprüfen Sie ihre Eingaben<br>";
  echo "Name $_POST[name1]<br>";
  echo "Strasse $_POST[strasse]<br>";
  echo "PLZ $_POST[plz] $_POST[ort]<br>";
  echo "Arbeitszeit $_POST[zei001]<br>";
  echo "ausgebildeter Beruf $_POST[bcodausg]<br>";
  echo "Jahre $_POST[years]<br>";

function vpassthru()
  {
  global $HTTP_POST_VARS, $HTTP_GET_VARS;

reset ($HTTP_POST_VARS);
  while (list ($key, $val) = each ($HTTP_POST_VARS))
  echo "<input type=hidden name='".$key."' value='".$val."'>";

reset ($HTTP_GET_VARS);
  while (list ($key, $val) = each ($HTTP_GET_VARS))
  echo "<input type=hidden name='".$key."' value='".$val."'>";
  }

vpassthru();
  ?>
  <input type="submit" value="fertig">
  </form>
 </body>
</html>

  1. Ich bins wieder

    ich hab das Problem inzwischen gelöst, nun frage ich mich aber, ob die Profis dies als "gültige" Lösung ansehen würden. Ich habe jetzt einfach beim Formularbeginn folgendes eingabaut:

    <form action="test2.php" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onSubmit="return pop();">

    Ist es wirklich erlaubt, 2 action-Befehle zu setzen?

    Gruss Fritz

    1. Moin!

      Ist es wirklich erlaubt, 2 action-Befehle zu setzen?

      Nein, selbstverständlich nicht.

      Ob ein Browser bei Betätigen der Zurück-Funktion die zuvor ausgefüllten Formularfelder erneut ausfüllt, hängt primär vom Browser ab. Laut Standard müßte er es eigentlich tun ("Zurück" soll dem Benutzer die Seite so zeigen, wie er sie verlassen hat - im Fall von Formularen ist das im ausgefüllten Zustand), häufig genutzte Browser wie IE oder Firefox lassen sich aber wohl durch Caching-Header negativ beeinflussen, bzw. laden die Seite u.U. komplett neu (und unausgefüllt) vom Server.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hallo Sven,

        Ob ein Browser bei Betätigen der Zurück-Funktion die zuvor ausgefüllten Formularfelder erneut ausfüllt, hängt primär vom Browser ab.

        sehe ich auch so.

        Laut Standard müßte er es eigentlich tun ("Zurück" soll dem Benutzer die Seite so zeigen, wie er sie verlassen hat - im Fall von Formularen ist das im ausgefüllten Zustand)

        Ist das wirklich irgendwo festgelegt? Wenn ja, wo?
        Ich persönlich verstehe die "Zurück"-Funktion nämlich nicht so - ich würde erwarten, dass der Back-Button die vorherige Seite neu lädt. Meinetwegen aus dem Cache, aber auf jeden Fall so, als hätte ich sie eben frisch aufgerufen.
        Dass auf manchen Seiten die Formulareingaben noch da sind, empfinde ich eher als unerwünscht, manchmal lästig.

        häufig genutzte Browser wie IE oder Firefox lassen sich aber wohl durch Caching-Header negativ beeinflussen, bzw. laden die Seite u.U. komplett neu (und unausgefüllt) vom Server.

        Beim IE scheint das Verhalten außerdem vom Kontext abhängig zu sein. Ich habe schon ab und zu die Erfahrung gemacht, dass bei einem "Zurück" die Formulareingaben erhalten bleiben, wenn ich den Back-Button (bzw. die Backspace-Taste) *unmittelbar* nach dem Laden der neuen Seite drücke. Wenn aber zwischendurch eine Aktion auf der neuen Seite stattgefunden hat (Eingabe, Klick auf einen Button oder Link), sind nach dem "Zurück" die Formularfelder leer.
        Ganz durchschaubar, geschweige denn einleuchtend finde ich dieses Verhalten auch nicht, aber ich habe mich im Lauf der Zeit daran gewöhnt. ;-)

        Ciao,
         Martin

        --
        Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.