使用php提交表单后保持选择的值

Posted

技术标签:

【中文标题】使用php提交表单后保持选择的值【英文标题】:Keeping values selected after form submission with php 【发布时间】:2016-02-29 11:29:53 【问题描述】:

我想在提交表单后保留选定的值,正如 @ignacio-vazquez-abrams 建议的 here。我试过这个:

<form action="" method="get">
    ...
    foreach ($file_array as $location)
        $options .= '<option name="' . $location . (($_GET['name'] == $location) ? 'selected="true"' : '') . '" value="' . $location . '">' . $location .'</option>';
    $select = '<select id="location" name="location">' . $options . '</select>';
    echo $select;
    ...
</form>

但我收到了通知:

注意:未定义的索引:...中的名称

更新

比我尝试过的(如 cmets 中所建议的那样,我如何推荐 here):

$options .= '<option name="' . $location . (!isset($_GET['selected']) ? 'selected="selected"' : '') . '" value="' . $location . '">' . $location .'</option>';

没有错误,但仍然没有产生预期的结果 - 表单提交后选择的值不会保留。

如何做到这一点?

【问题讨论】:

你的表单标签是什么样子的? method="post"method="get" name= 应该是selected= 它为Undefined index: name 抛出一个错误,所以检查你是否在$_GET 中获得了价值,还有name 属性不是option,而是select @swidmann 我更新了问题。 php: "Notice: Undefined variable" and "Notice: Undefined index"的可能重复 【参考方案1】:

实际上为此添加正确答案还有很多缺失,但无论如何我都会尝试。

PHP 位置数组:

$locations = array( 'Loc1', 'Loc2', 'Loc3' );

在表格上:

<form action="" method="get">
    <select name="location">
        <?php 
            foreach ( $locations as $location ) 
                echo '<option value="' . $location . '" ' . ( isset( $_GET['location'] ) && $_GET['location'] == $location ? 'selected="selected"' : '' ) . '>' . $location . '</option>';
            
        ?>
    </select>
</form>

首先,无法确定您发布的值是值name。我记得选项没有 name 属性,它必须是一个包含属性名称的选择,并且您将 selected="true" 放在 name 属性中,您首先没有正确关闭(这是不存在)。

【讨论】:

对不起!我用缺失的数据更新了问题,但你还是猜到了。在未来的问题中,我会更加小心,我将包括所有必要的信息。现在代码按预期工作!非常感谢? 另一种方法使用js - ***.com/a/16458797/4050261【参考方案2】:

您正在使用 PHP 的严格模式,因此您需要检查 GET 参数是否已通过(通过使用 isset()),然后再将其值与某物进行比较。

<form action="" method="get">
    <select id="location" name="location">
        <?php foreach($file_locations as $location): ?>    
        <option <?php echo ((isset($_GET['location']) && $_GET['location'] == $location) ? 'selected="selected"' : '') ?> value="<?php echo $location ?>"><?php echo $location ?></option>
        <?php endforeach; ?>
    </select>
</form>

您还需要写selected="selected" 或只写selected 而不是selected="true"

【讨论】:

以上是关于使用php提交表单后保持选择的值的主要内容,如果未能解决你的问题,请参考以下文章

即使在php中提交表单后也保持选中值[重复]

php一个表单提交多个页面,怎样获取按钮提交过来的值

提交表单后保持单选按钮处于选中状态

表单提交后选中的复选框保持选中/未选中状态

一道有关ASP提交表单的问题,不知道为啥提交后,后是收不到表单的值

表单提交中的重复问题(表单令牌验证)