Php 值0的筛选器\u验证\u INT返回错误

Php 值0的筛选器\u验证\u INT返回错误,php,filter,Php,Filter,post的预期值为0或1,但当该值为零时返回错误 if(!($data['status'] = filter_input(INPUT_POST,'status',FILTER_VALIDATE_INT))) { echo'Error'; } else return true; 您的if语句将调用filter\u input()的结果隐式转换为布尔值,然后测试该结果。在您的例子中,结果是0,它被隐式转换为FALSE,因此测试失败 您需要使用身份比较显式地测试FALSE: $data['st

post的预期值为0或1,但当该值为零时返回错误

if(!($data['status'] = filter_input(INPUT_POST,'status',FILTER_VALIDATE_INT)))
{
  echo'Error';
}
else 
return true;

您的
if
语句将调用
filter\u input()
的结果隐式转换为布尔值,然后测试该结果。在您的例子中,结果是
0
,它被隐式转换为
FALSE
,因此测试失败

您需要使用身份比较显式地测试
FALSE

$data['status'] = filter_input(INPUT_POST,'status',FILTER_VALIDATE_INT);
if ($data['status'] === FALSE) ...

有关详细信息,请参阅。

如果
语句正在将调用
filter\u input()
的结果隐式转换为布尔值,然后测试该结果。在您的例子中,结果是
0
,它被隐式转换为
FALSE
,因此测试失败

您需要使用身份比较显式地测试
FALSE

$data['status'] = filter_input(INPUT_POST,'status',FILTER_VALIDATE_INT);
if ($data['status'] === FALSE) ...

有关更多信息,请参阅。

我认为它正在正确验证,并且根据
过滤器输入的返回值,它正在返回0

因此,您将获得
$data['status']=0

然后


!($data['status']=0)
将其设置为
1
这就是它打印错误消息的原因

我认为它正在正确验证,并且根据
过滤器输入的返回值,它正在返回0

因此,您将获得
$data['status']=0

然后


!($data['status']=0)
将其设置为
1
这就是它打印错误消息的原因

为什么此问题标记为and?上面的验证在插入MySQL数据库之前。为什么此问题标记为and?上面的验证在插入MySQL数据库之前。