Php mysql查询未给出正确的输出

Php mysql查询未给出正确的输出,php,mysql,Php,Mysql,我已经为用户创建了一个表单来更改密码,编程如下- include("../database.php"); if(isset($_SESSION['user_name'])) { $password=$_POST['new_password']; $query="select password from login where username = '".$_SESSION['user_name']."' and password='".md5($password)."'";

我已经为用户创建了一个表单来更改密码,编程如下-

include("../database.php");
if(isset($_SESSION['user_name']))
{
    $password=$_POST['new_password'];
    $query="select password from login where  username = '".$_SESSION['user_name']."' and password='".md5($password)."'";
    echo $query."<br>\n";
    $result=mysql_query($query) or die(mysql_error());
    echo $result."<br>\n";
    echo "abc<br>\n";
    echo mysql_num_rows($result)."<br>\n";
    if(mysql_num_rows($result))
    {   
        echo "def";
        $row=mysql_fetch_row($result);
        $pass=$row['password'];
        echo $pass;
        if($pass==$password)
        {
            $query2="UPDATE login SET password='$password' WHERE username='$_SESSION[user_name]'";
            echo $query2;
            echo "Password changed successfully";
        }
        else
        {
            echo "You entered wrong current password";
        }
    }
    else
    {
        echo "here";
    }
}
else
{
    header('Location:index.php');
}
include(“../database.php”);
如果(isset($\u会话['user\u name']))
{
$password=$\u POST['new\u password'];
$query=“从用户名为“”的登录名中选择密码”。$\u会话['user\u name']”和密码为“”。.md5($password)。“”;
回显$query。“
\n”; $result=mysql\u query($query)或die(mysql\u error()); 回显$result。“
\n”; 回显“abc
\n”; 回显mysql\u num\u行($result)。“
\n”; if(mysql_num_行($result)) { 回声“def”; $row=mysql\u fetch\u row($result); $pass=$row['password']; 回音$pass; 如果($pass==$password) { $query2=“更新登录设置密码='$password',其中用户名='$\会话[用户名]”; echo$query2; 回显“密码更改成功”; } 其他的 { echo“您输入了错误的当前密码”; } } 其他的 { 呼应“这里”; } } 其他的 { 标题('Location:index.php'); }

它给出$result=0。所以它不会更新用户密码。它直接转到else部分,并以书面形式给出输出“here”。解决方案是什么。

您使用的是新密码而不是密码字段来查找现有用户

我猜应该是这样的(假设您的用户在“password”字段中也提供了旧密码):


如果不是这样,那么您至少应该为旧密码添加一个字段,并使用该字段在数据库中查找用户。

您正在使用一个变量-密码-用于两件事:旧密码(在数据库中以MD5散列形式保存,带有用户ID)和新密码,用户正在将其传递到例程中

让它们成为两个不同的变量。第一个查询应该从数据库中密码的MD5中设置“old_password”。您可以使用它来确认用户知道旧密码


如果一切正常,则将新密码保存在数据库中。

您正试图通过新密码的哈希值获取用户

$password=$_POST['new_password'];
$query="select password from login where  username = '".$_SESSION['user_name']."' and password='".md5($password)."'"
如果您的表单包含旧密码输入,您应该分配到:

$password=md5($_POST['old_password']);
$query="select password from login where  username = '".$_SESSION['user_name']."' and password='".$password."'";
并将更新查询更改为:

$newPassword=md5($_POST['new_password']);
$query2="UPDATE login SET password='$newPassword' WHERE username='$_SESSION[user_name]'";

很难确定,但您正在使用
$\u POST['new\u password']
进行选择,然后使用相同的值进行更新。当然,您应该使用SELECT的现有密码,因为此时不会更改其密码?您的查询是什么样子的?用户名和密码是否确实存在于数据库更改
“$”会话[用户名]。“
$newPassword=md5($_POST['new_password']);
$query2="UPDATE login SET password='$newPassword' WHERE username='$_SESSION[user_name]'";