PHP登录添加角色

时间:2016-10-26 20:05:28

标签: php

<?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>';

}
?>

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

3 个答案:

答案 0 :(得分:2)

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

首先为&#34;角色&#34;添加一列在您的数据库表中。

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

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

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

答案 1 :(得分: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();
    
  4. 如果您想要对代码进行更详细的审核,可以在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表中的唯一角色。如果您尝试删除仍分配给任何用户数据库的角色,则不允许使用该角色。

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

答案 2 :(得分:-1)

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

因此,角色表将包含以下内容: role_id,role_name 你当然可以在这里获得其他信息,例如user_level(int),但这是一个更高级的项目。

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

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

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