0

我正在尝试从我的数据库(管理员)中为特定用户设置会话,这个想法是如果管理员登录,他将被重定向到管理页面。并且会拥有更多的特权。

session_start();
require 'funcs.php';

$error = FALSE;

if (! empty($_POST)) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $sql = "SELECT * FROM `users` WHERE
            `username` = '$username' AND
            `password` = '$password' LIMIT 1";





    $result = query($sql,TRUE);
    if(! empty($result)) {
        $_SESSION['name'] = $result[0]['fullname'];
        $_SESSION['user'] = $result[0]['username'];
        header("Location: index.php");
        die;
    } else {
        $error = TRUE;
    }
4

4 回答 4

2
<?php
session_start();
include('../database/connect.php'); // Database connect
if(isset($_POST['login']))
{
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
    if($username =="")
    {
        $erro_msg_au="<font color=red><b>"."Please Enter Username"."</b></font>";
    }
    elseif($password =="")
    {
        $erro_msg_ap="<font color=red><b>"."Please Enter Password"."</b></font>";
    }
    if($username !="" && $password !="")
    {
        $sql=mysql_query("SELECT * FROM users where email_id='$username' AND password='$password' and usertype='admin'");   
        $row=mysql_fetch_array($sql);
            if($row['email_id']!="")
            {
                $_SESSION['admin']=$row['email_id'];
                echo "<script language=javascript>window.location='dashboard.php'</script>";
            }
            else
            {
                $erro_msg="<font color=red><b>"."Invalid Login Information"."</b></font>";      
            }
    }
}
?>

HTML 脚本:

<form id="login_form" name="login_form" method="post">
<input name="username" type="text" id="username" value="<?php echo $_POST['username']?>" />
<input name="password" type="password" id="password" />
<input name="btnlogin" type="submit" value="Login" /> 
</form> 
于 2013-05-21T18:14:03.123 回答
0

我将首先在我的表中添加一个新列,即user_level 这个标志将帮助您确定哪个用户是管理员,哪个用户不是。然后你可以简单地将该标志分配给另一个会话值:

$_SESSION['userlevel'] = $result[0]['user_level'];

然后你可以if/else检查这个值......

编辑:你的表结构应该是这样的:

id, username, password, user_level = (normal|admin)

user_level值应该是普通用户或管理员用户,默认情况下设置它。它应该是普通用户,除非您希望该用户成为管理员,然后将此列设置为“管理员”。

现在转到您的代码:

session_start();
require 'funcs.php';

$error = FALSE;

if (! empty($_POST)) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $sql = "SELECT * FROM `users` WHERE
            `username` = '$username' AND
            `password` = '$password' LIMIT 1";

    $result = query($sql,TRUE);
    if(! empty($result)) {
        $_SESSION['name'] = $result[0]['fullname'];
        $_SESSION['user'] = $result[0]['username'];
        $_SESSION['userlevel'] = $result[0]['user_level'];

        if( $_SESSION['userlevel'] === 'admin')
        {
           //go to admin page
           header("Location: admin.php");
        }
        else
        {
           header("Location: index.php");
        }
        exit;
    } else {
        $error = TRUE;
    }

现在在您的管理页面中,您需要通过在所有管理页面中执行此例程来检查该用户是否实际上是管理员:

if(!isset($_SESSION['userlevel']) || $_SESSION['userlevel'] !== 'admin') //you can add more checks
{
   //redirect to login page
   header("Location: login.php");
}

类似的东西...

于 2013-05-21T17:20:02.207 回答
0

您可以在您的数据库中添加一个USERTYPE ENUM 字段('USER'、'ADMIN')并拥有一个硬编码的欢迎页面。如前所述,您必须转义用户名和密码以避免sql注入(示例用于mysql)

    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $sql = "SELECT * FROM `users` WHERE
            `username` = '". mysql_real_escape_string($username)."' AND
            `password` = '". mysql_real_escape_string($password)."' LIMIT 1";
    $result = query($sql,TRUE);
    if(! empty($result)) {
        $_SESSION['name'] = $result[0]['fullname'];
        $_SESSION['user'] = $result[0]['username'];
        $_SESSION['group'] = $result[0]['usertype'];
        header("Location: index_".$result[0]['usertype'].".php");
        die;
    } else {
        $error = TRUE;
    }

在示例中,用户将被重定向到 *index_ADMIN.php* 或 *index_USER.php*。您可以检查 $_SESSION['group'] 以确定允许或不允许哪些操作

于 2013-05-21T17:08:41.233 回答
0

您编写的代码大致适用于发送用户数据库中的用户并成功登录到页面 index.php。如果您在上面编写的代码实际上是 IN index.php,那么您需要在调用 session_start() 之后但在 SQL 查找之前检查用户是否已经登录的代码。

如果该用户是“管理员”,则为该用户提供您想要的额外权限。您将希望在要向管理员或登录用户显示不同内容的任何页面上以相同的方式检查会话变量。例如,您的页面可能有这样的检查:

<?php 
// if session already started, this loads $_SESSION with existing values:
session_start();

if(isset($_SESSION['user'])) { 
    // Code for Logged members 
    if ($_SESSION['user'] === "admin") {
        // Code to show for admin user
    }
    else {
        // code to show logged-in non-admin users
    }
} 
else { 
    // Code to show not-logged in users
} 
?> 
于 2013-05-21T17:29:17.233 回答