@dev400

Как правильно сделать такой select?

В базу в поле `active` пишется 1 или 0(int). Как сделать select, в котором можно выбрать 1 или 0, и при этом элемент selected был текущим элементом, который записан в базе.
Пример
<label for="field102">Статус</label>
                <select id="field102" name="active">
                    <option value="<?= $data['active'] ?>" selected="selected"><?= ($data['active'] === 0) ? "Не активен" : "Активен" ?></option>
                    <option value="<?= ($data['active'] === 1) ? 0 : 1 ?>"><?= ($data['active'] === 1) ? "Активен" : "Не активен" ?></option>
                </select>


Но это не работает правильно. Или я туплю
  • Вопрос задан
  • 202 просмотра
Решения вопроса 2
@petun
Full Stack web Developer
Вообще вы конечно нагородили. Все проще.
<select>
    <option value="0" <?=$data['active'] == 0 ? 'selected="true"' : null;?>>Не активен</option>
    <option value="1" <?=$data['active'] == 1 ? 'selected="true"' : null;?>>Активен</option>
</select>
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Вопрос концептуальный: зачем это делать селектом, вместо более очевидного checkbox?

А в селектах обычно переключают аттрибут selected, а не извращаются со значениями. Одинаковый порядок следования option - это бонус для использования, а не баг.
<option value="1" <?= $data['active'] ? ' selected="selected":'''?>>Активен</option>
<option value="0" <?= !$data['active'] ? ' selected="selected":'''?>>Не активен</option>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы