0

我试图在注册表单上验证电子邮件两次,为了做到这一点,我试图首先通过运行“空”功能或两个字段来检查实际的电子邮件字段是否为空 - 但对于某些因为它不会接受它,它抱怨意外的'('

这是行:

if (empty(($_POST['e-mail']) OR ($_POST['e-mail2']))) {
    $error[] = 'Please Enter your Email ';
}

任何人都知道我为什么会得到它以及如何解决它?

4

5 回答 5

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';
}
于 2013-02-16T13:02:22.907 回答
0

您将逻辑表达式传递给 empty(),这显然是错误的
,您需要分别检查这两个变量

if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
    $error[] = 'Please Enter your Email ';
}
于 2013-02-16T13:09:32.573 回答
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                   )

如果提交的值之一真实的(即非空),则 OR 表达式的计算结果仍为true

于 2013-02-16T13:09:39.487 回答
0

我认为您不能在empty()方法中使用逻辑表达式。尝试将逻辑表达式分离为两个单独的empty()方法调用。

尝试:

if (empty($_POST['e-mail']) OR empty($_POST['e-mail2'])) {
    $error[] = 'Please Enter your Email ';
}

有关 的更多信息empty(),请查看有关 empty() 的 PHP 手册

于 2013-02-16T13:11:24.553 回答
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_dumpif并简化e-mail2(无需验证):

$email = filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL);

if (!$email || $email !== $_POST['e-mail2']) {
    // error stuff, including separate check on empty.
}
于 2013-02-16T13:43:38.797 回答