0

我喜欢使用这个 IF 根据权限重定向用户。但是用户总是被重定向到仪表板。

其实我已经设置:

$perm_edit = '0';
$user_level = '1';

if ($perm_edit !== 1 || $user_level !== 1) {
      header("Location: $url/dash.php?error=1"); exit;
 }

|| 运算符只需要一个条件即可继续。

我错了什么?

4

2 回答 2

6

三元比较运算符是“严格的”,这意味着它们检查类型和值。您正在将字符串与数字进行比较,这意味着它们将始终为假。要么把它们都变成数字,要么只使用双重比较:$perm_edit != 1

于 2013-09-09T00:58:35.473 回答
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 处理了类型。换句话说,它变成0false变成1true然后!运算符(也称为 NOT 运算符)将它变成相反的。

您应该阅读比较运算符和一般运算

于 2013-09-09T01:19:36.460 回答