无法以注册用户身份登录(php和mysql)

时间:2013-03-05 00:13:30

标签: php mysql database login registration

我正在尝试登录和注册脚本。我成功完成了大部分工作;但是,在我注册用户后,我无法以该用户身份登录。也就是说,注册用户无法登录。任何帮助都将受到大力赞赏! :)

这是与特定问题相关的代码:

$login = login ($username, $password);
        if ($login === false) {
         $errors [] = 'That username/password combination is incorrect';
        } else {
           $_SESSION ['user_id'] = $login;
           header ('Location: index.php');
           exit (); 
    }       


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

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

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

我之前就像这样(下面)写了上面的查询。以这种方式编写它允许我登录,但“字面上”任何密码。

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

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

  $query1 = mysql_query("SELECT COUNT(user_id) FROM users WHERE username =     '$username'"); 

 $query2 =  mysql_query("SELECT COUNT(user_id) FROM users WHERE password = '$password'"); 

 return  (mysql_result($query1, 0) == 1) ? $user_id : false; 
 return (mysql_result($query2, 0) == 1) ? $user_id : false;

也就是说,我将查询分为两部分,但注意到密码查询完全无关紧要(即使我“注释掉了”)。

PS。我知道我应该使用PDO或Mysqli而不是mysql查询,并且md5不是那么安全。为了这个谜题,请忽略这些东西。

1 个答案:

答案 0 :(得分:2)

您真的应该以一种彻底处理查询结果的方式分解数据库查询操作。参与这样做的实践。它将为您节省大量调试数据库查询问题的时间。

此外,这里不需要两次查询数据库(我假设您正在使用user_id_from_username()函数调用。只需完全摆脱它并设计查询以获取所需信息一下子。

最后,您应该养成明确指定数据库连接的习惯。在这种情况下,我将DB连接传递给函数。

总而言之,你最终会得到类似的东西:

function  login ($username, $password, $db_conn) {
    $username = sanitize ($username);
    $password = md5($password);

    $query = "SELECT user_id FROM users WHERE username = '$username' AND password = '$password'";
    $result = mysql_query($query, $db_conn);

    if (false === $result) { // the query failed
        throw new Exception('Database failed with message: ' . mysql_error());
    }

    $rows = mysql_num_rows($result);
    if (0 === $rows) { // no record found
        return false;
    } else if ($rows > 1) { // too many records found.. really your DB indexes should disallow this
        return false;
    }

    $user_id = mysql_result($result, 0 , 'user_id');
    return $user_id;
}

当然你已经提到你知道你应该使用mysqli或PDO。我不能强烈地敦促你开始使用其中一个,因为mysql已被弃用,你会发现你必须尽快开始学习其中一个,所以你现在也可以开始。