Я попробовал это самостоятельно, но не мог заставить это работать правильно. В основном я делаю страницу редактирования, где ранее отправленное сообщение может быть отредактировано. На этой новой странице форма предварительно заполняется с ранее отправленными данными. Одной из вещей, которая была выбрана ранее, была категория от выпадающего. Я пытаюсь иметь, это ранее choden категория обнаруживается, поскольку значение по умолчанию выбрало один на этой выпадающей странице редактирования.
<select name="categories">
<?php
// get the category the post is assigned to
$query = mysql_query("SELECT category FROM posts");
while ($row = mysql_fetch_assoc($query)) {
$chosenCategory = $row['id'];
}
// display a drop down of all categories with the chosen category preselected
$query = mysql_query("SELECT * FROM categories");
while ($row = mysql_fetch_assoc($query)) {
$catId = $row['id'];
$catName = $row['name'];
if ($catId == $chosenCategory) {
$selected = "selected='selected'";
}
echo "<option value='$catId' $selected>$catName</option>\n";
}
?>
</select>
Проблема с моим кодом - это, вставляет выбранный ='selected' на каждом объекте опции, начинающем с присвоенной категории. Мне нужен он, чтобы просто быть вставленным в присвоенную опцию категории.
Так, например, предположите, что сообщение присвоено категории, названной "бейсболом", вот то, как текущая производительность смотрит:
<option value='someid'>Camping</option>
<option value='someid'>Grilling</option>
<option value='someid' selected='selected'>Baseball</option>
<option value='someid' selected='selected'>Swimming</option>
<option value='someid' selected='selected'>Extreme Frisbe</option>
<option value='someid' selected='selected'>Watching TV</option>
Где это должно только запуститься и закончиться в бейсболе, вместо этого это запускается там и заканчивается в последнем пункте меню, настолько естественно, который тот, который предварительно выбран.
Как зафиксировать это?
Ваш код полностью верен во всех отношениях, за исключением того, что вы забыли сбрасывать $ selected
в каждом цикле.
$selected = '';
if ($catId == $chosenCategory) {
$selected = "selected='selected'";
}
просто добавьте
$selected = "";
сразу после while. например так:
$query = mysql_query("SELECT * FROM categories");
while ($row = mysql_fetch_assoc($query)) {
$selected = "";
$catId = $row['id'];
$catName = $row['name'];
if ($catId == $chosenCategory) {
$selected = "selected='selected'";
}
echo "<option value='$catId' $selected>$catName</option>\n";
}
таким образом вы "сбрасываете" выбор на каждой итерации цикла while
while($row = mysql_fetch_array($result)){
$preSelect = ($value == $preSelect)? "selected='selected'" : null;
echo "<option value='someValue' ".$preSelect.">SomeOption</option>";
}