【发布时间】:2016-05-09 10:48:39
【问题描述】:
我正在从我的数据库中打印一个选择列表。
这是我的代码的一部分:
<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 属性只会出现在第二个选项上,所以文本将是第二个选项?
结论: 谢谢你们的回答。你们都是对的。我给了你们所有人+1,我选择了哈桑的答案,因为它解释得很好。
【问题讨论】:
-
这是因为您设置了一次 $selected 值,但您从未取消设置它。因此,在您的 if 语句成功后,所有后续选项也将设置为选中状态。尝试添加 else { $selected = ''; } 或具有相同效果的东西。
-
是的,我之前已经检查过其他人的答案,现在我知道缺少的差距。不管怎么说,还是要谢谢你。 :)