我喜欢使用这个 IF 根据权限重定向用户。但是用户总是被重定向到仪表板。
其实我已经设置:
$perm_edit = '0';
$user_level = '1';
if ($perm_edit !== 1 || $user_level !== 1) {
header("Location: $url/dash.php?error=1"); exit;
}
|| 运算符只需要一个条件即可继续。
我错了什么?
我喜欢使用这个 IF 根据权限重定向用户。但是用户总是被重定向到仪表板。
其实我已经设置:
$perm_edit = '0';
$user_level = '1';
if ($perm_edit !== 1 || $user_level !== 1) {
header("Location: $url/dash.php?error=1"); exit;
}
|| 运算符只需要一个条件即可继续。
我错了什么?
三元比较运算符是“严格的”,这意味着它们检查类型和值。您正在将字符串与数字进行比较,这意味着它们将始终为假。要么把它们都变成数字,要么只使用双重比较:$perm_edit != 1
这是因为您使用的是与运算符不同的 ( !==
)。它不做类型杂耍,这是你在这种情况下需要的。
为了确定两个不同类型的值是否等价,您必须使用不等于运算符 ( ):!=
if ($perm_edit != 1 || $user_level != 1) {
header("Location: $url/dash.php?error=1");
exit;
}
另一种写法是:
if ( ! $perm_edit || ! $user_level) {
header("Location: $url/dash.php?error=1");
exit;
}
有效的原因是 PHP 处理了类型。换句话说,它变成0
和false
变成1
,true
然后!
运算符(也称为 NOT 运算符)将它变成相反的。