Formularfeldinhalt wird beim back gelöscht
Micha
- php
Ich hab auf meiner seite ein formular das beim abschicken von einer anderen php seite geprüft wird (ob alles vollständig ist usw). So wenn was falsch ist kommt eine Fehlerfeldung z.B. Bitte alles Felder ausfüllen! Click here to go back!
Dieser zurücklink sieht so aus: <a href="javascript: history.go(-1)">......</a>. Das geht auch alles, nur wenn man dann zurückgeht, sind die Formularfelder alle leer! Warum? Was muss ich da machen? Ich hab schonmal probier: <input type="text".... value="<?php print "$formname" ?>". Das geht aber auch net. Bitte um Hilfe
gruß micha
Ich hab auf meiner seite ein formular das beim abschicken von einer anderen php seite geprüft wird (ob alles vollständig ist usw). So wenn was falsch ist kommt eine Fehlerfeldung z.B. Bitte alles Felder ausfüllen! Click here to go back!
Dieser zurücklink sieht so aus: <a href="javascript: history.go(-1)">......</a>. Das geht auch alles, nur wenn man dann zurückgeht, sind die Formularfelder alle leer! Warum? Was muss ich da machen? Ich hab schonmal probier: <input type="text".... value="<?php print "$formname" ?>". Das geht aber auch net. Bitte um Hilfe
gruß micha
Ich habe dir ein Bsp. wie ich es mache
<?php include ("./admin/function-email.php"); if (isset($absenden)) { $email_check = email_adr_check($email); if (isset($name) && $name == "") { $fehler = "- Bitte geben Sie ihren Namen ein!\n"; } if (isset($email) && $email == "") { $fehler .= "- Bitte geben Sie ihren E-Mailadresse ein!\n"; } elseif (isset($email) && !$email_check == 1) { $fehler .= "- Bitte geben Sie ihre korrekte EMail-Adresse an!"; } if (isset($betreff) && $betreff == "") { $fehler .= "- Bitte geben Sie ihr Betreff ein!\n"; } if (isset($nachricht) && $nachricht == "") { $fehler .= "- Bitte geben Sie ihre Nachricht ein!\n"; } } ?> <html> <head> <title>Musikverein Beuren e.V.</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="mv-beuren.css"> </head>
<body> <b><font size="4">E</font><font size="3"> - MAIL</font></b> <hr> <br> <?php if (isset($absenden) && !$fehler) { $header = "From: "$name" <$email>\n"; $header .= "X-Mailer: PHP-Version " . PHP_VERSION; $to = "$an"; $subject = "$betreff"; $message = "Name: $name\n"; $message .= "Verein: $verein\n"; $message .= "Strasse: $strasse\n"; $message .= "PLZ: $plz / $ort\n"; $message .= "Telefon: $telefon\n"; $message .= "Fax: $fax\n"; $message .= "Email: $email\n"; $message .= "Betreff: $betreff\n\n"; $message .= "Mitteilung:\n$nachricht"; mail($to, $subject, $message, $header); ?> <meta http-equiv="refresh" content="0; URL=main.php"> <?php msgwindow("Ihre Daten wurden erfolgreich an uns übermittelt!","Danke !","Danke !",2,200,200); } else { ?> <form name="form1" method="post" action=""> <table width="90%" border="0" align="center"> <tr> <td width="80" align="right"><b>An:</b></td> <td width="100%"> <select name="an" size="1"> <option <?php if ($an == "info@mv-beuren.de") echo "selected"?>>info@mv-beuren.de</option> <option <?php if ($an == "vorstand@mv-beuren.de") echo "selected"?>>vorstand@mv-beuren.de</option> <option <?php if ($an == "2vorstand@mv-beuren.de") echo "selected"?>>2vorstand@mv-beuren.de</option> <option <?php if ($an == "finanzen@mv-beuren.de") echo "selected"?>>finanzen@mv-beuren.de</option> <option <?php if ($an == "jugend@mv-beuren.de") echo "selected"?>>jugend@mv-beuren.de</option> <option <?php if ($an == "presse@mv-beuren.de") echo "selected"?>>presse@mv-beuren.de</option> <option <?php if ($an == "wirtschaft@mv-beuren.de") echo "selected"?>>wirtschaft@mv-beuren.de</option> <option <?php if ($an == "webmaster@mv-beuren.de") echo "selected"?>>webmaster@mv-beuren.de</option> </select> * </td> </tr> <tr> <td width="80" align="right"><b>Name:</b></td> <td width="100%"> <input type="text" name="name" size="30" value="<?php echo $name ?>"> * <input type="submit" name="absenden" value="Abschicken"> <input type="reset" name="del" value="Löschen"> </td> </tr> <tr> <td width="80" align="right"><b>Verein:</b></td> <td width="100%"> <input type="text" name="verein" size="30" value="<?php echo $verein ?>"> </td> </tr> <tr> <td width="80" align="right"><b>Straße:</b></td> <td width="100%"> <input type="text" name="strasse" size="30" value="<?php echo $strasse ?>"> </td> </tr> <tr> <td width="80" height="29" align="right"><b>Ort:</b></td> <td width="100%" height="29"> <input type="text" name="ort" size="30" value="<?php echo $ort ?>"> </td> </tr> <tr> <td width="80" align="right"><b>PLZ:</b></td> <td width="100%"> <input type="text" name="plz" size="30" value="<?php echo $plz ?>"> </td> </tr> <tr> <td width="80" align="right"><b>Telefon:</b></td> <td width="100%"> <input type="text" name="telefon" size="30" value="<?php echo $telefon ?>"> </td> </tr> <tr> <td width="80" align="right"><b>Fax:</b></td> <td width="100%"> <input type="text" name="fax" size="30" value="<?php echo $fax ?>"> </td> </tr> <tr> <td width="80" align="right"><b>E-Mail:</b></td> <td width="100%"> <input type="text" name="email" size="30" value="<?php echo $email ?>"> * </td> </tr> <tr> <td width="80" valign="top" align="right"><b>Betreff:</b></td> <td width="100%" valign="top"> <input type="text" name="betreff" size="30" value="<?php echo $betreff ?>"> * </td> </tr> <tr> <td width="80" valign="top" align="right"><b>Nachricht:</b></td> <td width="100%" valign="top"> <textarea name="nachricht" cols="50" rows="15"><?php echo $nachricht ?></textarea> </td> </tr> </table> </form> </body> </html> <?php } if (isset($fehler)) { alertmsg($fehler); } ?>
Ja wenn ich das formular auf der selbenseite auswerte, bleiben die value-werte ja auch bestehn. Ich weiß nich liegt das denn daran dass ich das form auf einer anderen seite auswerte?
gruß micha
Ja wenn ich das formular auf der selbenseite auswerte, bleiben die value-werte ja auch bestehn. Ich weiß nich liegt das denn daran dass ich das form auf einer anderen seite auswerte?
Nein, das liegt daran, dass manche Browser trotz anderslautendem Standard beim History-Blättern nicht den alten Stand der Seite herstellen, sondern sie nochmal neu vom Server laden - und dann sind die Felder natürlich leer. Und sie zu füllen macht keinen Sinn, weil du du dazu ja die Daten des abgeschickten Formulars wissen müßtest. Dagegen kannst du nichts machen. Betroffene Browser sind übrigens IE und Netscape (Mozilla/Netscape 6 auch noch?) - also die große Mehrheit im Netz. Opera kanns - da kann man hier im Forum wirklich beliebig blättern im geöffneten Thread, nochmal zurückschauen, was vorher gesagt wurde, und dann wieder vorwärts zu seinem schon angefangenen Text, und auch anderen Links folgen, und dann wieder zurückkommen - sehr praktisch, das. :)
Es macht bei solchen Formulardingen also immer Sinn, die Daten an "sich selbst" (also das gleiche PHP|Perl|CGI-Skript) zu senden. Der erste Aufruf des Skripts produziert das leere Formular, das Abschicken falscher Daten produziert ein ausgefülltes Formular mit Fehlerhinweisen an der passenden Stelle (der Vorteil: Man muß das Formular nicht nochmal kopieren, sondern kann gleich eine Version verwenden, die beide Aufgaben (leeres und angemeckertes Formular) gleichzeitig erledigt), und ein richtig ausgefülltes Formulas erzeugt nur noch eine Erfolgsmeldung.
- Sven Rautenberg
Hi Sven,
Danke für die ausführliche Antwort!
grüße micha
Hallo,
einere weitere - nicht unbedingt bessere - Lösungsmöglichkeit für das Problem besteht darin, die Feldinhalte mit Cookies zu speichern. Das macht z.B. dann Sinn, wenn Du mit einem .html-Formular arbeiten willst oder wenn Du dem Benutzer das erneute Ausfüllen von Feldern mit gleichen Inhalten in anderen Formularen oder bei einem späteren Besuch der Seite ersparen willst. Wenn Du Cookies dauerhaft speichern willst, solltest Du dem Nutzer allerdings per Checkbox die Möglichkeit geben, sich dagegen zu entscheiden.
Grüße,
Sebastian
Aloha!
Das macht z.B. dann Sinn, wenn Du mit einem .html-Formular arbeiten willst
Was bitteschön ist denn ein ".html-Formular", und wie unterscheidet es sich von einem ".php-Formular" oder einem "pfadname/-Formular"?
Die Bezeichnung der URL ist irrelevant - und wie die HTML-Daten, die der Browser vom Server bekommt, erzeugt werden, ebenfalls. Und da sich Cookies auch nicht von allein erzeugen, sondern entweder Javascript- oder Serverskript-Aktivitäten benötigen, bringt uns dieser Vorschlag nicht unbedingt weiter...
oder wenn Du dem Benutzer das erneute Ausfüllen von Feldern mit gleichen Inhalten in anderen Formularen oder bei einem späteren Besuch der Seite ersparen willst.
Ist datenschutztechnisch aber sehr kritisch, sofern es sich um persönliche Daten handelt, die abgefragt werden. Jeder andere Benutzer des Rechners, der zufällig das Formular ansteuert, könnte so ganz simpel an die Daten kommen bzw. Aktionen auslösen, die er vielleicht nicht auslösen darf.
Außerdem kommen die Cookiedaten auch wieder nur entweder per Javascript oder Serverskript zurück ins Formular - was wieder nicht zum Gedanken des ".html-Formulars" paßt. :)
Wenn Du Cookies dauerhaft speichern willst, solltest Du dem Nutzer allerdings per Checkbox die Möglichkeit geben, sich dagegen zu entscheiden.
Das auf jeden Fall.
- Sven Rautenberg
Aloha, Sven,
Was bitteschön ist denn ein ".html-Formular", und wie unterscheidet es sich von einem ".php-Formular" oder einem "pfadname/-Formular"?
Die Bezeichnung der URL ist irrelevant - und wie die HTML-Daten, die der Browser vom Server bekommt, erzeugt werden, ebenfalls.
Ein ".html-Formular" (entschuldige die unscharfe Wortwahl) ist eine Seite mit der Endung .html oder .htm, d.h. auf der ich die von Dir vorgeschlagenen serverseitigen Methoden (normalerweise) nicht verwenden kann.
Und da sich Cookies auch nicht von allein erzeugen, sondern entweder Javascript- oder Serverskript-Aktivitäten benötigen, bringt uns dieser Vorschlag nicht unbedingt weiter...
Gegen solche Aktivitäten ist doch grundsätzlich eigentlich nichts einzuwenden ;-) ...
Ist datenschutztechnisch aber sehr kritisch, sofern es sich um persönliche Daten handelt, die abgefragt werden. Jeder andere Benutzer des Rechners, der zufällig das Formular ansteuert, könnte so ganz simpel an die Daten kommen bzw. Aktionen auslösen, die er vielleicht nicht auslösen darf.
Dem stimme ich zu (und darauf hatte ich ja auch hingewiesen), zumindest sofern das Cookie auch nach einer "Sitzung" erhalten bleibt - muß es aber nicht ...
Außerdem kommen die Cookiedaten auch wieder nur entweder per Javascript oder Serverskript zurück ins Formular - was wieder nicht zum Gedanken des ".html-Formulars" paßt. :)
Das ".html-Formulars" bezog sich doch nur auf die Endung (s.o.). Mit solchen Formularen arbeitet man z.B. - so weit ich informiert bin - meistens in Verbindung mit Perl/CGI-Skripten.
Grüße,
Sebastian
Aloha!
Ein ".html-Formular" (entschuldige die unscharfe Wortwahl) ist eine Seite mit der Endung .html oder .htm, d.h. auf der ich die von Dir vorgeschlagenen serverseitigen Methoden (normalerweise) nicht verwenden kann.
Zugegeben ist die Standardkonfiguration von Webservern eher so ausgerichtet, .html-Dateien ohne weitere Serveraktivität auszuliefern. Das kann man aber im Prinzip beliebig konfigurieren - und auch ganz ohne Endung kann man arbeiten, dann ist die Erzeugungsmethode vollkommen transparent. Es ist jedenfalls nicht von Bedeutung, wie das Formular heißt, was im Browser landet.
Das ".html-Formulars" bezog sich doch nur auf die Endung (s.o.). Mit solchen Formularen arbeitet man z.B. - so weit ich informiert bin - meistens in Verbindung mit Perl/CGI-Skripten.
Auch mit CGI-Skripten im cgi-bin ist es problemlos möglich, die Taktik anzuwenden, direkt das Skript aufzurufen und ein leeres Formular zu erhalten und in der Folge ausgefüllte Meckerformulare bzw. Erfolgsmeldungen. Ein Formular in einer statischen Seite wird man nur dann an ein CGI-Skript senden, wenn dieses Skript die Formulardaten nur weiterverarbeitet, aber nicht zurückweisen kann/soll. Andernfalls macht man sich ziemlich viel Arbeit.
Ich hatte mal das zweifelhafte Vergnügen, ein statisches HTML-Formular in Perl parsen zu müssen, um eine Druckansicht zu erzeugen, also alle Formularelemente durch schlichten HTML-Text zu ersetzen. Das war nicht wirklich schön, mir gefallen integrierte Formulare viel besser. :)
- Sven Rautenberg
Hi Sebastian
Das ".html-Formulars" bezog sich doch nur auf die Endung (s.o.).
Endungen "existieren nicht" [tm] in HTTP.
Mit solchen Formularen arbeitet man z.B. - so weit ich informiert
bin - meistens in Verbindung mit Perl/CGI-Skripten.
Ganz bestimmt nicht dann, wenn das Formular ein Gedächtnis haben muß.
Schau Dir mal die Suchmaschine dieses Forums an:
(http://selfsuche.teamone.de/cgi-bin/such.pl)
und achte dabei auf die entsprechenden URLs und das Verhalten bei
der schrittweisen Verfeinerung einer Suchanfrage.
Viele Grüße
Michael