Mysqli不会从数据库中检索密码

时间:2014-02-18 04:56:46

标签: php mysql database mysqli passwords

我开始学习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之间存在细微的差别,但是我很难在线找到类似的问题/解决方案。

1 个答案:

答案 0 :(得分:0)

您不应该尝试从表中检索密码,而是检查密码是否匹配。因此使用

SELECT username FROM users 
WHERE username = '$user' AND password = PASSWORD('$oldpassword')