使“选择”框将数据库条目设置为在 PHP 中选定


Making Select Boxes Have Database Entry Set As Selected in PHP

如何根据$genre变量中存储的值将"selected"属性设置为这些框之一?

即如果$genre=="拼图",则

<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>

此外,对于额外的布朗尼点,这将如何适用于具有"多个"属性的选择框?

任何帮助或想法将不胜感激。

嗯,这其实很简单:

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

如果设置了值,只需使用三元运算符(condition) ? true:false输入"selected"。只需在所有选项上复制该逻辑:

<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>

希望对您有所帮助!

您可以使用 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。

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

我想出了一个将所有内容都保留在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变量作为字符串传递。在我的示例中的查询中修复了这个问题。

与其使用纯 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语句选择该选项。