Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据用户级别从数据库获取和存储PHP会话变量_Php_Mysql - Fatal编程技术网

根据用户级别从数据库获取和存储PHP会话变量

根据用户级别从数据库获取和存储PHP会话变量,php,mysql,Php,Mysql,我有一个登录页面,根据用户级别将用户重定向到网站的不同部分。用户表没有他们的名字和姓氏。它包含他们的idnumber和password以及其他一些列 根据用户级别,用户的名字和姓氏存储在不同的表中。例如,在教师表中,它有名字等,在学生表中也有 我想获取登录用户的名称并将其存储在会话变量中,这样我就可以输出诸如“Hi,John”之类的内容 我试过了,但似乎不起作用。有没有更有效的方法来实现这一点,或者我走的是正确的道路 代码摘录 if (isset($_POST['login'])) {

我有一个登录页面,根据用户级别将用户重定向到网站的不同部分。
用户表
没有他们的名字和姓氏。它包含他们的idnumber和password以及其他一些列

根据用户级别,用户的名字和姓氏存储在不同的表中。例如,在
教师
表中,它有名字等,在学生表中也有

我想获取登录用户的名称并将其存储在会话变量中,这样我就可以输出诸如“Hi,John”之类的内容

我试过了,但似乎不起作用。有没有更有效的方法来实现这一点,或者我走的是正确的道路

代码摘录

if (isset($_POST['login'])) {

    $idnumber = mysqli_real_escape_string($con, $_POST['user-name']);
    $password = mysqli_real_escape_string($con, $_POST['user-password']);
    $result = mysqli_query($con, "SELECT * FROM users WHERE idnumber = '" . $idnumber . "' and password = '" . md5($password) . "'");

    if ($row = mysqli_fetch_array($result)) {
        $_SESSION['usr_id'] = $row['id'];
        $_SESSION['email'] = $row['email'];
        $_SESSION['userlevel'] = $row['userlevel'];
        $_SESSION['idnumber'] = $row['idnumber'];
        echo $_SESSION['usr_id'];
        
        if ($_SESSION['userlevel']=="1"){
            $loggedinusername = mysqli_query($con, "SELECT a.idnumber, b.firstnames, b.surname FROM users a LEFT JOIN educationdirectors b ON a.idnumber=b.idnumber WHERE idnumber = '" . $_SESSION['idnumber']. "'");
            if ($row = mysqli_fetch_array($loggedinusername)) {
                $_SESSION['idnumber'] = $row['firstnames'];
                header("Location: v1/ued/");
            } 

        } 
        else
        if ($_SESSION['userlevel']=="2"){
            header("Location: v1/ced/");
        }
        
    } else {
        $errormsg = "Incorrect Email or Password!!!";
    }
}

这种数据库设计有什么特别的原因吗?用户都有自己的名字(除非你允许机器人),那么为什么不将公共属性存储在这个表中呢。这会让其他表(教师)存储有关其角色的详细信息,而不是他们作为一个人的详细信息。我最初有一个不同的数据库设计,但最终采用了这种设计,因为这种设计的编码更容易,因为我不必为简单的查询不断进行连接。一旦获取用户记录进行验证,您应该在会话中存储所需的值,而不是不断地从数据库中获取它们。