我正在使用if查询检查请求的验证,
if ($request_userid == $userid) {
...
}
这是按预期工作的。但进一步的测试表明,如果$request_userid
或$userid
为0或“”,则条件为真,脚本运行if查询但不应该。
我目前正在解决它:
if ($userid == "" ) {
exit ("exit");
}
但我不认为这是正确的方法吗?
你能解释为什么它不适用于if查询以及检查它的正确方法是什么?
答案 0 :(得分:3)
这是the PHP page on comparison operators。
您使用双等号进行松散比较。将其更改为三等号,它将按类型和值进行检查。
另请参阅booleans & casting上的此页面。
'' == 0
求值为TRUE的原因是整数0在转换为布尔值时转换为FALSE。空字符串(''
)也会转换为FALSE。因此,您的比较最终看起来像if (false == false)
,这是真的。
答案 1 :(得分:1)
您可以使用
if ($request_userid === $userid && $userid != "" )
答案 2 :(得分:1)
为什么它不能与if查询一起使用?
因为您使用==
比较运算符比较类型,然后使用""让我们说$ userid =" SpongeBob"会匹配。
检查它的正确方法是什么?
现在,如果你使用===
比较运算符,你将比较相等,你将比较它们是否相同,$ userid =" SpongeBob"不会与""
答案 3 :(得分:1)
只需将逻辑更改为:
if ((!empty($request_userid) && !empty($userid)) && ($request_userid === $userid)) {
...
}
当您执行0
时,null
和==
将始终相等,后者会比较两种不同的数据类型;即:null
和0
。但===
确保两个值具有相同的类型。因此0
和null
永远不会与===
匹配。 !empty()
检查是另一级验证,确保===
永远不会发生,除非$request_userid
和$userid
100%不为空。
也就是说,您目前用于解决此问题的条件将起作用:
if ($userid == "" ) {
exit ("exit");
}
但我建议将其更改为:
if (empty($userid)) {
exit ("exit");
}
在一天结束时,这不是一个混乱或混乱,而只是一种处理验证用户输入的现实的方法。