Php登录页面无法正常工作

时间:2016-12-16 18:13:33

标签: php mysql

我有以下用于登录页面的php脚本。问题是,每当我提交密码时,页面都显示“密码不匹配”。我检查了存储在数据库中的密码,它与我输入的密码字段匹配。任何人都可以纠正我在哪里犯了错误? 任何帮助将不胜感激。

<?php
if(isset($_POST['username']) && isset($_POST['password'])){
    $username= htmlentities($_POST['username']);
    $password1= htmlentities($_POST['password']);
    $password= md5($password1);
    $query= mysqli_query($connect, "SELECT * FROM `admin` WHERE `username` = '$username'");
    $numrow = mysqli_num_rows($query);
    if($numrow == 0){
        $error = 'Please enter correct username';
    }
    else if($numrow == 1){
        $run = mysqli_fetch_array($query);
        $dbid =$run['id'];
        $dbname =$run['name'];
        $dbusername =$run['username'];
        $dbpassword =$run['password'];
        $dbemail =$run['email'];
        $dbcourse =$run['course'];
        if($password == $dbpassword){
            $_SESSION['id'] = $dbid;
            $_SESSION['name'] = $dbname;
            $_SESSION['username'] = $dbusername;
            $_SESSION['password'] = $dbpassword;
            $_SESSION['email'] = $dbemail;
            $_SESSION['course'] = $dbcourse;    
            header('Location:admin.php?add='.$dbid);
        } else {
            $error = 'password does not match';
        }               
    }
}
?>

1 个答案:

答案 0 :(得分:0)

如果您输入的密码与存储在数据库中的密码匹配,那么这将无法正常工作,因为您使用md5()功能对输入的密码进行哈希处理。

在此代码中比较存储的值&#34;密码&#34;到md5哈希,转换为&#34; 5f4dcc3b5aa765d61d8327deb882cf99&#34;就像使用以下if条件:

"password" == "5f4dcc3b5aa765d61d8327deb882cf99"

评估为false。

现在,如果您删除了输入密码的行并且只是比较了纯文本值,那么它会起作用,但这很荒谬。您需要做的是将存储在数据库中的密码替换为自身的哈希值,并使用更强大的哈希函数,例如sha1()

要快速获取字符串的哈希值,请转到http://www.sha1-online.com。将用户记录更新为sha1哈希,并将md5()替换为sha1()