#php #option
#php #html-выберите
Вопрос:
Я использую следующий фрагмент ниже. Сначала я запрашиваю базу данных, чтобы увидеть все доступные параметры, но это для формы редактирования, поэтому я хочу, чтобы в выпадающем списке отображалось ранее выбранное значение, поэтому я выполнил другой запрос и получил выбор. Когда я делаю это так, как у меня есть ниже, он будет продолжать повторять ранее выбранный выбор после каждого доступного параметра. Как это исправить?
<option>Select Sales rep</option>
<?php
$query="select agent_id, agent_name from agent_names where agent_id='$ad'
order by agent_name asc";
$result=mysql_query($query);
while(list($agent_id, $agent_name)=mysql_fetch_row($result)) {
echo "<option value="".$previousname."">".$previousselection."</option>
<option value="".$agent_id."">".$agent_name."</option>";
}
?>
Ответ №1:
Просто проверьте, $agent_id
равно $previousname
(возможно, вы имеете в виду $previousid
?) и echo selected = «выбрано», если это так:
while(list($agent_id, $agent_name)=mysql_fetch_row($result)) {
$selected = $agent_id == $previousname;
echo "<option " . ($selected ? "selected="selected"" : "") . " value="".$agent_id."">".$agent_name."</option>";
}
Другой вариант — вывести предыдущий выбранный элемент перед циклом while и исключить его в вашем sql-запросе.
Ответ №2:
вы должны убрать предыдущий выбор из while.. вот так:
<?php
$query="select agent_id, agent_name from agent_names where agent_id='$ad'
order by agent_name asc";
$result=mysql_query($query);
echo "<option value="".$previousname."">".$previousselection."</option>";
while(list($agent_id, $agent_name)=mysql_fetch_row($result)) {
echo "<option value="".$agent_id."">".$agent_name."</option>";
}
?>
и, возможно, даже добавить if, чтобы он не повторялся самостоятельно:
$query="select agent_id, agent_name from agent_names where agent_id='$ad'
order by agent_name asc";
$result=mysql_query($query);
echo "<option value="".$previousname."">".$previousselection."</option>";
while(list($agent_id, $agent_name)=mysql_fetch_row($result)) {
if ($agent_id != $previousname) {
echo "<option value="".$agent_id."">".$agent_name."</option>";
}
}
?>
Ответ №3:
Вы можете заставить MySQL возвращать желаемый результат первым в списке следующим образом:
$query = "SELECT agent_id, agent_name FROM agent_names WHERE agent_id='$ad'
ORDER BY agent_id = '{$previousname}' DESC, agent_name ASC";
Это сначала указывает MySQL на сортировку по agent_id
соответствию предыдущему выбору (т. Е. это будет 1
для ранее выбранной записи и 0
для всех остальных, следовательно, сортировка по ней DESC
делает ее первой в списке. И поскольку все остальные поля будут иметь значение, равное 0
, они будут отсортированы по второму полю, которое agent_name ASC