我正在为自己做更多的事情,那是我拥有的另一个网站。它涉及许多具有权限等的组,现在我有一个看起来像这样的功能
function hasPermission($user, $permission){
global $connection;
$sql = "SELECT * FROM admins WHERE `ID` = '". $user ."'";
$rs = $connection->query($sql);
if ($rs){
$user = $rs->fetch_array(MYSQL_ASSOC);
$userRank = $user['Rank'];
$sql = "SELECT * FROM `ranks' WHERE `RankName` = '". $userRank ."'";
$rs = $connection->query($sql);
if ($rs){
$rank = $rs->fetch_array(MYSQL_ASSOC);
if ($rank[$permission] == 1){
return true;
}
else{
return false;
}
}
}
else{
echo($connection->error);
}
}
然后,当我使用像if (hasPermission($_SESSION['ID'], 'IsFullAccess') == true)
这样设置的参数调用函数时,它返回false,我收到自定义错误消息,说我没有权限。是的,在我的数据库中,该等级的“IsFullAccess”列设置为1。
我在这里做错了什么?
答案 0 :(得分:1)
阅读完代码后,您似乎不熟悉sql的JOIN:
您的查询如下所示:
$sql= "SELECT r.$permission as p FROM admins a JOIN ranks r ON a.rank=r.RankName WHERE a.ID=$user";
$rs = $connection->query($sql);
if (!$rs)
return false;
$hasPermission = $rs->fetch_array(MYSQL_ASSOC);
return $hasPermission['p'];
(请记住sql injection)
确保db在php
中测试之前返回您期望的结果答案 1 :(得分:0)
尝试使用hasPermission($_SESSION['ID'], 'IsFullAccess') == 1)
代替hasPermission($_SESSION['ID'], 'IsFullAccess') == true)
。 (true
应转换为1
)