0

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

  • 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'";
4

2 回答 2

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

Q.2)是的。有办法做到这一点。但是问题有点不完整添加一些代码。

于 2016-02-07T14:26:59.953 回答
0

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

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 = "SELECT * FROM users WHERE username = '$id' AND password = '" 。sha1($pw) ."'"

D)您将无法看到此消息echo "<h1>User Menu Loading...</h1>";,因为您在之后立即进行了重定向

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

于 2016-02-08T17:43:34.023 回答