PHP if if语句问题!=

时间:2015-05-20 16:21:30

标签: php session if-statement

我无法弄清楚这是什么错误。


    if((!isset($_SESSION['user_username'])) || (!isset($_SESSION['user_role']))){
       header("location:index.php");
    }elseif( $_SESSION['user_role'] != "admin" || $_SESSION['user_role'] != "superadmin" ){
       header("location: noaccess.php");
    }

这是我的代码....即使我使用admin用户(user_role = admin)登录,它也会重定向到noaccess.php

2 个答案:

答案 0 :(得分:3)

我认为你的错误在第二个陈述中的OR||)。

if((!isset($_SESSION['user_username'])) || (!isset($_SESSION['user_role']))){
       header("location:index.php");
}elseif( $_SESSION['user_role'] != "admin" && $_SESSION['user_role'] != "superadmin" ){
       header("location: noaccess.php");
}

答案 1 :(得分:0)

用户@mariobgr有正确的答案,你只需要在第二个if语句上交换|| &&。当你说if($a || $b)之类的东西时,你真正说的是"其中一件事情必须是真的"或者"如果$ a为真,或者$ b为真,则此陈述为真"。您的问题是,您执行语句的方式将始终返回true。该角色不能同时为adminsuperAdmin。有关为什么让我们通过一个例子的更多解释

所以,$role = 'admin';。所以if语句说if($role != 'admin')是假的,因为它是“管理员”。但第二部分说if($role != 'superAdmin')这是真的。所以if语句是真的,因为第二部分是真的。如果$role = 'superAdmin';则相反。 if的第一部分为true,因此if语句为真,因为至少有一个语句为真。

如果您将||切换为&&,那么现在两个事情都必须为真,以便if语句评估为true。如果$role = 'admin';第一部分为false,则if语句将被评估为false。如果$role = 'superAdmin';,则第二部分为false,表示if为false。 if语句评估为true的唯一方法是,如果您不是admin &&,则不是superAdmin