#php #forms #option #isset
#php #формы #isset
Вопрос:
Я добавляю опцию сортировки по на свою страницу поиска. Я использую два типа ввода формы выбора, один для поля для заказа, а другой для ASC / DESC. У меня есть первый вариант со значением =»» и текстом «Выберите один …».
<label for="sort[order_by_field]">Field</label><select name="sort[order_by_field]" id="combobox">
<option value="">Select one...</option>
<optgroup label="---">
<option value="finding_incident_number"<?php echo ($field == 'finding_incident_number' ? ' selected="selected"': false); ?>>Incident #</option>
<option value="finding_violation_type"<?php echo ($field == 'finding_violation_type' ? ' selected="selected"': false); ?>>Finding</option>
<label for="sort[order_by_direction]">Direction</label>
<select name="sort[order_by_direction]">
<option>Select one...</option>
<option value="ASC"<?php echo ($dir == 'ASC' ? ' selected="selected"': false); ?>>Ascending</option>
<option value="DESC"<?php echo ($dir == 'DESC' ? ' selected="selected"': false); ?>>Descending</option>
</select>
После отправки моей формы я проверяю, установлен ли isset($_POST[‘sort’]). Оно установлено. Я также проверяю наличие !empty . Оно всегда !пустое. Я хочу знать, действительно ли пользователь сделал выбор. Есть ли способ настроить это так, чтобы мне не приходилось проверять отдельные значения массива, т.Е. isset($_POST[‘sort’][‘order_by_field’])? В будущем я хотел бы иметь динамическое количество добавляемых / удаляемых полей сортировки по полям.
Я полагаю, я мог бы использовать метку optiongrp, но тогда это не было бы семантической разметкой, не так ли? Я думаю, это все же сработало бы.
С более широкой точки зрения, является ли использование «Выбрать один …» хорошей практикой для выпадающего списка формы?
Комментарии:
1. если вы печатаете свои данные,
$_POST['sort']
всегда будет установлено значение. И оно будет пустым, только если для всех полей установлено значениеSelect one
. Вы можете проверить, какие из них установлены, выполнив циклsort
Ответ №1:
Поле выбора всегда будет установлено в $_POST
вы должны проверить с помощью
if ($_POST['sort_by']['field_name'] !='')
или
if ($_POST['sort_by']['field_name'] != null)
и это всегда хорошая практика проверять переменные перед их использованием.
установка «Выбрать один …» — хорошая практика, в этом нет ничего плохого.
Комментарии:
1. как насчет: if ( !empty($_POST[‘sort’][‘field’]) ), которое правильно охватывает их оба?