Peter: select selected

Beitrag lesen

Auswählen
<form action = "Bearbeiten2.php" method = "post">
  <select size=5 name=year>
         <option value=2002>2002</option>
         <option value=2003>2003</option>
         <option value=2004>2004</option>
         <option value=2005>2005</option>
         <option value=2006>2006</option>
         </select><br><br>
         <input type="submit" value="submit"><br><br><br>
( testanzeige : <INPUT class="inputField" name="" value="<?PHP $year = $_POST['year'];echo $year;?>"> )
</form>

Ich kann natürlich <option selected value=2004>2004</option> einfügen, aber nicht der Programmierer, sondern der Anwender soll auswählen...

Dann mach es mit PHP. Prüfe für jede <option>, ob der aktuell gesendete Wert in $_POST identisch ist mit dem value-Attribut des <option>. Nur in diesem Fall setzte das Attribut selected in den HTML-Quelltext ein.

Ja, das ist aufwendiger, als einfach in ein <input type=text> den bereits eingegebenen Text wieder erscheinen zu lassen. Aber so ist das Leben. Wenn du mehr als ein <select> in deinem Formular hast, schreibst du dir schlauerweise eine Funktion, die dir die meiste Arbeit abnimmt: Du übergibst ihr ein Array mit auswählbaren Werten, den derzeit ausgewählten Wert, sowie den Namen des <select> und kriegst als Rückgabe beispielsweise den passend zusammengebauten HTML-Quelltext.

Ach ja:

testanzeige : <INPUT class="inputField" name="" value="<?PHP $year = $_POST['year'];echo $year;?>">

Warum zum Teufel kopierst du hier erstmal den Wert in $year? Gewöhn dir das ab! Kostet erstens Speicherplatz, der nicht unendlich ist, und verschleiert zweitens die Herkunft des Wertes. Denn man kann als böser Angreifer nicht nur die Werte senden, die du in deinem Formular vorgegeben hast, sondern prinzipiell jeglichen Stringwert. Deshalb ist es eine gute Sache, solche Stringwerte solange in $_POST, $_GET oder auch $_COOKIE zu behalten, bis man sie am Zielort tatsächlich verwenden und dann auch passend escapen tut.

Denn dein "echo $year;" muß heißen "echo htmlspecialchars($year);", ansonsten bist du für Cross-Site-Scripting anfällig.