HTML选择表格保持下拉值PHP

时间:2012-03-26 14:59:49

标签: php html forms

假设我的表单包含一个下拉列表,该列表由我的数据库中存储的值填充:

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

3 个答案:

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