html — Создание блоков выбора, в которых запись в базу данных установлена ​​как выбранная в переполнении стека

Как мне установить атрибут «selected» для одного из этих полей, основываясь на том, какое значение хранится в переменной $ genre?

т.е. если $ genre == «Puzzle», то

<option value=Puzzle>

становится

<option value=Puzzle selected>

Вот мой текущий код:

<?php
$query = "SELECT * FROM release_dates WHERE id = $id";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$genre = $row['game_genre'];
?><select name=genre>
<option value=Action>Action</option>
<option value=Adventure>Adventure</option>
<option value=Puzzle>Puzzle</option>
<option value=RPG>RPG</option>
<option value=Horror>Horror</option>
<option value=Shooter>Shooter</option>
<option value=Simulator>Simulator</option>
<option value=Sport>Sport</option>
<option value=Strategy>Strategy</option>
</select>

Кроме того, для дополнительных очков брауни, как это применимо к полям выбора с атрибутом «несколько»?

Любая помощь или идеи будут с благодарностью.

-1

Решение

Ну, это довольно просто на самом деле:

<option value=Action <?php $genre == "Action" ? "selected":""?> >Action</option>

Просто используйте троичный оператор (condition) ? true:false ввести «выбранный», если значение установлено. Просто продублируйте эту логику на всех опциях:

<option value=Action <?php $genre == "Action" ? "selected":""?> >Action</option>
<option value=Adventure <?php $genre == "Adventure" ? "selected":""?> >Adventure</option>
<option value=Puzzle <?php $genre == "Puzzle" ? "selected":""?> >Puzzle</option>
<option value=RPG <?php $genre == "RPG" ? "selected":""?> >RPG</option>

Надеюсь, это поможет!

2

Другие решения

Вы могли бы использовать foreach цикл для перебора ваших опций, и каждый раз выполняйте проверку с помощью оператора if, чтобы увидеть, соответствует ли он:

foreach ($genres as $genre) {
if ($genre === "Puzzle") {
echo '<option value="'.$genre.'" selected>'.$genre.'</option>';
else {
echo '<option value="'.$genre.'">'.$genre.'</option>';
}
}

Кстати, вы не должны использовать mysql_* функционирует больше, поскольку они небезопасны, осуждается, и будет удален из PHP в будущем. Взгляни на PDO.

1

<option value="Strategy" <?php if($genre == "Strategy"){ echo 'selected="selected"';} ?> >Strategy</option>
1

Я придумал версию, которая хранит все в PHP

<?php
$query = "SELECT * FROM release_dates WHERE id = ". $id;
$result = mysql_query($query);
$row = mysql_fetch_array($result);

// possible options
$genre_options = array(
'Action'
'Adventure'
'Puzzle'
'RPG'
'Horror'
'Shooter'
'Simulator'
'Sport'
'Strategy'
);

// loop over the options, and wrap them in tags
$options = '';
foreach ($genre_options as $genre) {

// check if we have a match
$selected = '';
if ($genre == $row['game_genre']) {
$selected = 'selected="selected"';
}

$options .= '<option value="'. $genre .'" '. $selected .'>'. $genre .'</option>'
}

echo '
<select name=genre>
'. $options .'
</select>
';
?>

Это создает массив возможных жанров, зацикливает их и проверяет, соответствует ли какой-либо из них жанру, возвращенному в запросе. Если это так, он добавит selected="selected" приписывать.

К сожалению, мне не хватит «очков брауни», потому что я не могу помочь вам с множественным выбором.

Позвольте мне знать, если это помогает!

РЕДАКТИРОВАТЬ: Я также отметил, что в вашем запросе вы где проходили $id переменная как строка. Исправлено это в запросе в моем примере.

1

Вместо того, чтобы определять свои жанры, используя обычный HTML, создайте массив со всеми вашими жанрами.

Для этого:

$genres = array(
"Action",
"Adventure",
"Puzzle",
"RPG",
"Horror",
"Shooter",
"Simulator",
"Sport",
"Strategy");

foreach($genres as $currentGenre) {
echo "<option value="'.$currentGenre.'" '.($currentGenre == $genre ? "selected" : "").'>'.$currentGenre.'</option>';
}

Что это делает, это перебрать все ваши жанры и создать единый <option> для каждого из них. Если $currentGenre (так один из жанров из массива $genres) Матчи $genre (который вы извлекли из MySQL), он выбирает эту опцию, используя встроенный оператор if.

0
По вопросам рекламы [email protected]