更改密码表单,如果没有结果

时间:2012-05-03 17:45:34

标签: php mysql

出于某种原因,我无法解决这个问题。

$result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='$username'");

    if(!$result){
        echo "The username entered does not exist!";
    }
    else {

        if($newpassword == $confirmnewpassword){
        $sql = mysql_query("UPDATE cf_user SET `strPassword` = '$newpassword' WHERE `strUserId` = '$username'");        
        }

        if(!$sql){
        echo "Congratulations, password successfully changed!";
        }
        else{
        echo "New password and confirm password must be the same!";
        }
    }

每次我收到“输入的用户名不存在”,即使我指定了用户名。我确定!$结果意味着不等于?我也尝试了一个if(mysql_num_rows($ result)== 0),mysql_num_rows不存在。

我在没有变量的情况下手动测试了sql命令,得到了结果。我已经回应了表单结果,它们正如预期的那样。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您需要执行以下操作:

$result = mysql_query("SELECT user_id FROM cf_user WHERE `strUserId`='$username' AND strPassword='".md5($password)."' LIMIT 0,1");

if(mysql_num_rows($result)==0){
    echo "The username entered does not exist!";
}
....

$result不是实际结果,它是结果集的资源链接。

从PHP手册:

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,   mysql_query()成功时返回TRUE,错误时返回FALSE。

     

返回的结果资源应该传递给mysql_fetch_array(),   以及用于处理结果表的其他函数,以访问   返回数据。

     

使用mysql_num_rows()来查找为a返回的行数   SELECT语句或mysql_affected_rows()来查找多少行   受到DELETE,INSERT,REPLACE或UPDATE语句的影响。

     

mysql_query()也会失败,如果用户没有,则返回FALSE   有权访问查询引用的表。

答案 1 :(得分:1)

根据您服务器的php版本,查询中的变量可能无法正确插入。

你有:

    $result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='$username'");

尝试使用php连接运算符(句点),可能有所帮助(不是居高临下,只是试试这个,可能是问题。

    $result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='".$username."' ");

当然,这是对你所说的部分的回应,即如果删除变量就可以。所以我假设您的查询在变量区域内存在错误。

我使用premiumsoft NaviCat来测试我的查询以确保它们正常工作,更容易进行故障排除。您可以通过将查询保存在变量中并回显它来查看您的查询是否正确写入,这样您就可以看到它是否正确输入。

$query = "SELECT `strPassword` FROM cf_user WHERE `strUserId`='".$username."' ";

// echoes to browser to see final sql statement.  Don't use in production environment, and make SURE to delete then going live!!!  It will expose you database names and field names to whoever runs the function...
echo $query;

$result = mysql_query($query);

答案 2 :(得分:0)

首先要做的事情是:代码段的编码不是很好。

mysql_query开头,用于SELECT时,仅对错误返回false。如果结果为空,则会成功执行。

UPDATE一起使用时,会在成功时返回true,在error时返回false。代码似乎犯了一个错误。因为当它返回false时,它表示您已成功更改密码,而不是这种情况。

需要做的是:

$result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='$username'");

if ($result !== FALSE) { //not an error
    if (mysql_num_rows($result) > 0) { //some rows have been returned
        if ($newPassword == $confirmPassword) {
            $query = mysql_query("UPDATE STATEMENT HERE");
            if ($query === TRUE) {
                die('Password changed');
            } else {
                die(mysql_error());
            }
        } else {
            die('Passwords don't match);
        }
    } else { //no rows returned
        die('Username not found');
    }
} else { //error
    die(mysql_error());
}

请注意上面的代码只是一个示例,我不建议在PROD环境中使用它。没有输入转义。

答案 3 :(得分:-2)

尝试var_dump($ result)查看实际结果(如果是密码)