管理页面访问

时间:2014-02-12 10:27:15

标签: php mysql sql

我有一个只有管理员点击链接后才能访问的页面。如果登录用户是标准用户,则他们应该无法访问该页面。但是,当标准用户尝试访问管理页面时,他们可以访问该页面。

我很欣赏一双第二只眼睛,看看他们是否能够发现代码的任何错误,这将使功能按预期工作。

由于

<?php

if(check_login() && isAdmin()) {
   echo 'welcome administrator';
} else {
   header('Location: login.php');
   exit;
}

function isAdmin() {
   $conn = mysqli_connect("localhost", "root", "dbpass", "dbname") or die ('Could not connect to database!');  
   $sql = "SELECT * FROM `usertable` WHERE userID ='" . $_SESSION['sess_uid'] . "'";
   $mainaccess = $conn->query($sql);
   print_r($mainaccess);
if(!$mainaccess){
    echo $conn->error;
}


if ($mainaccess -> userLevel == 0) {
    return true;
} else {
     return false;
}
}

function check_login () {
if(isset($_SESSION['sess_uid']) && $_SESSION['sess_uid'] != '') {
   return true;
} else {
   false;
   return;
}
}
?>  

3 个答案:

答案 0 :(得分:1)

问题是您正在从数据库中选择他们已经拥有管理员权限的用户,即

SELECT `userID` FROM `usertable` WHERE `userLevel` = 0

所以你总是以管理员身份向所有人展示。需要更改查询以具体检查登录用户是否为管理员。所以将查询更改为类似的内容

$sql = "SELECT * FROM `usertable` WHERE userID = $_SESSION['sess_uid']";

其中$_SESSION['sess_uid']userID

我们必须删除userLevel检查,因为这在选择用户时无关紧要,我们还必须从SELECT userID更改为SELECT *,就像您只选择userID,您的数组和行

中不会有userLevel
$mainaccess -> 'userLevel' == 0

不行。通过选择所有内容,您可以确保可以访问所有属性,即

$mainaccess -> 'userLevel'
$mainaccess -> 'userID'

<强>更新

访问表数据的正确方法是使用

对象(这是您将使用的方法)

$mainaccess -> 'userLevel'// Incorrect
$mainaccess->userLevel //correct

阵列

$mainaccess -> 'userLevel'// Incorrect
$mainaccess['userLevel'] //correct

请更改此行

您的查询也不正确请使用此代码块,因为您的SQL查询没有提取正确的信息。

function isAdmin()
{
    $conn = mysqli_connect("localhost", "root", "dbpass", "dbname") or die ('Could not connect to database!');  
    $sql = "SELECT * FROM `usertable` WHERE userID = $_SESSION['sess_uid']";

    if($result = $mainaccess = $conn->query($sql))
    { 
        while($obj = $result->fetch_object())
        { 
            $user = $obj;
        } 
    }


    if ($user->userLevel == 0)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

答案 1 :(得分:0)

你真的需要这样的东西:

function isAdmin() {
  $conn = mysqli_connect("localhost", "root", "dbpass", "dbname") or die ('Could not connect to database!');  
  $sql = "SELECT `userID` FROM `usertable` WHERE `userLevel` = 0 AND userID ='" . $_SESSION['sess_uid'] . "'";

正如我在评论中所说,您正在寻找具有管理员权限的任何人,但您真的想知道该用户是否具有管理员权限,因此您必须验证您试图找出的用户具有访问权限。我只是将代码放在上面,认为你将userID存储在会话中(根据你以后的代码),但你可能需要更改这个

答案 2 :(得分:0)

你的做法是错误的。该链接应仅显示为登录管理员。

尝试类似此测试代码的内容。

<?php
session_start();
$_SESSION['admin'] = 0;//set only by logging in
$html  ="Test<br>";//page html
if ($_SESSION['admin']== 0) {
      $html .="<a href=\"adminpage.php\" >Admin</a>";
}
echo $html;   
?>

根据您的要求进行修改。