Multiple Select in dynamischem Formular korrekt darstellen

Quests Sohn

Mitglied
Hallo Foum,

ich möchte in einem dynamischen Formular über ein Select mit Mehrfachwahl (multiple)
Daten abfragen und in einer Session speichern. Bei einer Falscheingabe (in anderen
Feldern) soll das dynamische Formular mit den zuvor ausgewählten Werten wieder
ausgeben werden.

Hier ist der frageliche Ausschnitt aus dem Formular:

Code:
<select name="Kategorien[]" id="Kategorien" size="4" multiple>
<?php 
$res_k = mysql_query("SELECT * FROM kategorien"); 
while ($k = mysql_fetch_array($res_k)) { 
	foreach($_SESSION['Kategorien'] as $kval) { 
		if ($kval == $k['kategorie']) { 
			echo "<option value=\"".$k['kategorie']."\" selected>".htmlentities($k['Name'])."</option>"; 
		} else { 
			echo "<option value=\"".$k['kategorie']."\">".htmlentities($k['Name'])."</option>"; 
		} 
	} 
} 
?></select>

Die eingegebenen Werte werden auch korrekt als Array in der Session gespeichert,
doch wenn die Seite erneut angezeigt wird, ist immer nur das letzte der ausgewählten
Optionen als "selected" markiert.

Was ist mein Fehler, ich finde ihn nicht ... ?!
 
Hi da mich das auch interessiert wie sowas geht hab ich es mal fix nachgebaut, es wird dir sicher helfen.

PHP:
echo '<form method="POST" action="multiple.php?opt=foo">
        <select name="Kategorien[]" id="Kategorien" size="4" multiple>
         <option>Auto</option>
         <option>Frauen</option>
         <option>PC</option>
         <option>Sport</option>
         <option>Hobby</option>
        </select>
        <input type="submit" name="send" value="SEND">
       </form>';
 
 if ($_GET['opt'] == 'foo')
 {
   $_SESSION['Kategorien'] = $_POST['Kategorien'];
   echo '<select name="Kategorien[]" id="Kategorien" size="8" multiple>'; 
   $res_k = mysql_query("SELECT `kat` FROM `test`"); 
   while ($k = mysql_fetch_array($res_k)) 
   { 
     $x = false;
     foreach($_SESSION['Kategorien'] as $kval) 
     { 
        if ($kval == $k['kat']) 
        { 
	  echo '<option value="'.$k['kat'].'" selected>'.$k['kat'].'</option>';
          $x = true;
          break; // unterbrechen wenn gefunden
	} 
     }
     if (!$x) echo '<option value="'.$k['kat'].'">'.$k['kat'].'</option>'; // Unselektierte Option ausgeben
   }
   echo '</select>';   
 }

Ich empfehle dir im SQL-Statement nur das zu "selecten" was du wirklich benötigst.
$x ist eine Hilfsvariable alles weitere sollte klar sein.

mfg
 
Zuletzt bearbeitet:
Zurück