我的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";
}
对于那些投票反对这个帖子的人,请重新考虑。这是一个实际问题,可能会对其他人有所帮助。