假设我的表单包含一个下拉列表,该列表由我的数据库中存储的值填充:
<form action="" method="POST">
<select name="item_select">
<?php
$query = "SELECT * FROM my_table ORDER BY name";
$result = mysql_query($query);
while ($row = mysql_fetch_object($result)) {
?>
<option value=<?php echo $row->id; ?> > <?php echo $row->name; ?></option>
<?php }// end while?>
</select>
<br /><br />
<input name="action_1" type="submit" value="Action 1" />
<input name="action_2" type="submit" value="Action 2" />
</form>
这一切都很好,但我有一个小的审美问题,我想看看我是否可以解决。特别是每次提交表单时,下拉列表会选择列表中的第一项,无论我选择哪一项。例如。
List:
Item1 (selected)
Item2
我选择了Item2并提交了表单,在页面提交后仍然是
List:
Item1 (selected)
Item2
有没有办法让下拉列表“记住”选择了哪个项目?例如,提交Item2表单后所需的效果应为。
List:
Item1
Item2 (selected)
答案 0 :(得分:2)
只需将提交的值与for循环中的当前值进行比较:
<option value="<?php echo $row->id ?>" <?php echo $row->id == $_POST['item_select'] ? 'selected' : '' ?> ><?php echo $row->name ?></option>
答案 1 :(得分:1)
就我个人而言,我有一个功能可以为你做所有这些选择,复选框和无线电输入。但是,只有你需要多次这样做。例如:
function checker($type, $positive, $value) {
if ($type == 'radio') {
if ($positive == $value) {
$bool = 'CHECKED';
}
}
if ($type == 'checkbox') {
if ($positive == $value) {
$bool = 'CHECKED';
}
}
if ($type == 'select') {
if ($positive == $value) {
$bool = 'SELECTED';
}
}
return $bool;
}
使用如下:
<select name="item_select">
<?php
$query = "SELECT * FROM my_table ORDER BY name";
$result = mysql_query($query);
while ($row = mysql_fetch_object($result)) {
?>
<option value=<?php echo $row->id; ?> <?=checker('select', $row->id, $_POST['item_select'])?>> <?php echo $row->name; ?></option>
<?php }// end while?>
</select>
如果您只需要执行此操作,那么这就太过分了,但您应该能够遵循原则并将其应用到您的代码中。
答案 2 :(得分:0)
尝试以下方法:
<option value="<?php echo $row->id ?>" <?php echo $row->id == $_POST['item_select'] ? "selected='selected'" : "" ?> ><?php echo $row->name ?></option>