首页 > 解决方案 > 多维 $_SESSION 数组为 NULL

问题描述

运行 PHP 7.x

我以这种方式使用了一些 $_SESSION 数组:

$_SESSION['form_data']['form_field'] = $data;

每个“form_data”有多个“form_field”。

此 $_SESSION 仅在表单数据已更改时设置。如果 $_SESSION 为空,我如何将它设置为 NULL,而不必分别检查每个?

我试过 $_SESSION['form_data'] = NULL; 但是,这似乎不起作用。
如果 $_SESSION['form_data']['form_field'] 在页面上没有特别设置,它会引发警告。

我知道我可以毫无问题地隐藏警告,但我宁愿找出正确的方法来做到这一点。或者,隐藏警告的正确方法是什么?

谢谢,瑞克

+++++++++++++++++++++++++++++++++编辑添加添加代码++++++++++++ +++++++++++++++++++++

//Displays original data from database unless new data was submitted in form
function display_form_value($orig_data = NULL, $new_data = NULL) {
    if(trim($new_data) != NULL) {
        return $new_data;
    } else {
        return $orig_data;
    }
 }

在我的表单处理页面上:

$defineTopLink = $_POST['defineTopLinkFollow_1']; //Add'l security removed for clarity
if($defineTopLink != $define['TopLink']) { 
    //$define['TopLink'] is a value pulled from the database
    $_SESSION['form_data']['defineTopLink'] = $defineTopLink; }
    else { 
        $_SESSION['form_data']['defineTopLink'] = "";
    }

在表单页面上

<input 
    id="defineTopLink_1" 
    name="defineTopLink_1" 
    type="text" 
    value="<?= display_form_value($define['TopLink'], $_SESSION['form_data']['defineTopLink']) ?>" />

标签: phpsessionphp-7

解决方案


隐藏警告或错误不是一个好习惯。您可能需要做的可能是if(isset($_SESSION['form_data']['form_field']))在实际访问它之前使用它。

即使您对字段的描述并不完全清楚,如果您执行以下操作,您将得到您想要的

function getFormField($formData, $formField){
  if(isset($_SESSION[$formData][$formField]) {
    return $_SESSION[$formData][$formField];
  }
}

...
//somewhere else in your code

$formData = 'some_form_data';
$formField = 'some_field_name'

$formFieldValue = getFormField(formData,formField)

推荐阅读