我正在尝试在注册表单上两次验证电子邮件,为了做到这一点,我试图通过运行“空”功能或两个字段来检查实际的电子邮件字段是否为空 - 但出于某种原因,它不接受它,它抱怨意外的'('
这是一行:
if (empty(($_POST['e-mail']) OR ($_POST['e-mail2']))) {
$error[] = 'Please Enter your Email ';
}
任何人都知道为什么我会得到它以及如何解决它?
答案 0 :(得分:0)
尝试:
if (empty($_POST['e-mail']) || empty($_POST['e-mail2'])) {
$error[] = 'Please Enter your Email ';
}
您可能还希望包含isset()
函数,以确保在检查值之前实际设置了POST键。
修改强>
为了清楚起见,我会在这里发布一个编辑。如果要验证值的存在以及输入的一个值是否等于另一个值,则需要进行两次完整性检查:
// Check existence of values
if (empty($_POST['e-mail']) || empty($_POST['e-mail2'])) {
$error[] = 'Please Enter your Email ';
}
// Check equivalence
if ($_POST['e-mail'] != $_POST['e-mail2']) {
$error[] = 'Your e-mails do not match';
}
答案 1 :(得分:0)
你将逻辑表达式传递给empty(),这显然是错误的 你需要分别检查两个变量
if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
$error[] = 'Please Enter your Email ';
}
答案 2 :(得分:0)
你的意思是:
if (empty($_POST['e-mail']) OR empty($_POST['e-mail2']))
PHP无法猜测,它只是评估你的表达式:
if (empty(($_POST['e-mail']) OR ($_POST['e-mail2'])))
if (empty('value_of_email1' OR 'value_of_email1' ))
if (empty( true ))
if ( false )
如果一个提交的值 truthish (即非空),则OR表达式仍会计算为true
。
答案 3 :(得分:0)
我认为你不能在empty()
方法中使用逻辑表达式。
尝试将逻辑表达式分离为两个单独的empty()
方法调用。
尝试:
if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
$error[] = 'Please Enter your Email ';
}
有关empty()
的更多信息,请查看PHP manual on empty()。
答案 4 :(得分:0)
为后人......
$email1 = filter_var('aaa@email.com', FILTER_VALIDATE_EMAIL);
$email2 = filter_var('aaa@email.com', FILTER_VALIDATE_EMAIL);
$unmatched1 = filter_var('aaa@emil.com', FILTER_VALIDATE_EMAIL);
$unmatched2 = filter_var('aab@email.com', FILTER_VALIDATE_EMAIL);
$invalid1 = filter_var('aaa.com', FILTER_VALIDATE_EMAIL);
$invalid2 = filter_var('email.com', FILTER_VALIDATE_EMAIL);
$empty = filter_var('', FILTER_VALIDATE_EMAIL);
var_dump(!$email1 || $email1 !== $email2);
var_dump(!$email1 || $email1 !== $unmatched2);
var_dump(!$unmatched1 || $unmatched1 !== $email2);
var_dump(!$email1 || $email1 !== $invalid2);
var_dump(!$invalid1 || $invalid1 !== $email2);
var_dump(!$email1 || $email1 !== $empty);
var_dump(!$empty || $empty !== $email2);
给出:
bool(false) // Desired in validation...
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
https://ignite.io/code/511f8bf8ec221e7f21000000
因此,如果您将var_dump
替换为if
并简化e-mail2
(无需验证):
$email = filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL);
if (!$email || $email !== $_POST['e-mail2']) {
// error stuff, including separate check on empty.
}