Значение параметра берется из базы данных и включается в поле выбора вместе с другими параметрами. Как я могу установить значение, взятое из базы данных, как выбранное?
Значение из базы данных устанавливается как $ 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’, и цикл for для каждого вызывает параметры как $ view => $ value. $ view представляет поле имени, в этом случае «Large», а $ value представляет поле значения «l». Это важно, если вы ожидаете, что пользователь увидит другие параметры в поле выбора, чем те, в которых установлены значения.
Затем мы создаем переменную $ selected, которая будет использоваться для определения соответствия между $ row [‘value’] и $ 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’] $ 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
ака conditional operator
ака shorthand if/else
ака inline conditon
, Идти Вот для дальнейшего чтения и примеров.
Используя двойные кавычки "
Вам не нужно переключаться между литеральными строками и переменными. * Вы должны будете избегать двойных кавычек, которые вложены в строку, добавляя \
, * Переменные могут быть заключены в фигурные скобки, чтобы изолировать их имя от окружающего текста. * Одинарные кавычки не будут отражать значение переменной.) Для продолжения читайте о цитировании: ссылка
Используя ,
(запятые) вместо .
(точки), чтобы объединить строку, производительность увеличивается. один тест
Добавляя только пробел перед selected
атрибут в true
условие (вместо добавления пробела вне условия на каждой итерации) вы избегаете создания ненужных пробелов внутри тега.
Используя встроенный оператор условия, вы избегаете ненужного объявления переменной в глобальной области видимости. Если вы объявите selected
string как переменная, как и @ independent.guru, она будет объявлена / перезаписана и использована только один раз на каждой итерации; это может только снизить производительность.
У каждого программиста будут свои предпочтения в отношении «читабельности», «краткости», «согласованности» и «производительности», и он может выбрать создание своего 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 открыт:
Исходный код будет выглядеть так:
<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>