如果用户的排名不是经理或管理员,我试图限制用户访问该网页。我创建了一个名为$ rank的变量,它是从我的数据库中的用户表中获取的等级。当我回显页面上的排名时,排名确实等于经理或管理员,但它将我重定向到索引页面,因为它不等于经理或管理员。当我尝试使用此代码时:
if(!isset($_SESSION['userID'])) {
header("Location: index.php");
} else if ($rank == "manager" OR $rank == "admin") {
} else {
header("Location: index.php");
}
它确实有效,但我觉得这样做是错误的。这是我现在使用的代码,并且不起作用:
$tUsers_Select = "SELECT users.rank, ranks.rank_name FROM users LEFT JOIN ranks ON users.rank = ranks.rank_name WHERE user_id = ".$_SESSION['userID'];
$tUsers_Select_Query = mysqli_query($dbConnect, $tUsers_Select);
$fetch = mysqli_fetch_array($tUsers_Select_Query);
$rank = $fetch['rank'];
if(!isset($_SESSION['userID'])) {
header("Location: index.php");
} else if ($rank !== "manager" OR $rank !== "admin") {
header("Location: index.php");
}
希望你理解。如果您有任何问题,请发表评论。
答案 0 :(得分:4)
这只是一个逻辑问题。
else if ($rank !== "manager" OR $rank !== "admin") {
如果排名为manager
,则它不等于admin
。如果是admin
,则它不等于manager
。所以无论发生什么,你都会重定向到index.php。
将OR
更改为AND
。
答案 1 :(得分:0)
首先,我想问你在使用session_start()
之前$_SESSION
是否已打开?
然后我建议你var_dump $_SESSION['userID'])
,看看这个可行的是否为空。
更新: 我不确定你的问题,你可以尝试这个: 更改打击代码:
if(!isset($_SESSION['userID'])) {
header("Location: index.php");
} else if ($rank !== "manager" OR $rank !== "admin") {
header("Location: index.php");
}
为:
if(isset($_SESSION['userID']) AND ($rank == 'manager' OR $rank == 'admin')) {
header("Location: index.php");
}
我认为这可以使您的代码变得简单。