首页 > 解决方案 > 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我上面编写的语句。我该如何解决?也许我这样做完全错了,还有另一种方法来做这个管理员/用户登录的事情?

顺便说一句:我知道我在这里以纯文本形式存储密码,但现在我只是在试验代码,不打算将其上传到网站。

标签: php

解决方案


这是您更新的代码。

您需要获取 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();
        }

   }

希望能帮助到你。


推荐阅读