我无法弄清楚这是什么错误。
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
答案 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。该角色不能同时为admin
和superAdmin
。有关为什么让我们通过一个例子的更多解释
所以,$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
。