Как установить параметр из нескольких параметров или массива с разными значениями в представлениях, выбранных в поле выбора, используя PHP

Значение параметра берется из базы данных и включается в поле выбора вместе с другими параметрами. Как я могу установить значение, взятое из базы данных, как выбранное?

Значение из базы данных устанавливается как $ row ['value'] и равно s. В HTML варианты выглядят так …

<select name="select"> <option value='xxs'>Extra, Extra small</option> <option value='xs'>Extra small</option> <option value='s'>Small</option> <option value='m'>Medium</option> <option value='l'>Large</option> <option value='xl'>Extra Large</option> <option value='xxl'>Extra, Extra small</option> </select> 

Я хочу, чтобы параметр $ row ['value'] (Small) отображался при загрузке страницы … Это возможно?

Хорошая новость заключается в том, что это возможно, и на PHP очень просто. Сначала мы помещаем все наши параметры и их соответствующие значения в массив следующим образом:

 <?php $options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s','Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl'); 

Следуйте этому, открыв окно выбора и вызывая массив параметров в цикле foreach …

 echo '<select>'; foreach($options as $view=>$value){ 

Как вы могли заметить, массив содержит поля, которые выглядят как «Large» => 'l', и для каждого цикла вызывается для опций как $ view => $ value. $ view представляет поле имени, в этом случае «Large» и $ value представляют значение поля «l». Это важно, если вы ожидаете, что пользователь увидит различные опции в поле выбора, чем то, на что установлены значения.

Затем мы создаем переменную $ selected, которая будет использоваться, чтобы определить, существует ли соответствие между $ row ['value'] и значением $ …

 $selected=($row['value'] == $value)? "selected" : ""; 

Это то же самое, что использовать инструкцию if и else для установки переменной, но более короткую. В первом разделе после переменной задается, если $ row ['value'] равно $ value, если это так, то $ selected = "selected" else (:) $ ​​selected установлено в пустое.

Затем мы включим опции. Поскольку он находится в цикле foreach, нам нужна только одна строка, чтобы вставить все параметры …

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

Помните переменную $ selected на последнем шаге? Каждый раз, когда цикл foreach проходит через раздел массива параметров, установленный в начале, он проверяет, равен ли $ row ['value'] значение $. Если это так, то $ selected будет выбран как выбранный, и этот конкретный параметр будет отображаться при загрузке страницы. Он продолжается до остальной части массива до тех пор, пока все просмотры и значения не будут отсканированы и не вернут соответствующие параметры.

Наконец, мы закрываем цикл foreach и поле выбора …

 } echo '</select>'; 

И там у вас есть, автоматический способ сделать выбранную опцию выбора установленной как выбранную. Аналогичную схему можно использовать для флажков, радиоселекторов, вкладок и т. Д.

Полный код …

 <?php $options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s','Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl'); echo '<select>'; foreach($options as $view=>$value){ $selected=($row['value'] == $value)? "selected" : ""; echo '<option '.$selected.' value="'.$value.'">'.$view.'</option>'; } echo '</select>'; 

Учитывая этот массив, и это значение будет выбранным значением …

 $options=array('Extra, Extra small'=>'xxs','Extra small'=>'xs','Small'=>'s', 'Medium'=>'m','Large'=>'l','Extra Large'=>'xl','Extra, Extra Large'=>'xxl'); $selected='m'; // $selected can be swapped for $row['value'] as in the OP 

Существует несколько способов динамического создания тегов параметров внутри <select> и установки selected атрибута на одном из них.

Сначала однострочный внутри петли foreach:

 echo "<select name=\"select\">"; foreach($options as $text=>$value){ echo "<option value=\"$value\"",($selected==$value?" selected":""),">$text</option>"; } echo "</select>"; 

Этот кодовый блок использует ternary conditional operator aka conditional operator aka shorthand if/else aka inline conditon . Перейдите сюда для дальнейшего чтения и примеров.

  • Используя двойные кавычки, вы избегаете переключаться между буквальными строками и переменными. * Вам придется избегать двойных кавычек, вложенных внутри строки, путем добавления \ . * Переменные могут быть завернуты в фигурные скобки, чтобы изолировать их переменную имя из текста объемного звучания. * Одиночные кавычки не будут отражать значение переменной.) Для продолжения чтения о цитировании: ссылка

  • Используя , (запятые) вместо . (точки) для конкатенации строки, производительность увеличивается. один критерий

  • Добавляя пробел перед selected атрибутом в true состоянии (по сравнению с добавлением пространства вне условия на каждой итерации), вы избегаете создания ненужных пробелов внутри вашего тега.

  • Используя оператор inline condition, вы избегаете ненужного объявления переменной в глобальной области. Если вы объявите selected строку как переменную, как это делает GCRdev, она будет объявлена ​​/ перезаписана и использована только один раз на каждой итерации; это может только снизить производительность.

У каждого программиста будут свои предпочтения в отношении «удобочитаемости», «краткости», «согласованности» и «эффективности», и они могут выбрать, чтобы построить свой html, используя любую смесь вышеупомянутых методов.

Как правило, я не хочу объявлять переменную, которую я буду использовать только один раз. В моей личной иерархии предпочтений краткость , согласованность и производительность всегда появляются перед читабельностью .

Некоторые из вышеперечисленных моментов могут показаться микро-оптимизацией, но для канонического вопроса целесообразно включить обсуждение производительности, поскольку любой из перечисленных методов может быть скопирован непосредственно в проекты.

Если первый блок кода был слишком компактным, вот две другие версии, которые распространяют метод на несколько строк без генерации каких-либо дополнительных переменных:

Отдельный сокращенный if / else синтаксис:

 echo "<select name=\"select\">"; foreach($options as $text=>$value){ echo "<option value=\"$value\""; echo $selected==$value?" selected":""; echo ">$text</option>"; } echo "</select>"; 

Стандарт, если условный:

 echo "<select name=\"select\">"; foreach($options as $text=>$value){ echo "<option value=\"$value\""; if($selected==$value){ echo " selected"; } echo ">$text</option>"; } echo "</select>"; 

Все вышеперечисленные версии одного и того же метода создадут этот обработанный html:

Когда страница загружается:

введите описание изображения здесь

Когда элемент выбора открыт:

введите описание изображения здесь

Исходный код будет выглядеть так:

 <select name="select"><option value="xxs">Extra, Extra small</option><option value="xs">Extra small</option><option value="s">Small</option><option value="m" selected>Medium</option><option value="l">Large</option><option value="xl">Extra Large</option><option value="xxl">Extra, Extra Large</option></select> 

Это вкладка с исходным кодом для упрощения чтения:

 <select name="select"> <option value="xxs">Extra, Extra small</option> <option value="xs">Extra small</option> <option value="s">Small</option> <option value="m" selected>Medium</option> <option value="l">Large</option> <option value="xl">Extra Large</option> <option value="xxl">Extra, Extra Large</option> </select>