V HTML formulářích často potřebujeme vytvořit položky značky <select>
a některou z nich označit. Ať jsou položky konstantní nebo dynamické z číselníku, určitě se pro jejich výpis vyplatí vytvořit funkci:
<?php /** Převod pole na HTML volby * @param array pole, ze kterých budou vytvořeny volby * @param array skalární hodnota nebo pole s označenými prvky * @param bool zajistí, že <option> nebudou obsahovat atribut value * @return string řetězec s HTML volbami * @copyright Jakub Vrána, https://php.vrana.cz/ */ function optionlist($options, $selected = array(), $not_values = false) { $return = ""; if (!is_array($selected)) { $selected = array($selected); } foreach ($options as $key => $val) { $checked = in_array(($not_values ? $val : $key), $selected); $return .= '<option' . ($not_values ? '' : ' value="' . htmlspecialchars($key) . '"') . ($checked ? ' selected="selected"' : '') . '>' . htmlspecialchars($val) . "</option>"; } return $return; } ?>
Místo jedné vybrané položky je možné funkci předat pole všech vybraných, což se hodí pro <select multiple>
. Funkci trochu komplikuje parametr $not_values
, který zajistí, že klíče pole se budou ignorovat. To jednak zmenší výsledný HTML kód a jednak umožňuje snadno předávat např. pole range(1, 12)
.
Pokud se ve výběrovém seznamu má použít číselník z databáze, dá se tato funkce dobře zkombinovat s funkcí mysql_get_vals
:
<?php $skupiny = mysql_get_vals("SELECT id, nazev FROM skupiny ORDER BY nazev"); $vybrano = mysql_get_vals("SELECT skupina, skupina FROM vyrobky_skupiny WHERE vyrobek = " . intval($_GET["select"])); echo "<select name='skupiny[]' multiple='multiple'>" . optionlist($skupiny, $vybrano) . "</select>\n"; ?>
Diskuse je zrušena z důvodu spamu.