0

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

$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!";
        }
    }

每次我得到“输入的用户名不存在”,即使我指定了用户名。我确定 !$results 表示不等于?我也试过一个 if (mysql_num_rows($result)==0), mysql_num_rows 不存在。

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

谢谢您的帮助。

4

4 回答 4

0

您需要执行以下操作:

$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 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

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

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

使用 mysql_num_rows() 找出 SELECT 语句返回了多少行,或使用 mysql_affected_rows() 找出有多少行受到 DELETE、INSERT、REPLACE 或 UPDATE 语句的影响。

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

于 2012-05-03T17:48:40.673 回答
0

根据您服务器的 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 来测试我的查询以确保它们工作,更容易排除故障。您可以通过将查询保存在变量中并回显它来查看您的查询是否正确编写,这样您将看到它是否正确输入。

IE。

$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);
于 2012-05-04T00:28:20.500 回答
-1

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

首先,mysql_query当使用 for 时,SELECT仅针对错误返回 false。如果结果为空,则执行成功。

与 an 一起使用时,UPDATE它返回true成功,返回 false error。代码似乎出错了。因为当它返回 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 环境中使用它。没有输入转义。

于 2012-05-03T17:51:07.453 回答
-2

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

于 2012-05-03T17:48:22.563 回答