检查用户名是否在数据库php&;从两个表中获取要登录的数据

检查用户名是否在数据库php&;从两个表中获取要登录的数据,php,mysqli,login,multiple-users,Php,Mysqli,Login,Multiple Users,我正在创建一个有三种不同访问级别的网站 0=正常 1=工作人员 2=管理员 在登录表单中,我设法检查了密码(SHA1)是否与数据库中的密码(已加密)匹配,但没有检查用户id 注册用户或职员/管理员后,其详细信息将存储到 包含更多详细信息(姓名、出生日期等)的单独表格 问题 我将如何在代码中实现这一点 $result = mysql_query( $qs ) or die( mysql_error() ); while( $row = mysql_fetch_array( $result )

我正在创建一个有三种不同访问级别的网站

  • 0=正常
  • 1=工作人员
  • 2=管理员
在登录表单中,我设法检查了密码(SHA1)是否与数据库中的密码(已加密)匹配,但没有检查用户id

注册用户或职员/管理员后,其详细信息将存储到 包含更多详细信息(姓名、出生日期等)的单独表格

问题
  • 我将如何在代码中实现这一点

    $result = mysql_query( $qs ) or die( mysql_error() );
    while( $row = mysql_fetch_array( $result ) ){
        $stored_password = $row['Password'];
        if( $stored_password == sha1( $pw ) ){
            $_SESSION['Status'] = $row['Status'];
        if( $_SESSION['Status'] == 0 ){
            echo "<h1>User Menu Loading...</h1>";
            echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://***/'>";
        }else{
            echo "<h1>Incorrect Password.</h1>";
            echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://**/login.php'>";
        }
    }
    
    如果没有,我想我应该创建单独的登录区域

    谢谢(我正在将mysql改为mysqli

    编辑 添加了$qs的最近一次尝试

    问题1)要检查用户id:首先检查数据库中的用户id,然后检查密码

    $db=new mysqli("host", "sqlusername","sqlpassword","database");
    $stmt = $db->prepare("select * from your_table_name where user_ID = ?");
    $stmt->bind_param("s",$un);
    $stmt->execute();
    $result=$stmt->get_result();
    
    问题2)是。有一种方法可以做到这一点。但问题有点不完整。添加一些代码。Q.1)要检查用户id,请首先检查数据库中的用户id,然后检查密码

    $db=new mysqli("host", "sqlusername","sqlpassword","database");
    $stmt = $db->prepare("select * from your_table_name where user_ID = ?");
    $stmt->bind_param("s",$un);
    $stmt->execute();
    $result=$stmt->get_result();
    

    问题2)是。有一种方法可以做到这一点。但问题有点不完整,请添加一些代码。

    我会在您编辑问题时更新我的答案,以包含更多信息

    A) 您不应该使用mysql库,因为它不安全且已弃用(即将删除): 您应该使用mysqli或PDO库

    B) sha1是不安全的,您应该使用类似于或的东西,但我想sha1可以用于教育目的

    C) 问题1:您不需要检查ID。
    您在($row=mysql\u fetch\u array($result)){时使用
    ,但由于您正在寻找唯一的用户名/组合,因此应该只有一个结果或没有:

    if ($record = mysql_fetch_array($result)) {
    
    您似乎只是在检查密码是否正确,但实际上应该检查用户名和密码的唯一组合(如果两个用户拥有相同的密码怎么办?
    sha1()
    在这方面对您没有帮助

    所以你应该有这样的东西:

    $qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
    
    或者,如果您使用实际员工ID作为用户名:

    $qs=“从用户名为“$id”和密码为“.sha1($pw)”的用户中选择*。”

    D) 您将无法看到此消息
    echo“用户菜单加载…”;
    ,因为您在加载后立即有一个重定向


    E) 问题2:您需要进一步澄清,是否有2个或3个表格(因为您提到有3种类型的用户)。

    我将在您编辑问题时更新我的答案,以包含更多信息

    A) 您不应该使用mysql库,因为它不安全且已弃用(即将删除): 您应该使用mysqli或PDO库

    B) sha1是不安全的,您应该使用类似于或的东西,但我想sha1可以用于教育目的

    C) 问题1:您不需要检查ID。
    您在($row=mysql\u fetch\u array($result)){
    时使用
    ,但由于您正在寻找唯一的用户名/组合,因此应该只有一个结果或没有:

    if ($record = mysql_fetch_array($result)) {
    
    您似乎只是在检查密码是否正确,但实际上应该检查用户名和密码的唯一组合(如果两个用户拥有相同的密码怎么办?
    sha1()
    在这方面对您没有帮助

    所以你应该有这样的东西:

    $qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
    
    或者,如果您使用实际员工ID作为用户名:

    $qs=“从用户名为“$id”和密码为“.sha1($pw)”的用户中选择*。”

    D) 您将无法看到此消息
    echo“用户菜单加载…”;
    ,因为您在加载后立即有一个重定向


    E) 问题2:您需要进一步澄清,是否有2个或3个表(因为您提到有3种类型的用户)。

    您应该包括您的数据库结构或一些查询请使用
    $qs
    值更新问题(您现在使用的查询)@bg17aw完成-添加了我最近的一次尝试。谢谢sorry@Veej,我认为$qs是用于第2个问题的。您还应该包括用于第1个问题的$qs。您还应该提供数据库结构,或者至少更好地解释它。您应该包括您的数据库结构或一些查询请使用
    $qs
    的值(您当前使用的查询)@bg17aw完成-添加了我最近的一次尝试。谢谢sorry@Veej,我认为$qs是你在第2题中使用的。你还应该包括你在第1题中使用的$qs。你还应该提供数据库结构,或者至少更好地解释它。嘿,所以我和我的老师谈了这个问题,他说我应该给我们一个用户标签le也是,因为这有助于解决问题-这是$qs将从用户表中选择用户名、密码和状态,而不是试图从两个不同的表中查找它。他还提到,如果可能的话,我应该更改sha1,我之前已经阅读了您的答案,所以我告诉了他关于crypt,他说那很好,非常感谢!!嘿,我和我的老师谈了这个问题,他说我也应该给我们一个用户表,因为这有助于解决问题-这是$qs将从用户表中选择用户名、密码和状态,而不是试图从两个不同的选项卡中查找它les他还提到,如果可能的话,我应该更换sha1,我之前看过你的答案,所以我告诉了他关于crypt的事,他说那很好,非常感谢!!