我有一个名为users
的mysql表,其中包含以下字段:
username - password - role
该角色由普通用户和管理员组成。
我想要的是当管理员登录它时被重定向到另一个页面而不是普通用户登录的同一页面。我的代码如下:
<?php
include("../includes/db.php");
$username=$_POST['username'];
$password=$_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM Users WHERE username='$username' and password='$password' And role = 'normaluser'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
session_register("username");
session_register("password");
header("location:myaccount.php");
}
?>
我的代码适用于普通用户,但我不知道如何编写管理部分的代码。
答案 0 :(得分:2)
从查询中检索role
,检查它是什么,然后相应地设置标题位置。
答案 1 :(得分:2)
我会说
$sql="SELECT role FROM Users WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
while ($row = mysql_fetch_object($result)) {
//one hit i hope?!
//DONT save your apssword in the session!!!!
//session_register("username");
//session_register("password");
$role = $row->role;
}
if($role == "user"){
redirect1
}elseif($role == "admin"){
redirect2;
}else{
redirect panic
}
答案 2 :(得分:1)
$sql = "SELECT * FROM Users WHERE username='$username' and password='$password'";
// ...
if($count == 1){
$user = mysql_fetch_array($result);
if ($user['role'] === 'normaluser')
{
session_register("username");
session_register("password");
header("location:myaccount.php");
}
if ($user['role'] === 'admin')
{
header("location:admin.php");
}
}
答案 3 :(得分:0)
定义下面的一些常量或使用bitmasking algoritim。 (php_manual)。
index.php 或者如果您使用框架检查文档。
define('USER_ADMIN', 'a');
define('USER_USER', 'u');
构建一个类型为text的权限表
`permissions` text null
在您的视图中构建您的user_permissions行使用复选框
<input type="checkbox" name="permissions[]" value="u" selected />
<input type="checkbox" name="permissions[]" value="a" selected />
分配数据
$user='';
$user = (isset($_SESSION['uid'])) ? User::find($_SESSION['uid']) : '';
if(isset($user) && in_array(USER_ADMIN, $user['permissions']))
{
//i am an admin
}
else
{
//i am NOT an admin
}