Как сначала отобразить ранее выбранную опцию в выпадающем списке?

#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