PHP登录添加角色

问题描述 投票:1回答:3
<?php
session_start();

include 'dbConnection.php';

$uid = $_POST['uid'];
$pwd = $_POST['pwd'];

$sql = "SELECT * FROM user WHERE uid='$uid' and pwd='$pwd'";
$result = $conn->query($sql);


if(!$row = $result->fetch_assoc())
 {
   echo '<script language="javascript">';
   echo 'alert("Username or Password Incorret!")';
   echo '</script>';
   header("Location:index.php");

}
else{

$_SESSION['id']= $row['id'];    
echo '<script language="javascript">';
echo 'alert("Logged!")';
echo '</script>';

}
?>

您好社区,上面的代码是我正在尝试开发的简单登录。我有点新的PHP仍在学习,脚本工作正常(但缺少加密)登录的下一步是添加角色,但我不知道在哪里添加或调整我的代码!如果有人有建议,欢迎他们!

php
3个回答
2
投票

根据您在评论中所说的内容:

首先在数据库表中添加“role”列。

那么您的PHP脚本可能只是将以下内容添加到成功的登录块中。

if($row['role'] == "Admin"){
    header('Location: admin.php');
}elseif($row['role'] == "Student"){
    header('Location: student.php');
}

正如其他人所说,你应该使用一个适当的身份验证系统来处理转义sql查询,安全性,密码哈希等问题。


0
投票

我看到你的脚本有一些严重的问题:

  1. 不要使用mysqli - 它已弃用,不应使用。请改用PDO
  2. 你应该哈希你的密码。了解password_hash()
  3. 不要通过conca3创建SQL语句。您从用户输入连接字符串。它易受SQL注入攻击。你应该使用占位符。 $stmt = $db->prepare("SELECT * FROM user WHERE uid=:uid AND password=:password"); $stmt->execute(array(':password' => $password, ':uid' => $uid)); $rows = $stmt->fetchAll();

如果您想要更详细地查看代码,可以在codereview上发布。

至于角色的实现,您可以使用单列NAME创建另一个表ROLE。例如(在MySql中):

CREATE TABLE role (
  name varchar(255) NOT NULL
) 

ALTER TABLE role ADD PRIMARY KEY ('name');

INSERT INTO role (name) VALUES
('ADMIN'),
('STUDENT');

然后,您可以使用表键角色的外键向用户表中添加其他列。

ALTER TABLE user ADD (
     role varchar(255) NOT NULL,
     FOREIGN KEY(role) REFERENCES role(name)
)

十,您可以获取角色的名称并重定向到正确的位置。

if($row['ROLE'] == "ADMIN"){
    header("Location: http://example.com/admin.php");
    die();
} else {
     ....
}

这种方法有哪些优点?您将所有角色列在一个表中,并且由于外键,您将保留数据完整性。在USER表的列ROLE中,您将能够存储也存储在ROLE表中的唯一角色。如果您尝试删除仍分配给任何用户数据库的角色将不允许它。

这个答案假定您的用户只能有一个角色。如果您希望能够为用户分配多个角色,则必须学习如何在数据库中映射多对多关系。


-1
投票

要正确得到这一点,您需要在数据库中为角色添加一个单独的表,并在user-table中使用user_role添加一个额外的列,您可以在其中存储用户应分配给他的角色表中的ID。在提取数据时,您可以加入ID上的两个表,并获取有关该角色的其他信息,例如名称。

因此,角色表将包含类似:role_id,role_name,当然您也可以在此处获得其他信息,例如user_level(int),但这适用于更高级的项目。

在user-table中,添加user_role列,您可以在其中存储role-table中的id-number。

要获得角色的实际名称,您必须加入这两个表,就像这样:$sql = "SELECT * FROM user t1 LEFT JOIN role t2 ON t1.user_role = t2.role_id WHERE uid='$uid' and pwd='$pwd'";

这样,您将从包含角色的数据库返回的信息中获得另一个结果。

© www.soinside.com 2019 - 2024. All rights reserved.