mysql查询没有给出正确的输出

时间:2013-10-29 12:35:05

标签: 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)."'";
    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');
}

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

3 个答案:

答案 0 :(得分:1)

您正在使用一个变量 - 密码 - 用于两件事:旧密码(在db中使用用户ID保存为MD5哈希)和新密码(将从用户传递到您的例程中)。

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

如果一切都结束,则将新密码保存在数据库中。

答案 1 :(得分:0)

您正在使用new_password而不是密码字段来查找现有用户。

我想它应该是这样的(假设您的用户也在字段'password'中提供旧密码):

$password=$_POST['password'];
    $query="select password from login where  username = '".$_SESSION['user_name']."' and password='".md5($password)."'";

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

答案 2 :(得分:0)

您正在尝试通过新密码的哈希来获取用户

$password=$_POST['new_password'];
$query="select password from login where  username = '".$_SESSION['user_name']."' and password='".md5($password)."'"

如果您的表单包含old_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]'";