0

誰でも次のエラーで私を助けてくれますか。私は自分のウェブサイトの登録およびログイン機能を作成しています。ローカルデータベースに接続し、そこでユーザーを作成しました。ログインできること、およびユーザー名とパスワードが認識されることをテストすると、期待どおりに動作します。しかし、私はこのエラーが発生します

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 17 in C:\xampp\htdocs\LoginAndRegistration\core\functions\users.php on line 34

そして、これは私が34行目に持っているものです

return (mysql_result(mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? true : false;

次の関数の一部です

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_result(mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? true : false;
}

私は何年もの間それを見つめてきましたが、問題を理解できないようです. 誰が私が間違っているのか教えてもらえますか? ありがとう

4

6 に答える 6

1

このエラーは、クエリが失敗したことを意味します。クエリが成功したかどうかを常に確認します。

$q = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");
if ($q) {
    if ($rows = mysql_num_rows($q)) {
        // Continue operation, or set a flag
    } else {
        // No matching rows, throw an Exception or set a flag
    }
} else {
    // Something is wrong
    die(mysql_error());
}
于 2013-04-21T11:12:06.190 に答える
1

そのコード行は、ユーザー名とパスワードが存在するかどうかを確認したいようです。コードを次のように変更する必要があります。

return (mysql_result(mysql_query("SELECT COUNT(id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? true : false;

また、(id) を列の ID 名に変更します。

于 2013-04-21T11:40:39.807 に答える
0

あなたのエラーは、一致するユーザー名とパスワードがなかったため、クエリがまったく結果を返さなかったという事実に起因する可能性があります。

私は本当に多くの機能を互いに詰め込みません。非常に複雑に見え、エラー処理を追加する余地がなく (ケースで発生するはずのケースを処理するなど)、PHP のエラー報告が台無しになります。

内容を複数の行に広げます。これにより、コードを読むすべての人にとって物事が明確になり、デバッグ活動が強化されます。また、行の長さが短いため、一般的には良い考えです。

于 2013-04-21T11:13:33.347 に答える