0

如何在 php 中设置访问权限以查看完整页面假设您是管理员,因此您有权打开任何页面并查看它,如果您不是管理员用户,则显示错误您不是管理员,但用户有权访问某些页面有限页

在此处输入代码我该怎么做

请帮我解决这个问题谢谢

请参阅屏幕简短示例管理面板 管理面板 http://www.koolfree.com/ImageUpload/uploads/1380834608.jpg

用户面板

用户面板 http://www.koolfree.com/ImageUpload/uploads/1380804093.jpg

这是mysql表

CREATE TABLE IF NOT EXISTS `member` (
  `mem_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL,
  `password` varchar(30) NOT NULL,
  `fname` varchar(30) NOT NULL,
  `lname` varchar(30) NOT NULL,
  `address` varchar(100) NOT NULL,
  `contact` varchar(30) NOT NULL,
  `picture` varchar(100) NOT NULL,
  `gender` varchar(10) NOT NULL,
  PRIMARY KEY (`mem_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

这是 index.php 文件

<?php
    //Start session
    session_start();    
    //Unset the variables stored in session
    unset($_SESSION['SESS_MEMBER_ID']);
    unset($_SESSION['SESS_FIRST_NAME']);
    unset($_SESSION['SESS_LAST_NAME']);
?>
<form name="loginform" action="login_exec.php" method="post">
<table width="309" border="0" align="center" cellpadding="2" cellspacing="5">
  <tr>
    <td colspan="2">
        <!--the code bellow is used to display the message of the input validation-->
         <?php
            if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
            echo '<ul class="err">';
            foreach($_SESSION['ERRMSG_ARR'] as $msg) {
                echo '<li>',$msg,'</li>'; 
                }
            echo '</ul>';
            unset($_SESSION['ERRMSG_ARR']);
            }
        ?>
    </td>
  </tr>
  <tr>
    <td width="116"><div align="right">Username</div></td>
    <td width="177"><input name="username" type="text" /></td>
  </tr>
  <tr>
    <td><div align="right">Password</div></td>
    <td><input name="password" type="text" /></td>
  </tr>
  <tr>
    <td><div align="right"></div></td>
    <td><input name="" type="submit" value="login" /></td>
  </tr>
</table>
</form>

连接.php 文件

<?php
$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_database = "simple_login";
$prefix = "";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
mysql_select_db($mysql_database, $bd) or die("Could not select database");
?>

这是 login_exec.php 文件

<?php
    //Start session
    session_start();

    //Include database connection details
    require_once('connection.php');

    //Array to store validation errors
    $errmsg_arr = array();

    //Validation error flag
    $errflag = false;

    //Function to sanitize values received from the form. Prevents SQL injection
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }

    //Sanitize the POST values
    $username = clean($_POST['username']);
    $password = clean($_POST['password']);

    //Input Validations
    if($username == '') {
        $errmsg_arr[] = 'Username missing';
        $errflag = true;
    }
    if($password == '') {
        $errmsg_arr[] = 'Password missing';
        $errflag = true;
    }

    //If there are input validations, redirect back to the login form
    if($errflag) {
        $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
        session_write_close();
        header("location: index.php");
        exit();
    }

    //Create query
    $qry="SELECT * FROM member WHERE username='$username' AND password='$password'";
    $result=mysql_query($qry);

    //Check whether the query was successful or not
    if($result) {
        if(mysql_num_rows($result) > 0) {
            //Login Successful
            session_regenerate_id();
            $member = mysql_fetch_assoc($result);
            $_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
            $_SESSION['SESS_FIRST_NAME'] = $member['username'];
            $_SESSION['SESS_LAST_NAME'] = $member['password'];
            session_write_close();
            header("location: home.php");
            exit();
        }else {
            //Login failed
            $errmsg_arr[] = 'user name and password not found';
            $errflag = true;
            if($errflag) {
                $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
                session_write_close();
                header("location: index.php");
                exit();
            }
        }
    }else {
        die("Query failed");
    }
?>

这是 auth.php 文件

<?php
    //Start session
    session_start();
    //Check whether the session variable SESS_MEMBER_ID is present or not
    if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
        header("location: index.php");
        exit();
    }
?>

这是 home.php 文件

<?php
    require_once('auth.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.style1 {
    font-size: 36px;
    font-weight: bold;
}
-->
</style>
</head>

<body>
<p align="center" class="style1">Login successfully </p>
<p align="center">This page is the home, you can put some stuff here......</p>
<p align="center"><a href="index.php">logout</a></p>
</body>
</html>
4

4 回答 4

0

创建一个管理员用户表。并检查成员是否是管理员,然后检查这个,如果不显示这个。

于 2013-10-03T11:11:28.403 回答
0

首先,如果您不使用带有MySQLiPDO的 Prepared Statements,您的表肯定会被黑客入侵。使用准备好的语句可以避免这种情况。看看这个

无论如何,您所描述的问题可以通过创建一个包含管理员 id 的单独表来解决,然后在登录系统中首先获取用户的行,从中获取 id,然后检查该 id 是否存在于管理员表中。

于 2013-10-03T11:18:25.683 回答
0

在这种情况下,您所要做的就是在您的用户数据库中添加一个名为 user_role 或类似名称的新行。因为您只有两个级别(管理员/非管理员)设置为默认值为 0 的 tinyint。

0 现在表示用户只是一个用户,但您可以将他们的角色设置为 1 表示他们是管理员。

然后您所做的就是检查您想要的任何页面上的用户当前角色。我建议将其保存到 $_SESSION 中,这样您就不必在每一页上查询数据库。

<?php if ( isset($_SESSION['user_role']) && $_SESSION['user_role'] == 1) : ?>
    admin panel html
<?php else : ?>
    redirect to login or display user panel html
<?php endif; ?>

这是一个超级简单的基于角色的控制器。谷歌 RBAC 以了解更多关于随着程序规模和复杂性的增长您可以在以后使用的更复杂的概念。

于 2013-10-03T11:23:30.627 回答
0

我不会更改脚本的整个逻辑,但建议创建另一个管理员表,您可以将另一个会话变量 admin 设置为登录脚本:

$member = mysql_fetch_assoc($result);
            $_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
            $_SESSION['SESS_FIRST_NAME'] = $member['username'];
            $_SESSION['SESS_LAST_NAME'] = $member['password'];
            $_SESSION['Admin'] = "Admin";

现在这个会话变量将出现在你有会话的地方,对于限制页面,你可以将内容绑定为来自用户..

<?php
session_start();
$value=$_SESSION['Admin'];
if(!empty($value))
{

//your website content
}
?>

例如,如果您想按用户隐藏一个简单的表单,那么您可以这样做:页面名称是:form.php

<?php
    session_start();
    $value=$_SESSION['Admin'];
    if(!empty($value))
    { ?>
<form>
--- 
---- 
----
---
</form>
<?php }
else { ?>
<h1> You dont have permission to see this!</h1>
<?php }
?>
于 2013-10-03T11:26:46.607 回答