我有以下用于登录页面的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';
}
}
}
?>
答案 0 :(得分:0)
如果您输入的密码与存储在数据库中的密码匹配,那么这将无法正常工作,因为您使用md5()
功能对输入的密码进行哈希处理。
在此代码中比较存储的值&#34;密码&#34;到md5哈希,转换为&#34; 5f4dcc3b5aa765d61d8327deb882cf99&#34;就像使用以下if
条件:
"password" == "5f4dcc3b5aa765d61d8327deb882cf99"
评估为false。
现在,如果您删除了输入密码的行并且只是比较了纯文本值,那么它会起作用,但这很荒谬。您需要做的是将存储在数据库中的密码替换为自身的哈希值,并使用更强大的哈希函数,例如sha1()
。
要快速获取字符串的哈希值,请转到http://www.sha1-online.com。将用户记录更新为sha1
哈希,并将md5()
替换为sha1()