Многомерный массив $ _SESSION в NULL - PullRequest
0 голосов
/ 12 января 2020

Выполняется PHP 7.x

Я использую несколько массивов $ _SESSION следующим образом:

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

Существует несколько полей 'form_field' для каждый 'form_data'.

Этот $ _SESSION устанавливается только если данные формы были изменены. Как я могу установить $ _SESSION в NULL, если он пуст, без необходимости go через каждый из них в отдельности?

Я пробовал $ _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']) ?>" />

1 Ответ

0 голосов
/ 12 января 2020

Скрытие предупреждений или ошибок не является хорошей практикой. Возможно, вам нужно будет использовать 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)
...