Обработка форм PHP, элементы множественного выбора (select, option, checkbox)
Данная статья – это лишь небольшое дополнение (даже можно сказать - памятка) к следующим статьям:
Обрабатываем флажки (checkbox
) формы при помощи PHP,
Обработка списка формы при помощи PHP. Теги select
и option
.
Флажки и списки содержат выбранные пользователем значения в виде массива. Отсюда следует, что значение атрибута name
для элементов списка и флажков должно завершаться квадратными скобками (name = ‛cars[]‛
).
checkbox
) – не перепутайте с переключателями (type=‛radio‛
), позволят пользователю выбрать несколько вариантов.select
и option
) – присутствует возможность множественного выбора.HTML
<input type="checkbox" name="cars[]" value="bmw" />
<input type="checkbox" name="cars[]" value="reno" />
<input type="checkbox" name="cars[]" value="x5" />
Если вы не поставите скобки, то в скрипт обработки формы будет передан один – последний элемент. Как вы знаете, для группы переключателей (элементы, у которых значение атрибута type
равно radio
, type=‛radio‛
) значение атрибута name
не может заканчиваться квадратными скобками, так как переключатель может быть выбран всего один.
Группу выбранных элементов можно обработать так: массив преобразовать в строку, где сами элементы будут разделены запятыми.
PHP
if(is_array($_POST['cars']))
{
$_POST['cars'] = implode(', ',$_POST['cars']);
}
Как вы понимаете, элементы множественного выбора не будут добавлены в массив $_POST
, если пользователь не отметил их в форме, поэтому не забывайте использовать функцию isset
для проверки существования элементов списка или флажков.
Любая форма может быть заполнена некорректно и, соответственно, пользователю придется заново заполнить поля формы. Чтобы пользователю не пришлось заново заполнять, например, флажки, которые успешно прошли валидацию, вы можете в элементах c type=‛checkbox‛
использовать следующий код:
<input type="checkbox" name="cars[]" value="bmw"
PHP
if($_POST && in_array('bmw', $_POST['cars']) )
{ echo 'checked'; }
/>
Списки похожи на группу из переключателей, но есть одно существенное отличие: в списке (тег select
) один элемент будет выбран ВСЕГДА. В списке выбранные элементы отмечаются атрибутом selected
, а не checked
- как в случае с переключателями и флажками. В плане обработки списки похожи на флажки: те же квадратные скобки в атрибуте в конце значения атрибута name
тега select
, множественность выбора и т.д.
В случае если пользователь по каким-то своим личным причинам не выбрал ни одного флажка, либо проигнорировал выпадающий список, для корректной работы скрипта обработки формы вы можете создать пустой массив и выводить его в качестве значения у соответствующих полей. Проще показать на примере:
PHP
if(!isset($_POST['cars']))
{$_POST['cars'] = array();
// продолжаем обрабатывать данные формы
}
Комментарии к статье
Мне понравились разъяснения про флажки. У меня получилось выполнить дз. Спасибо!