我有以下用于登录页面的 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/