Определение того, была ли выбрана другая или было отправлено «Выбрать одну …» по умолчанию с пустым значением

#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’]) ), которое правильно охватывает их оба?