У меня есть простая база данных инвентаризации и в форме input_data, одно из полей ввода – это поле, как показано ниже:
<select> <option>In Inventory</option> <option>In Process</option> <option>Shipped/in-transit</option> <option>Received by recipient</option> </select>
Если, например, я ввожу данные с помощью «В процессе», а позже я хотел бы обновить эти данные. По умолчанию возвращается значение «В инвентаре» в файле update_page.php. Я хотел бы видеть выбранное значение «In Process».
Вот фрагмент из моего нерабочего кода из моего update_page.php:
<select name="status" value="<?php echo $row['status']; ?>"> <option>In Inventory</option> <option>In Process</option> <option>Shipped/in-transit</option> <option>Received by recipient</option> </select>
Select не имеет атрибута значения в HTML – вы можете выбрать несколько параметров, и это определяется выбранным атрибутом элемента option
Mucky way:
<select name="status"> <option<?php if ($row['status'] == "In Inventory"): ?> selected="selected"<?php endif; ?>>In Inventory</option> <option<?php if ($row['status'] == "In Process"): ?> selected="selected"<?php endif; ?>>In Process</option> <option<?php if ($row['status'] == "Shipped/in-transit"): ?> selected="selected"<?php endif; ?>>Shipped/in-transit</option> <option<?php if ($row['status'] == "Received by recipient"): ?> selected="selected"<?php endif; ?>>Received by recipient</option> </select>
Чуть лучше:
<?php $options = array("In Inventory", "In Process", "Shipped/in-transit", "Received by recipient"); ?> <select> <?php foreach ($options as $option): ?> <option value="<?php echo $option; ?>"<?php if ($row['status'] == $option): ?> selected="selected"<?php endif; ?>> <?php echo $option; ?> </option> <?php endforeach; ?> </select>
Лучший способ – сохранить эти параметры в таблице базы данных – возможно, лучше использовать идентификационные значения, а не строки (позволяет упростить обновление меток опций) и перебирать возможные варианты из запроса БД, как у меня выше. Если этот список выбора используется много, кешируйте результаты запроса, чтобы получить параметры (помните, что вам нужно очистить кеш, если список будет обновлен)
Каждый параметр имеет соответствующее значение, а не тег select. Таким образом, вам придется сравнивать значения каждого параметра со статусом.
Вам нужно будет проверить каждый, если он выбран, например, для примера:
<option <?php if ($row['status'] == 'In Process') echo 'selected'; ?>>In Process</option>
Если вы используете jQuery, вы можете сделать несколько более чистое решение, в вашем случае укажите свой тег select id, а затем:
$(document).ready(function() { $('#select-id option:contains("<?php echo $row['status']; ?>")').prop('selected', true); });
Более простой код, который я нашел, используя только JavaScript (без jQuery). Поместите его сразу после объявления списка и установите для него выбранный индекс:
<script> document.getElementById('listBoxId').selectedIndex=<?php echo $INDEX ?>; </script>