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
我正在 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