我有一个php文件,可为我验证一个简单的表单条目。我将每个错误(在验证期间发现的错误)分配给一个变量($ name_errors,$ phone_errors和$ email_errors)。这些变量中的每个变量都包含一个字符串(“请输入有效的姓名”,“请输入有效的电话号码”和“请输入一个有效的电子邮件地址”。然后,我创建一个包含这些变量的数组,称为$ errors。因此该数组看起来像这样
$errors = array($name_errors, $phone_errors, $email_errors);
一旦有了$ errors数组,我将通过一条if语句运行,如下面的代码所示。本质上,如果发现错误,则该语句应该对$ errors数组进行JSON_Encode并退出脚本。如果没有发现错误,脚本将继续发送邮件。我的问题是,无论数组为空(即包含通过Var_dump()确认的所有空值)还是包含实际错误值,if语句始终将其识别为包含数据,并且将停止上述脚本。不知道发生了什么。我很难解决此问题。任何帮助将不胜感激。
if ($errors != null){
var_dump($errors);
echo json_encode( $errors );
exit;
};
这是我从var_dump(array)获得的结果,JSON编码始终认为它不等于$ errors = null:
结果:[null,null,null] contact_form.htm:323:13
答案 0 :(得分:1)
充满null
值的数组不为空,也不等于null
。考虑一下:
$errors = [null, null, null];
echo $errors == null ? "true\n" : "false\n";
echo empty($errors) ? "true\n" : "false\n";
输出:
false
false
相反,您可以测试array_filter($errors)
的输出,如果$errors
中的所有值为空,则输出将为空数组:
echo empty(array_filter($errors)) ? "true\n" : "false\n";
输出:
true
因此,请尝试将代码更改为:
if (!empty(array_filter($errors))) {
答案 1 :(得分:1)
考虑这种替代方法:使用一个变量$errors = []
。在验证输入时,请添加该数组中相应键下发生的所有错误,例如
if (!validate($name)) {
$errors['name'] = 'Please enter a valid name';
}
然后,如果没有错误,则数组将为空,因此有条件地进行打印将变得更加简单。
if ($errors) { // empty array evaluates as false, non-empty as true
echo json_encode($errors);
exit;
}
将所有错误汇总在一个变量中,而不是使用单独的错误可能是有利的。一个是,当您添加另一个表单字段时,您将不必记住将其错误变量添加到收集所有不同错误变量的数组中。