Formulardaten nach fehlgeschlagener Überprüfung wieder eingeben

mian

Grünschnabel
Hi @ all,

ich habe ein kleines Probleme und hoffe das mir irgendjemand helfen kann.
Es geht darum, das ich ein Formular habe, die eingegebenen Daten möchte ich durch einen Selbstaufruf überprüfen
Code:
<form action="<? $_SERVER['PHP_SELF'] ?>" method="post">

Mein Problem liegt darin, das der Benutzer seine Daten nicht nochmals seine kompletten Daten eingeben muss, belege ich die Werte mit denen zuvor eingegebenen Werte wieder vor. Beim Textfeld sieht dies so aus und dies funktioniert soweit auch.

Code:
<td><input name="name" type="text" size="42" 
    <? if(isset($_REQUEST['name'])){ echo("value=\"".$_REQUEST['name']."\""); } ?>></td>

Meine Frage, wie belege ich die Felder wieder vor, wenn ich folgendes Konstrukt habe?

Code:
<td><select name="anrede">
           <option> </option>
           <option>Herr</option>
           <option>Frau</option>
           </select></td>

In diesem Fall funktionert folgendes nicht.

Code:
<td><select name="anrede" 
<? if(isset($_REQUEST['anrede'])){ echo("value=\"".$_REQUEST['anrede']."\""); } ?>>
           <option> </option>
           <option>Herr</option>
           <option>Frau</option>
           </select></td>


Weis irgendjemand Rat?

Danke im voraus.

Gruss Micha
 
Du musst die Abfrage in dem <option> - Tag schreiben.

z.B. wenn Herr ausgewählt wurde:
PHP:
<option 
<?PHP 
if( isset($_REQUEST['anrede']) && $_REQUEST['anrede'] == "Herr" ) { 

      print("selected=\"selected\"");

} ?>
>Herr</option>
 
Also eigentlich empfielt es sich nicht die eingegebenen Daten nochmals auszugeben, falls etwas schief gegangen ist. Was ist wenn der Fehler durch ne versuchte Cross-Site Scripting Attacke entsteht? :rtfm:

Naja wie auch immer, probier mal folgendes:
PHP:
<td><select name="anrede">
<?php
$anreden = array("","Herr","Frau");
foreach($anreden as $num => $anrede)
{
    if(isset($_REQUEST['anrede']) && $anrede==$_REQUEST['anrede'])
    {
        echo("<option selected=\"selected\" value=\"".$anrede."\">".$anrede."</option>\n");
    }
    else
    {
        echo("<option value=\"".$anrede."\">".$anrede."</option>\n");
    }
}
?></select></td>
 
Zuletzt bearbeitet:
Wow, Wahnsinn, vielen Dank für die schnellen und hilfreichen Antworten.

@ Teh H4mst0R, ich kenne das Problem mit XSS, die normalen Textfelder werden aber vorher nochmals gefiltert.
 
War auch nur ne Info für alle Fälle ;)

Ich hab keine Ahnung wie man das einsehen kann, aber falls das Thema damit geklärt ist, sind die meisten hier immer ganz scharf drauf, dass es auch als erledigt markiert worden ist. (neben dem Antworten-Button)

Falls du das schon gemacht hast, dann ignorier einfach was hier steht :-)
 
Teh H4mst0R hat gesagt.:
Also eigentlich empfielt es sich nicht die eingegebenen Daten nochmals auszugeben, falls etwas schief gegangen ist.
Dich will ich sehen, wenn du ein umfangreiches Formular ausgefüllt hast und alle Eingaben nochmal durchführen musst, nur weil du dich irgendwo leicht verschrieben hast. :rolleyes:
 
Pendergast hat gesagt.:
Dich will ich sehen, wenn du ein umfangreiches Formular ausgefüllt hast und alle Eingaben nochmal durchführen musst, nur weil du dich irgendwo leicht verschrieben hast. :rolleyes:

In solchen Fällen schaue ich ganz entspannt auf den "zurück"-Button und überlege ob ich da mal draufklicken sollte... ;-)
Außerdem hab ich wohl auch nicht geschrieben, dass man wegen XSS dieses Feature nicht anbieten sollte. Nur weil man dann einen Weg finden muss ggf. eingegebenen Code zu entschärfen, heißt das nicht, dass es besser ist sich diese Arbeit zu ersparen...
Ich denke ich habe nur versucht auf ein weitverbreitetes Problem aufmerksam zu machen, was ja auch überflüssig war (siehe Zitat von mian).

mian hat gesagt.:
...@ Teh H4mst0R, ich kenne das Problem mit XSS, die normalen Textfelder werden aber vorher nochmals gefiltert.
 
Teh H4mst0R hat gesagt.:
Nur weil man dann einen Weg finden muss ggf. eingegebenen Code zu entschärfen, heißt das nicht, dass es besser ist sich diese Arbeit zu ersparen...
Ich denke ich habe nur versucht auf ein weitverbreitetes Problem aufmerksam zu machen ...

Was du ja auch gemacht hast, ich finde es in Ordnung und da es auch hier angesprochen wurde kann sich nun jeder selbst aussuchen, was er macht.

Vielen Dank nochmals für alle Posts.
 
Zurück