检查用户名在数据库 php 中并从两个表中获取数据以登录

Check Username is in database php & get data from two tables to login

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

在登录表单中,我设法检查密码 (SHA1) 是否与数据库中的密码(已加密)相匹配,但没有检查用户 ID。

当用户或员工/管理员注册时,他们的详细信息将存储到 包含更多详细信息(姓名、出生日期...)的单独表格。

问题

  1. 如何在我的代码中实现它?

    $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'>";
        }
    }
    
  2. 有没有办法让这三类用户都通过登录页面登录,并从两个不同的表中检索数据?

我已经尝试了很多方法,但总是出现黑屏或显示

incorrect password

即使密码正确。

变量

$un = $_POST['User_ID'];
$sf = $_POST['Staff_ID'];
$pw = $_POST['Password'];
$st = $_POST['Status'];

如果不是那么我想我应该创建单独的登录区域。

谢谢(我目前正在将 mysql 更改为 mysqli

编辑

添加了最近的 $qs

$qs="SELECT Cadets.Cadet_ID, Cadets.Password, Cadets.Status, 
        Staff.Staff_ID, Staff.Password, Staff.Status, 
 FROM   Cadets, Staff
 WHERE  Cadets.Cadet_ID ='$un' AND Staff.Staff_ID = '$sf'";

Q.1) 查询用户id: 先查询数据库中的userid,再查询密码

$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();

Q.2) 是的。有一种方法可以这样做。但是问题有点不完整添加一些代码。

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

A) 您不应使用 mysql 库,因为它不安全且已弃用(即将删除):Why shouldn't I use mysql_* functions in PHP? 您应该使用 mysqli 或 PDO 库。

B) sha1 不安全,你应该使用类似 password_hash() or crypt() 的东西,但我想 sha1 可以用于教育目的。

C) 问题一:不需要查ID。
您使用 while ($row = mysql_fetch_array($result)) { 但由于您正在寻找唯一的 username/combination,因此应该只有一个结果或 none:

if ($record = mysql_fetch_array($result)) {

您似乎只检查密码是否正确,但实际上您应该检查用户名和密码的唯一组合(如果两个用户的密码相同怎么办?sha1() 对您没有帮助那里。

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

$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"

或者如果您使用实际员工 ID 作为用户名:

$qs = "SELECT * FROM users WHERE username = '$id' AND password = '" 。 sha1($pw) ."'"

D) 您将无法看到此消息 echo "<h1>User Menu Loading...</h1>";,因为您在

之后立即进行了重定向

E) 问题 2:你需要再说明一下,是 2 还是 3 个表(因为你提到有 3 种类型的用户)。