Как заставить в настоящее время выбираемый объект выпадающего меню быть предварительно выбранным из базы данных?

Я попробовал это самостоятельно, но не мог заставить это работать правильно. В основном я делаю страницу редактирования, где ранее отправленное сообщение может быть отредактировано. На этой новой странице форма предварительно заполняется с ранее отправленными данными. Одной из вещей, которая была выбрана ранее, была категория от выпадающего. Я пытаюсь иметь, это ранее 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>

Где это должно только запуститься и закончиться в бейсболе, вместо этого это запускается там и заканчивается в последнем пункте меню, настолько естественно, который тот, который предварительно выбран.

Как зафиксировать это?

1
задан James 26 June 2010 в 18:43
поделиться

3 ответа

Ваш код полностью верен во всех отношениях, за исключением того, что вы забыли сбрасывать $ selected в каждом цикле.

$selected = '';
if ($catId == $chosenCategory) {
    $selected = "selected='selected'";
}
1
ответ дан 2 September 2019 в 23:28
поделиться

просто добавьте

$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

1
ответ дан 2 September 2019 в 23:28
поделиться
while($row = mysql_fetch_array($result)){
    $preSelect = ($value == $preSelect)? "selected='selected'" : null;
    echo "<option value='someValue' ".$preSelect.">SomeOption</option>";
}
0
ответ дан 2 September 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: