我正在从我的数据库中打印一个选择列表。
以下是我的代码的一部分:
<form action="" method="post">
<div class="form-item">
<select name="specialties">
<?php
$query = "SELECT * FROM specialties";
$result = mysqli_query($connection, $query);
echo '<option value="All">' . $filterTitle . '</option>';
while($row = mysqli_fetch_assoc($result)) {
$id = $row['id'];
$title = $row['title_'. $lang];
if($_POST['specialties'] == $id) {
$selected = 'selected';
}
echo '<option value="' . $id . ' "' . $selected . '>' . $title . '</option>';
}
?>
</select>
</div>
<div class="form-item">
<input class="form-submit" type="submit" name="submit" value="<?php echo $filterSubmit; ?>">
</div>
</form>
在我选择某些选项时,在此表单中,它会过滤内容。这工作正常,我不需要发布该部分代码。
首先,当我从选择列表中选择一些选项并在提交后,它会过滤内容,但是选择选项会显示所有值,而不是所选选项。之后我尝试使用上面的代码,现在当我提交表单时,选择值显示最后一个选项,所有选项都有selected
属性。
如何更改该逻辑,因此当我选择让我们说第二个选项时,在提交表单后,selected
属性将仅出现在第二个选项上,因此文本将是第二个选项?< / p>
结论: 谢谢你们的回答。你们都是对的。我给了你所有的+1,我选择了Hassaan的答案,因为它得到了很好的解释。
答案 0 :(得分:1)
添加else
子句以将selected
属性重置为空字符串。
if($_POST['specialties'] == $id) {
$selected = 'selected';
}
else{
$selected = '';
}
答案 1 :(得分:1)
您需要每次都选择空的选定变量,如下所示
while($row = mysqli_fetch_assoc($result)) {
$selected = '';
$id = $row['id'];
$title = $row['title_'. $lang];
if($_POST['specialties'] == $id) {
$selected = 'selected';
}
echo '<option value="' . $id . ' "' . $selected . '>' . $title . '</option>';
}
答案 2 :(得分:1)
目前,您正在检查/比较值和生成变量。您需要使用else
条件,因为您必须更改/重置生成变量的值。请参阅下面的示例。
if($_POST['specialties'] == $id) {
$selected = 'selected';
}
else
$selected = '';