关于PHP的IF .. OR语句的小问题

时间:2013-02-16 13:00:55

标签: php

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

这是一行:

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

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

5 个答案:

答案 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.
}