PHP 登录页面无法正常工作

标签 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';
        }               
    }
}
?>

最佳答案

如果您输入的密码与数据库中存储的密码匹配,则此操作将不起作用,因为您正在使用 md5() 函数对输入的密码进行哈希处理。

假设密码是“password”,在此代码中,将存储的值“password”与翻译为“5f4dcc3b5aa765d61d8327deb882cf99”的 md5 哈希进行比较,就像使用以下 if 条件:

"password" == "5f4dcc3b5aa765d61d8327deb882cf99"

评估结果为 false。

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

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

关于PHP 登录页面无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41190149/

相关文章:

php - 一切正常,但注册不起作用

php - 表单不提交任何东西

javascript - jquery 按钮类更改

sql - MySQL - 分解/拆分输入到存储过程

php - 使用 PHP 获取 MySQL table.column 命名记录

php - MySQL,我怎样才能使这个查询更快?

php - php 如何判断是否按下了未知 ID 的按钮

php - 为我的 ERP 系统进行销售统计,但性能很差

php - 产品的 Javascript 图片框

mysql - 从同一列中选择数据