PHP - правильный способ создания переменных из представлений формы $ _POST, чтобы избежать неопределенного индекса - PullRequest
0 голосов
/ 31 января 2019

Я создаю контактную форму на PHP.В сценарии PHP, который я использую для обработки электронной почты, я определяю переменные на основе отправленных полей формы.Все эти поля формы являются обязательными, поэтому они всегда будут существовать.В настоящее время я устанавливаю переменные следующим образом:

$fName = $_POST['first-name'];

Это работает нормально, но если у меня включен отчет об ошибках, я получаю Notice: Undefined index: first-name

Если я установил переменнуювот так, я не получаю неопределенный индекс:

if (isset($_POST['first-name'])) {
    $fName = $_POST['first-name'];
}

Но делать это неправильно, потому что я в основном добавляю 2 строки кода для каждого ввода.Это единственный способ избежать ошибки Undefined index?Как правильно определить эти переменные, особенно зная, что все они являются обязательными полями, поэтому они всегда будут «установлены»?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

В зависимости от количества входов он все еще может быть утомительным с троичным.Есть много способов сделать это.Одним из способов является определение обязательных полей и проверка того, что все они установлены:

$required = array('first-name', 'last-name');

if(array_diff($required, array_keys($_POST)) {
    //all required fields not set, die or redirect or something
}
// then use $_POST vars as normal

Если вы как разработчик и приложение требует ввода данных, тогда большинство полей (текст, пароль, выберите и т. Д.)будет по умолчанию, даже если они пусты.Чтобы проверить, не установлены ли они или они пусты:

if(array_diff($required, array_keys(array_filter($_POST))) {
    //all required fields not set or empty, die or redirect or something
}
// then use $_POST vars as normal
0 голосов
/ 31 января 2019

Но это не правильно ...

Да, мужчина должен делать то, что должен делать человек.

Все, что вы можете сделать, это упростить этокак

$fName = isset($_POST['first-name'])? $_POST['first-name'] : '';

Если вы используете PHP > 7.x.x, вы можете использовать нуль-оператор объединения , который обеспечит такой же результат, как указано выше и был создан специально для этого сценария.

Итак, я говорю, что выигрывает с точки зрения удобства использования.Спасибо @Cid за упоминание этого.

$fname = $_POST['first-name'] ?? '';
...