我开始学习PHP并且正在使用mysqli开发一个简单的密码更改脚本。我一直在使用mysql教程作为参考。现在我遇到了一个问题,我的代码似乎无法从数据库中检索旧密码,并且我没有收到任何错误消息。
if($user){
//start password change
if ($submit){
$oldpassword = $_POST['oldpassword'];
$newpassword = $_POST['newpassword'];
$repeat_newpassword = $_POST['repeat_newpassword'];
//connect to db
$connect = mysqli_connect("localhost", "root", "****", "registration") or die ("Could not connect to database!" . mysqli_error($connect));
$queryget = mysqli_query($connect, "SELECT password FROM users WHERE username = '$user'") or die ("Query error" . mysqli_error($connect));
$row = mysqli_fetch_assoc($queryget);
$oldpassworddb = $row['password'];
//check fields are filled in
if ($oldpassword && $newpassword && $repeat_newpassword){
if ($oldpassword == $oldpassworddb){
if ($newpassword == $repeat_newpassword){
$querychange = mysqli_query ($connect, "UPDATE users SET password = '$newpassword' WHERE username = '$user'") or die ("Password query error" . mysqli_error($connect));
session_destroy();
die ("<a href = login.php>'Return to login.'</a>");
}
else
die ("New passwords don't match!");
}
else
die ("Old password doesn't match!");
}
else
echo "All fields must be filled in!";
}
每当我输入$oldpassword
时,它都会返回“旧密码不匹配”;即使我输入的旧密码与数据库中的密码匹配。我还检查了数据库密码,以确保没有任何空格或导致问题。
echo $oldpassword . "<br>";
echo $oldpassworddb . "<br>";
$count = mysqli_num_rows($queryget);
echo $count; die();
我用它来检查代码是否会打印来自DBs密码块的值,但它只返回$oldpassword
而$count
返回'0'。它肯定连接到数据库并且存在用户,因此我必须做出与查询有关的错误。
我非常感谢你的帮助。我想这是一个非常简单的修复,因为mysql和mysql之间存在细微的差别,但是我很难在线找到类似的问题/解决方案。
答案 0 :(得分:0)
您不应该尝试从表中检索密码,而是检查密码是否匹配。因此使用
SELECT username FROM users
WHERE username = '$user' AND password = PASSWORD('$oldpassword')