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

那行代码看起来像您要检查用户名和密码是否存在。您需要将代码更改为:

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 回答
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 回答
0

尝试这个

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

$username = sanitize($username);
$password = md5($password);
$query = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'") ;
if (mysql_num_rows($query) > 0 ) {

    $data = true ;
}else {

    $data = false ;
}
return $data ;
}
于 2013-04-21T11:18:55.320 回答
0

您的错误可能来自查询根本没有返回任何结果,因为没有匹配的用户名和密码。

我真的不会把那么多功能塞进彼此。它看起来过于复杂,它没有留下任何空间来添加错误处理(例如处理应该在您的情况下发生的情况),并且它弄乱了 PHP 的错误报告,因为发生的任何错误都将在同一代码行上。

将内容分散到多行中。它使任何阅读您的代码的人都更清楚,增强了调试活动,并且由于行长较短,通常是一个好主意。

于 2013-04-21T11:13:33.347 回答
0

您收到警告(不是错误),因为mysql_query有时不会返回任何行,因此在没有行时尝试使用mysql_result获取第一行会引发警告。

你可以试试:

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

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

    $query = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");
    if (mysql_num_rows($query) > 0)
        return true;
    else
        return false;
}
于 2013-04-21T11:13:52.497 回答
0

撇开折旧参数,使用 mysql_num_rows 而不是 mysql_result。

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

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

    return (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'")) == 1) ? true : false;
}
于 2013-04-21T11:14:10.083 回答