Мультиселект при выгрузке из БД в PHP

Предположим у вас есть таблица в БД MySQL из которой вы хотите взять значения и построить select список для выбора пользователю. Рассмотрим как это сделать, а также ситуацию, когда вам нужно создать мультиселект из БД, когда можно выбирать сразу несколько значений в select списке.

Пусть имеется таблица category в БД. Из нее мы будем брать поле id для value в option и поле name для подписи option-ов. Теперь сделаем запрос к БД и построим select с формой (процесс подключения к БД в примере опущен).

<form action="" method="post">
<?php
$result2 = mysql_query("select * from category);
print 'Выберите категории<br />
<select multiple name="redmatpodcategotiay[]">';
while ($row2=mysql_fetch_array($result2)) {
print '<option value="'.htmlspecialchars($row2['id'], ENT_QUOTES).'">'.htmlspecialchars($row2['name'], ENT_QUOTES).'</option>';
}
print '</select>';
?>
<br />
<input type="submit" value="Подтвердить" name="butnewselbd">
</form>

Итак, в примере выше мы создали динамический мультиселекет из значений в БД. Теперь осталось сделать php обработчик, который сможет понять какой из option-ов выбран и отправлен пользователем.

<?php
if (isset($_POST["butnewselbd"])) {
$redmatpodcategotiay = $_POST["redmatpodcategotiay"];
$redmatpodcategotiaythis = '';
for($a = 0; $a<count($redmatpodcategotiay); $a++) {
$redmatpodcategotiaythis .= $redmatpodcategotiay[$a].'##';
} }
?>

Здесь мы используем обычный php цикл, который сканирует каждое свойство на предмет соответствия отправленным option из массива $redmatpodcategotiay. Когда соответствие найдено, результат записывается в переменную $redmatpodcategotiaythis, а именно id выбранных полей. В данном обработчике вы можете выбрать любые действия которые вам требуется, например update каких-то полей или отправка письма пользователям.

Мы рассмотрели самый сложный пример с мультиселектом (он получается за счет атрибута multiple). Думаю, сделать простую выгрузку полей из БД в обычный select вам не составит труда по аналогии с основным примером.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Введите капчу: