【问题标题】:PHP - Keep values in select dropdown after values are sent to another validation PHP filePHP - 将值发送到另一个验证 PHP 文件后,将值保留在选择下拉列表中
【发布时间】:2014-08-14 22:54:50
【问题描述】:

我有一个在另一个文件 (register-val.php) 中验证的 PHP (register.php) 表单。如果有错误或数据不完整,用户将被发送回 register.php 以修改错误。

我有输入和下拉菜单的混合。如果有错误或数据不完整,用户将被发送回 register.php 以修改错误。

表单使用 $_SESSION 保存从 register-val.php 传输的数据。虽然这适用于输入,但这并不完全适用于下拉菜单。下拉菜单选择有效,但我的 error_log 中出现错误。这是一个示例下拉菜单。

<select id="gender" name="gender" tabindex="auto"/>
<option <?php if(($_SESSION['gender']) == '') { echo 'selected="selected"';}  ?> value="">Select gender</option>
<option <?php if(($_SESSION['gender']) == 'Male') { echo 'selected="selected"';}  ?> value="Male">Male</option>
<option <?php if(($_SESSION['gender']) == 'Female') { echo 'selected="selected"';}  ?> value="Female">Female</option>
<option <?php if(($_SESSION['gender']) == 'Other') { echo 'selected="selected"';}  ?> value="Other">Other</option>
</select>

这是我尝试过的:

<?php if(!empty($_SESSION['gender'])){unset($_SESSION['gender']);} //To destroy session if there isn't any ?>

在代码中

<select id="gender" name="gender" tabindex="auto"/>
<option <?php if(($_SESSION['gender']) == '') { echo 'selected="selected"';}  ?> value="">Select gender</option>
<option <?php if(($_SESSION['gender']) == 'Male') { echo 'selected="selected"';}  ?> value="Male">Male</option>
<option <?php if(($_SESSION['gender']) == 'Female') { echo 'selected="selected"';}  ?> value="Female">Female</option>
<option <?php if(($_SESSION['gender']) == 'Other') { echo 'selected="selected"';}  ?> value="Other">Other</option>
</select>

当我刷新页面以从头开始输入详细信息时,我的错误日志中出现以下错误,每次我没有选择一个选项。

未定义索引:性别

请问我该怎么办?

解决方案感谢 wookie919

if (array_key_exists('gender', $_SESSION)) {
    if ($_SESSION['gender'] == '') {
        $_SESSION[''] = 'Male';
    }
    elseif ($_SESSION['gender'] == 'Male') {
        $_SESSION['gender'] = 'Male';
    }
    elseif ($_SESSION['gender'] == 'Female') {
        $_SESSION['gender'] = 'Female';
    }
    elseif ($_SESSION['gender'] == 'Other') {
        $_SESSION['gender'] = 'Other';
    }
}
else {
    $_SESSION['gender'] = '';
}

【问题讨论】:

    标签: php html


    【解决方案1】:

    问题是当$_SESSION['gender'] 不存在时,您尝试访问$_SESSION['gender']

    因此在尝试访问$_SESSION['gender']之前,请检查索引'gender'是否存在于$_SESSION中:

    if (array_key_exists('gender', $_SESSION)) {
        // $_SESSION['gender'] exists
        if ($_SESSION['gender'] == 'Male') {
        }
        // etc, etc,
    }
    else {
        // $_SESSION['gender'] does not exist, so don't try to access it.
    }
    

    【讨论】:

    • @user2333968 抱歉,我不完全理解您对 else 语句的不理解。 $_SESSION['gender'] 仅在初始化后才开始存在,可能是通过为其分配一个值,例如$_SESSION['性别'] = '男性';所以如果 $_SESSION['gender'] 不存在,那对你意味着什么?这是您必须考虑并妥善处理的事情。例如,当 $_SESSION['gender'] 不存在时是否应该选择“选择性别”?
    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 2013-02-10
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多