<?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仍在学习,脚本工作正常(但缺少加密)登录的下一步是添加角色,但我不知道在哪里添加或调整我的代码!如果有人有建议,欢迎他们!
根据您在评论中所说的内容:
首先在数据库表中添加“role”列。
那么您的PHP脚本可能只是将以下内容添加到成功的登录块中。
if($row['role'] == "Admin"){
header('Location: admin.php');
}elseif($row['role'] == "Student"){
header('Location: student.php');
}
正如其他人所说,你应该使用一个适当的身份验证系统来处理转义sql查询,安全性,密码哈希等问题。
我看到你的脚本有一些严重的问题:
password_hash()
。$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表中的唯一角色。如果您尝试删除仍分配给任何用户数据库的角色将不允许它。
这个答案假定您的用户只能有一个角色。如果您希望能够为用户分配多个角色,则必须学习如何在数据库中映射多对多关系。
要正确得到这一点,您需要在数据库中为角色添加一个单独的表,并在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'";
这样,您将从包含角色的数据库返回的信息中获得另一个结果。