php - PHP登录表单不读取用户级别
问题描述
我想制作一个可供普通用户和管理员使用的登录表单。代码应该区分普通用户和管理员,并基于它,在用户登录后启动一个新会话(管理员或用户会话)。在我的数据库表中,我添加了“级别”列,该列应确定用户是否为管理员(例如:如果用户级别为 3,则他们是管理员)。
这是我的login.php
文件:
if (isset($_POST['submit'])) {
include_once 'database.php';
$username = $_POST['username'];
$password = $_POST['password'];
if (!$username or !$password) {
header('Location: login.php');
} else {
$execution = "SELECT level FROM users WHERE name = '$username' AND password = '$password';";
$result = mysqli_query($database, $execution);
if (mysqli_num_rows($result) == 1) {
session_start();
$_SESSION['user'] = $username;
header('Location: login.php');
exit();
} elseif (mysqli_num_rows($result) == 3) {
session_start();
$_SESSION['admin'] = $username;
header('Location: index.php');
exit();
} else {
header('Location: login.php');
exit();
}
}
}
该代码不起作用,因为当我尝试使用数据库中具有 LEVEL 3 的用户登录时,它仍然会启动正常的用户会话并且不会执行elseif
我上面编写的语句。我该如何解决?也许我这样做完全错了,还有另一种方法来做这个管理员/用户登录的事情?
顺便说一句:我知道我在这里以纯文本形式存储密码,但现在我只是在试验代码,不打算将其上传到网站。
解决方案
这是您更新的代码。
您需要获取 level 的值才能应用权限。
session_start();
if ($result->num_rows > 0){
if($row['level'] == 1){
$_SESSION['user'] = $username;
header('Location: login.php');
exit();
}elseif( $row['level'] == 3){
$_SESSION['admin'] = $username;
header('Location: index.php');
exit();
}else{
header('Location: login.php');
exit();
}
}
希望能帮助到你。
推荐阅读
- git - Git:重命名和移动目录后“致命:远程端意外挂断”和“树中的错误”
- python - 如何附加到多维列表
- javascript - 使用 Promises 和 Fetch API javascript 获取多个文件
- java - 将顶部菜单添加到以 JavaFX 为中心的网格窗格
- core-animation - 金属可绘制的沉思...呃
- c++ - 在估计 OpenCV C++ 中的基本矩阵之前对对应点进行归一化的正确方法是什么?
- android - React Native - android 7、7.1 中的请求位置不起作用,返回超时
- angular - 我可以在 *ngFor 中将字符串转换为日期吗?
- asp.net - 如何将 Recombee 与 ASP.NET 集成
- javascript - Bootstrap 3 Carousel 指示器无法正常工作且无法自动滑动