Я использую меню, чтобы попытаться получить данные в БД. Я видел это,

<select name="exam" id="exam" style="background-color: #FFDDF4">
   <option></option>
   <?php foreach($exams as $key=>$option):
      $selected = ($exam == $key) ? 'selected' : '';
      echo "<option value='$key' $selected>$option</option>";
   endforeach; ?>
</select>

Без этой строки,

$selected = ($exam == $key) ? 'selected' : '';

Можно ли получить выбранное значение в БД? Является ли переменная $ exam действительным именем элемента select?

Спасибо Шейн

1 ответ1

0

Да, есть возможность получить данные в базу данных - вы можете оставить эту строку, и она все равно будет передавать ее в базу данных.

Переменная "экзамены" представляет собой структуру массива, содержащую все параметры для отображения на экране. Это не имя элемента select. Элемент выбора определяется именем = "экзамен" в первой строке, то есть это "экзамен".

Раньше я не сталкивался с рассматриваемой строкой, но она достаточно четко устанавливает поле "выбранные" для определенного параметра. Это "выбранное" поле затем используется по умолчанию, но, кроме того, оно отображается в качестве параметра по умолчанию, оно не имеет значения, когда форма фактически отправлена.

Давайте разберем элементы вашего кода, относящиеся к веб-запросу:

Значение в начале определяет, что поле является полем выбора. Поля name, id и style используются для форматирования внешнего вида страницы, поэтому они не имеют отношения к отправке данных назад.

Это определяет опцию выпадающего в поле поля, чтобы быть пустым первоначально. Предположительно это используется, если кто-то не пытался заполнить форму раньше.

   <?php foreach($exams as $key=>$option):
      $selected = ($exam == $key) ? 'selected' : '';
      echo "<option value='$key' $selected>$option</option>";
   endforeach; ?>

Вот где это становится интересным. $ exams почти наверняка будет массивом, поэтому структура переменной - ниже будет пример возможной структуры, которую я буду использовать для своего ответа.

$exams['English']='English 101';
$exams['Maths']='Calculus';
$exams['Science']='Lab Experiments';

"Foreach" говорит PHP пройти через каждый элемент в массиве, определяя ключ и значение опции.

Таким образом, в первый раз, когда он зацикливается (учитывая мой массив) выше, в первый раз через цикл, $ key будет "английским", а значение будет "английским 101". Во второй раз $ key будет "Maths", значение будет "Calculus" и так далее.

echo "<option value='$key' $selected>$option</option>";

записывает HTML-код, поэтому при просмотре в браузере он будет выглядеть как английский.

После этого в браузере будут отображены "Английский 101", "Исчисление" и "Лабораторные эксперименты", но при отправке формы будет добавлено значение "Английский", "Математика" или "Наука", в зависимости от того, что было выбрано. ,

$ selected не будет (я предполагаю) не использоваться при первом отображении страницы, однако, если страница была просмотрена и отображается обратно пользователю - например, если она провела некоторую проверку ошибок и обнаружила ошибки, но хочет чтобы показать форму в том виде, в котором она была получена - тогда для $ selected будет выбрано значение "selected" для опции, выбранной пользователем ранее, в противном случае она будет пустой. Это скажет браузеру показать соответствующее поле.

Предполагается, что endforeach завершает итерацию. (Синтаксис, используемый здесь, снова отличается от того, что типично - обычно вы просто используете фигурные скобки).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .