我试图在注册表单上验证电子邮件两次,为了做到这一点,我试图首先通过运行“空”功能或两个字段来检查实际的电子邮件字段是否为空 - 但对于某些因为它不会接受它,它抱怨意外的'('
这是行:
if (empty(($_POST['e-mail']) OR ($_POST['e-mail2']))) {
$error[] = 'Please Enter your Email ';
}
任何人都知道我为什么会得到它以及如何解决它?
我试图在注册表单上验证电子邮件两次,为了做到这一点,我试图首先通过运行“空”功能或两个字段来检查实际的电子邮件字段是否为空 - 但对于某些因为它不会接受它,它抱怨意外的'('
这是行:
if (empty(($_POST['e-mail']) OR ($_POST['e-mail2']))) {
$error[] = 'Please Enter your Email ';
}
任何人都知道我为什么会得到它以及如何解决它?
尝试:
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';
}
您将逻辑表达式传递给 empty(),这显然是错误的
,您需要分别检查这两个变量
if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
$error[] = 'Please Enter your Email ';
}
你的意思是:
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 )
如果提交的值之一是真实的(即非空),则 OR 表达式的计算结果仍为true
。
我认为您不能在empty()
方法中使用逻辑表达式。尝试将逻辑表达式分离为两个单独的empty()
方法调用。
尝试:
if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
$error[] = 'Please Enter your Email ';
}
有关 的更多信息empty()
,请查看有关 empty() 的 PHP 手册。
为后人...
$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.
}