PHP - 从 $_POST 表单提交创建变量以避免未定义索引的正确方法

PHP - Correct way to create variables from $_POST form submissions to avoid Undefined Index

我正在 PHP 中创建联系表。在我用来处理电子邮件的 PHP 脚本中,我根据提交的表单字段定义变量。所有这些表单字段都是必需的,因此它们将始终存在。目前我正在这样设置变量:

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

这工作正常,但如果我打开了错误报告,我最终会得到 Notice: Undefined index: first-name

如果我这样设置变量,我不会得到未定义的索引:

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

但这样做感觉不对,因为我基本上是为每个输入添加 2 行代码。这是避免 Undefined index 错误的唯一方法吗?定义这些变量的正确方法是什么,特别是知道它们都是必填字段,所以它们总是 "set?"

But it doesn't feel right...

是的,男人必须做男人必须做的事。

你所能做的就是将其简化为

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

如果您正在使用 PHP > 7.x.x,您可以使用 null coalescing operator,它将提供与上述 相同的 结果 是专门为牢记这种情况而构建的。

所以我说这在可用性方面胜。感谢@Cid 提到这一点。

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

根据输入的数量,使用三进制仍然很乏味。有很多方法可以做到这一点。一种方法是定义必填字段并检查是否已设置所有字段:

$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

如果您作为开发人员并且应用程序需要设置输入,那么大多数字段(文本、密码、select 等)即使为空也将默认设置。检查它们是否未设置或是否为空:

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