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


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

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

  • 0 = 正常
  • 1 = 员工
  • 2 = 管理员

在登录表单中,我设法检查密码(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. 有没有办法让这三种类型的用户都通过登录页面登录,并可以从两个不同的表中检索数据?

我已经尝试了很多方法,但总是出现空白屏幕或它说

密码不正确

即使密码正确。

变量

$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:首先检查数据库中的用户 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();

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

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

A( 你不应该使用 mysql 库,因为它不安全且已弃用(即将被删除(:为什么我不应该在 PHP 中使用 mysql_* 函数?你应该使用 mysqli 或 PDO 库。

B( sha1

不安全,你应该使用 password_hash(( 或 crypt(( 之类的东西,但我想 sha1 对于教育目的来说很好。

C( 问题 1:您无需检查 ID。
您使用while ($row = mysql_fetch_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 "<h1>User Menu Loading...</h1>";看到此消息,因为您有重定向

E( 问题 2:您需要澄清更多,是否有 2 或 3 张表(因为您提到有 3 种类型的用户(。