Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中设置权限_Php_Mysql_Sql - Fatal编程技术网

在PHP中设置权限

在PHP中设置权限,php,mysql,sql,Php,Mysql,Sql,我有一个名为admin_permissions的表,其中包含以下列: 序列 页面名称 级别用户 高级行政人员 二级支援 二级账户 最后4列是不同的级别 我有检查权限的代码: $permission_sql="SELECT * from admin_permissions where page_name = '".$_SERVER["REQUEST_URI"]."' "; $permission_rs=mysql_query($permission_sql,$conn); if(mysql_num

我有一个名为admin_permissions的表,其中包含以下列:

序列 页面名称 级别用户 高级行政人员 二级支援 二级账户 最后4列是不同的级别

我有检查权限的代码:

$permission_sql="SELECT * from admin_permissions where page_name = '".$_SERVER["REQUEST_URI"]."' ";
$permission_rs=mysql_query($permission_sql,$conn);
if(mysql_num_rows($permission_rs) == 0)
{
    echo '<h2 align="center">An Error has occurred!</h2>';
    exit();
}
else
{
    $permission_result=mysql_fetch_array($permission_rs);
    if($usertype_user != $permission_result["level_user"] or 
    $usertype_support != $permission_result["level_support"] or 
    $usertype_admin != $permission_result["level_admin"] or 
    $usertype_accounts != $permission_result["level_accounts"])
    {
        echo '<h2 align="center">Access Denied</h2>';
        echo '<h2 align="center">Please contact your administrator quoting \'Permission Error\' and number \''.$permission_result["sequence"].'\'</h2>';
        exit();
    }
    else
    {

    }
}
$usertype\ux文件。。。等于或“是”,数据库结果等于或“是”

我登录的用户的$permission_result[level_admin]等于yes,所以上面的if语句应该是false,但不是,它说的是true

如何使上述代码正常工作


*另外,我不担心在这个特定代码上的SQL注入

请删除“或”try with | | |,用于检查或条件使用符号| |,用于检查和条件使用&&

$permission_sql="SELECT * from admin_permissions where page_name = '".$_SERVER["REQUEST_URI"]."' ";
$permission_rs=mysql_query($permission_sql,$conn);
if(mysql_num_rows($permission_rs) == 0)
{
    echo '<h2 align="center">An Error has occurred!</h2>';
    exit();
}
else
{
    $permission_result=mysql_fetch_array($permission_rs);
    if(($usertype_user != $permission_result["level_user"]) || 
    ($usertype_support != $permission_result["level_support"])|| 
    ($usertype_admin != $permission_result["level_admin"])|| 
    ($usertype_accounts != $permission_result["level_accounts"]))
    {
        echo '<h2 align="center">Access Denied</h2>';
        echo '<h2 align="center">Please contact your administrator quoting \'Permission Error\' and number \''.$permission_result["sequence"].'\'</h2>';
        exit();
    }
    else
    {

    }
}
此声明

if($usertype_user != $permission_result["level_user"] or 
$usertype_support != $permission_result["level_support"] or 
$usertype_admin != $permission_result["level_admin"] or 
$usertype_accounts != $permission_result["level_accounts"])
如果这些权限中至少有一个不匹配,则为true;只有当所有这些权限都匹配时,该值才为false。在您的情况下,至少有一个user、support、admin、accounts与level_user、level_support、level_admin、level_accounts不匹配,请检查:您可能有admin match yes==yes或==,但您可能缺少其他内容

你可能想要这样的东西:

if(
  ($permission_result["level_user"] and $usertype_user!='yes') or
  ($permission_result["level_support"] and $usertype_support!='yes') or
  ($permission_result["level_admin"] and $usertype_admin!='yes') or
  ($permission_result["level_account"] and $usertype_accounts!='yes')
)
注释

看看php:如果您有,而不是某处,那么它的计算结果为true

或与| |或与&&之间的区别仅在优先级上,请参见,在本例中并不重要


我不确定$\u服务器[REQUEST\u URI]是否必须进行url编码;可以肯定的是,你可以在上面使用mysql\u real\u escape\u字符串——或者更好,因为评论抱怨mysql的不推荐、mysqli\u real\u escape\u字符串——或者,如果你不使用一些特殊的字符集,只使用addslashes。

@cHao不幸的是,很多PHP教程仍然使用mysql\u*教授Python+mysql编程。如果有人写了一篇使用PDO或MySQLi的文章,我会非常高兴,但我还不知道有没有。PHP.net已经为Timothy写了很多文章。一是轻描淡写。还有什么比这更容易解释的呢?我试着用| | for“or”,但是这个语句仍然返回true,即使它应该是false。当我不应该看到我的数据库时,我收到了一个错误--我登录的用户有level_user=/level_admin=/level_support=/level_accounts=所以他们根本不应该访问这个页面,但是他们尝试var_dump$permission\u result,$usertype_user,$usertype_support,$usertype\u admin,$usertype_账户;,检查这些值并告诉我是否存在违反逻辑的情况