检查用户名是否在数据库php&从两个表中获取数据以进行登录

时间:2016-02-07 13:50:33

标签: php mysqli login multiple-users

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

  • 0 =正常
  • 1 =员工
  • 2 = admin

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

当用户或员工/管理员注册时,他们的详细信息将被存储 具有更多细节的单独表格(Name,DateOfBirth,...)。

问题

  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. 这三种类型的用户是否可以通过登录页面登录并从两个不同的表中检索数据?

  3. 我尝试了很多方法,但一直是空白屏幕或者说

      

    密码错误

    即使密码正确。

    变量

    $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'";
    

2 个答案:

答案 0 :(得分: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)是的。有一种方法可以做到这一点。但问题是添加一些代码有点不完整。

答案 1 :(得分:0)

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

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

B)sha1不安全,您应该使用类似password_hash()crypt()的内容,但我认为sha1可以用于教育目的。

C)问题1:您不需要检查身份证件 您使用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 =&#34; SELECT * FROM users WHERE username =&#39; $ id&#39;和密码=&#39;&#34; 。 sha1($ pw)。&#34;&#39;&#34;

D)由于您在

之后立即重定向,因此无法看到此消息echo "<h1>User Menu Loading...</h1>";

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