【问题标题】:Refilling a select box with POST data (php)用 POST 数据重新填充选择框(php)
【发布时间】:2009-08-17 21:57:50
【问题描述】:

我有一个显示 3 个选项的选择框:option1、option2、option3。当用户点击提交时,在 $_POST 我确实选择了值。有没有一种简单的方法可以重新显示选择框,突出显示所选选项而不在选项中重复?

也就是说,如果选择了option2并点击了提交,页面应该会再次显示option2被选中,option1和option 3在下方。

谢谢。

【问题讨论】:

    标签: php select


    【解决方案1】:
    <?php
    
        $arrValues = array(...);
    
        $selectedValue = (isset ($_POST['selectName']) ? $_POST['selectName'] : "");
    
    ?>
    <select name="selectName">
    <?php
        for ($i = 0; $i < count($arrValues); $i++)
        {
            $opts = ($arrValues[$i] == $selectedValue) ? ' selected="selected"': '';
            echo '<option value="' . $arrValues[$i] . '"' . $opts . '>' . $arrValues[$i] . '</option>';
        }
    ?>
    </select>
    

    【讨论】:

    • 你不应该在这样的 for 循环中使用count($arr)。每次迭代都会重新计算。为什么不直接使用 foreach?更简洁。
    • 这很好,马克,我可以说 for ($i = 0, $size = count($arrValues); ...) 或使用 foreach。我没有,因为我今天在 C#、Java、PHP 和 Javascript 中来来回回,并且不想考虑语法(阅读:我很懒惰)。 :)
    • 感谢您的回复,我最终服用了Chacha's + your ? :
    【解决方案2】:

    像这样创建您的选项。

    $options = array("optionvalue" => "Option Name");
    
    foreach($options as $value => $name)
    {
        if(isset($_POST['select_box']))
        {
            if($_POST['select_box'] == $value)
            {
                echo '<option selected="selected" value="'.$value.'">'.$name.'</option>';
                continue;
            }
        }
        echo '<option value="'.$value.'">'.$name.'</option>';
    }
    

    【讨论】:

    • 我很确定你把它搞砸了。您在所有分支上都写了 selected=selected ......为什么还有 3 个分支?!它要么被选中,要么未被选中。
    • 这有点低效的代码行。 @Jordan S. Jones 的解决方案在这方面要好一些。
    • 拥有$value =&gt; $name 比拥有它的方式更有意义。
    • 我认为foreach $value => $name 需要是$name => $value,但是谢谢
    【解决方案3】:

    当您生成选择框时,使用 POST 数据(如果可用)来选择被选中的项目(和/或对项目进行排序)。

    有点像:

    if($_POST["optval"] == $opt) $sel = "selected='selected'"; else $sel = "";
    print "<option value='$opt' " . $sel . ">$opt</option>";
    

    您自然会想要验证 POST 数据是否有效并且是否存在 (isset)。当然,假设您从 PHP 可访问的数据生成选择框,而不是静态定义它。

    【讨论】:

    • 已更新以消除 PHP 的可怕失败。
    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多