为什么我下面的IF语句没有显示我要查找的结果


Why does my below IF statement not display the results I am looking for?

我的customer_profile表中有两列,"birthdate"answers"gender"。我想检测用户是否已经完成了他们的配置文件。但是,通过使用以下条件,我无法检查客户是否完成了他们的配置文件。它只返回"配置文件完成"。

我尝试将条件"&&更改为||"answers"||更改为&&",并全部更改为"&&",但结果出乎意料。

之所以有这么多条件,是因为有时客户没有填写数据或将其留空,或者在性别字段或出生日期字段中键入"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"; 
}

这应该是这样的:

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

这意味着:

如果组$birthdate为空或null或0000000,或者性别为空、null或null。。。

编辑

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

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

查看有关empty():的更多信息

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

在我看来,正确的代码应该是(UPDATED-=== for $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

我认为应该都是||(OR)。

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

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


我不能发表评论(声誉太差),所以我会在这里写下我的评论。

我相信,对于$birthdate == NULL,nodefect想要检查变量是否已设置。如果其中一个或两个变量都没有设置,Marcos Pérez-Gude在回答中给出的代码将不起作用。最好先检查变量是否存在。可能是直接调用了脚本,而根本没有发送任何表单。

还有一个解决方案:

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

我在这里发现了实际问题。

它必须是$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"; 
}

对于那些投票反对这个帖子的人,请重新考虑。这是一个实际问题,可能会对其他人有所帮助。