我想使用此IF根据权限重定向用户。但用户总是被重定向到仪表板。
其实我已经设定了:
$perm_edit = '0';
$user_level = '1';
if ($perm_edit !== 1 || $user_level !== 1) {
header("Location: $url/dash.php?error=1"); exit;
}
||运营商只需要一个条件就可以了。
我错了什么?
答案 0 :(得分:6)
三重比较运算符是“严格的”,这意味着它们检查类型和值。您正在将字符串与数字进行比较,这意味着它们将始终为假。要么将它们都变成数字,要么只使用双重比较:$perm_edit != 1
答案 1 :(得分:1)
这是因为您使用的是 运算符(!==
)。它没有type juggling,这就是你在这种情况下所需要的。
为了确定不同类型的两个值是否相同,您必须使用不等于运算符({ {1}}):
!=
另一种写作方式是:
if ($perm_edit != 1 || $user_level != 1) {
header("Location: $url/dash.php?error=1");
exit;
}
有效的原因是因为PHP搞砸了类型。换句话说,它将if ( ! $perm_edit || ! $user_level) {
header("Location: $url/dash.php?error=1");
exit;
}
变为0
,将false
变为1
,然后true
运算符(也称为NOT运算符)将其变为对面。
您应该通常阅读comparison operators和operators。