为什么我的IF声明不能显示我想要的结果?

时间:2015-12-18 11:33:41

标签: php

我的customer_profile表中有两列," birthdate"和"性别"。我想要检测用户是否已完成其个人资料。但是,通过使用以下条件,我无法检查客户是否已完成其个人资料。它只返回" Profile Complete"。

我尝试改变条件"&&到||"和" ||到&&"以及#34;&&"但它会返回意想不到的结果。

有这么多条件的原因是因为有时客户没有填写数据或将其留空或键入" 0"在性别领域或出生日期。如果只有两个条件,我就不必面对这个问题了。

下面是我的代码比较这两列。我要检查的是客户数据是否为空;这两列上为NULL或0。

$sql_stmt = "SELECT customer_id, first_name, email, phone, birthdate, gender FROM customers
                        WHERE customer_id = 1 LIMIT 1";
$sql = mysqli_query($conn, $sql_stmt) or die(mysqli_error($conn));
$row = mysqli_fetch_array( $sql );
extract($row);

if(($birthdate == '' && $birthdate == NULL && $birthdate == '0000-00-00') || ($gender == '' && $gender == 0 && $gender == NULL)){
     echo "Profile Not Complete";
} else { 
     echo "Profile Complete"; 
}

5 个答案:

答案 0 :(得分:7)

这应该是这样的:

if(($birthdate == '' || $birthdate == NULL || $birthdate == '0000-00-00') || ($gender == '' || $gender == 0 || $gender == NULL)){
     echo "Profile Not Complete";
} else { 
     echo "Profile Complete"; 
}

这意味着:

  

如果组$ birthdate为空或null或0000000,或者性别为空或零或空...

修改

我建议使用这种条件方式:

if(empty($birthdate) || empty($gender)){
     echo "Profile Not Complete";
} else { 
     echo "Profile Complete"; 
}

详细了解empty()

http://php.net/manual/en/function.empty.php

答案 1 :(得分:4)

在我看来,正确的代码是(更新 - === $gender === 0}

if(($birthdate == '' || $birthdate == NULL || $birthdate == '0000-00-00') || ($gender == '' || $gender === 0 || $gender == NULL)){
     echo "Profile Not Complete";
} else { 
     echo "Profile Complete"; 
}

这就是说

if (birthdate is '' OR NULL OR '0000-00-00') OR (gender is '' OR 0 OR NULL)
    then the profile is  not complete
else 
    the profile complete

修改

测试后
$birthdate = "1984-01-01";
$gender = "male";
echo (($birthdate == '') ? "true" : "false") . "<br>";
echo (($birthdate == NULL) ? "true" : "false") . "<br>";
echo (($birthdate == '0000-00-00') ? "true" : "false") . "<br>";
echo (($gender == '') ? "true" : "false") . "<br>";
echo (($gender == 0) ? "true" : "false") . "<br>";
echo (($gender == NULL) ? "true" : "false") . "<br>";
if(($birthdate == '' || $birthdate == NULL || $birthdate == '0000-00-00') || ($gender == '' || $gender == 0 || $gender == NULL)){
     echo "Profile Not Complete";
} else { 
     echo "Profile Complete"; 
}

我得到了:

false
false
false
false
true // $gender == 0
false
Profile Not Complete

答案 2 :(得分:3)

我认为它应该都是||(或者)。

如果生日为空(''零(00-00-0000),则显示错误。该值不能为空且同时为零(&&)。

另外,我不会使用if(!isset($var) || $var == '' || ...)检查变量是否为NULL,而是检查它是否存在。除非你在某处将变量设置为NULL($var = NULL;)或取消设置它(unset($var);),否则它不应该是NULL。

我无法发表评论(声誉太少),所以我会在这里写评论。

我相信使用$birthdate == NULL nodefect想要检查变量是否已设置。如果没有设置一个或两个变量,MarcosPérezGude在他的答案中给出的代码将不起作用。最好首先检查变量是否存在。可能是直接调用脚本并且根本没有发送任何表单。

答案 3 :(得分:1)

还有一个解决方案:

echo (empty($birthdate) || empty($gender) ? 'Profile Not Complete' : 'Profile Complete');

答案 4 :(得分:0)

我在这里找到了实际问题。

而不是$gender == 0,它必须是$gender == '0'。 '在这里失踪了。当$gender == 0时,它总是返回true。这就是为什么它不断返回Profile Not Complete。

所以,正确的语法如下所示:

if(($birthdate == '' || $birthdate == NULL || $birthdate == '0000-00-00') || ($gender == '' || $gender === '0' || $gender == NULL)){
     echo "Profile Not Complete";
} else { 
     echo "Profile Complete"; 
}

对于那些拒绝投票的人,请重新考虑。这是一个实际问题,可能有助于其他人。