PHP и MySQLi - Показывать выбранное значение два раза в раскрывающемся списке
Я создал страницу своего профиля с отображением всех данных в форме из MySQL. Все данные правильно отображаются в форме, а также в раскрывающемся списке. Но проблема в том, что выбранное значение отображается два раза в списке опций.
Вот мой код:
<select class="form-control" name="country" id="country">
<option value="">Select Country
<?php
//Get country list from Country master
$qry = "select * from country_master";
//Execute query
$result = mysqli_query($conn, $qry);
//Assigned fetched array to $Country
while($country = mysqli_fetch_array($result))
{
echo "<option value='$country[1]'>$country[1]</option>";
//Compare User Country with country list. $row[4] is the country column in user table
if($row[4] == $country[1])
echo "<option value='$country[1]' selected='selected'>$country[1]</option>";
}
?>
</option>
</select>
5 answers
Вам нужно изменить свой код while
, как показано ниже:-
while($country = mysqli_fetch_array($result)){
//Compare User Country with country list. $row[4] is the country column in user table
if($row[4] == $country[1]){
echo "<option value='$country[1]' selected='selected'>$country[1]</option>";
}else{
echo "<option value='$country[1]'>$country[1]</option>";
}
}
Примечание: В вашем коде сначала создается опция, а затем проверяется условие, поэтому два раза будет отображаться выбранная опция.
Правильный ответ на проблему, с которой вы столкнулись, дает A-2-A.
Дополнительно
Вы размещаете все свои зацикленные параметры внутри опции "Выбрать страну". вы должны удалить последний тег </option>
перед тегом </select>
и переместить его после "Выбрать страну" следующим образом:
<option value="">Select Country</option>
Это должно устранить вашу проблему:
<select class="form-control" name="country" id="country">
<option value="">Select Country
<?php
//Get country list from Country master
$qry = "select * from country_master";
//Execute query
$result = mysqli_query($conn, $qry);
//Assigned fetched array to $Country
while($country = mysqli_fetch_array($result))
{
echo "<option value='$country[1]'".($row[4] == $country[1] ? " selected" : "").">$country[1]</option>";
}
?>
</option>
Проблема заключалась в том, что вы повторили выбранный вариант дополнительно к не выбранному варианту. Теперь он добавляет атрибут "выбранный", если этот параметр должен быть выбран. (В зависимости от вашего состояния)
Он должен быть настроен следующим образом:
<select class="form-control" name="country" id="country">
<option value="">Select Country
<?php
//Get country list from Country master
$qry = "select * from country_master";
//Execute query
$result = mysqli_query($conn, $qry);
//Assigned fetched array to $Country
while($country = mysqli_fetch_array($result))
{
//Compare User Country with country list. $row[4] is the country column in user table
if($row[4] == $country[1]){
echo "<option value='$country[1]' selected='selected'>$country[1]</option>";
}
else{
echo "<option value='$country[1]'>$country[1]</option>";
}
}
?>
</option>
</select>
Потому что вам нужно проверить, выбрано ли значение, а затем, если оно не отображается, соответствующим образом отобразите данные.
У вас есть две проблемы:
- использование опции внутри опции.
- во-вторых, вам просто нужно распечатать выбранный атрибут вместо полной опции печати.
Пример:
<option value="">Select Country
</option>
<?php
//Get country list from Country master $qry = "select * from country_master";
//Execute query
$result = mysqli_query($conn, $qry);
//Assigned fetched array to $Country
while($country = mysqli_fetch_array($result)) {
if($row[4] == $country[1]) {
$selected = 'selected=""';
}
else{
$selected = "";
}
?>
<option <?php echo $selected;?> value='<?php echo $country[1];?>'>
<?php echo $country[1];?>
</option>
<?php
}
?>