PHP -将值发送到另一个验证PHP文件后,将值保留在select下拉框中


PHP - Keep values in select dropdown after values are sent to another validation PHP file

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

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

表单使用$_SESSION保存从register- value .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'] = '';
}

问题是,当$_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.
}