为什么这个PHP代码不正确?

时间:2015-04-28 15:45:15

标签: php html mysql

这是显示我的登录系统中必须显示的错误的代码:

<?php

include 'session.php';

if (empty($_POST) === false) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (empty($username) === true || empty($password) === true) {
        $errors[] = 'Please enter a username and password.';
    } else if (user_exists($username) === false) {
        $errors[] = 'The username or password is incorrect.';
    }
    print_r($errors);
}

?>

这是在数据库上执行查询的代码,我在上面的代码中使用的函数'user_exists'。

<?php

function user_exists($username) {
    $username = sanitize($username);
    return (mysql_result(mysql_query("SELECT COUNT(customerNumber) FROM customers WHERE username = '$username'"), 0) == 1) ? true : false;
}

?>

因此,当用户名/密码组合错误时,login.php显然应该说'用户名或密码不正确'。但是,当我尝试使用正确的用户名和密码(从我的数据库)登录时,它还会显示“用户名或密码不正确”。那么这段代码有什么问题呢?

1 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,此行会让您成为真正的问题,它会始终从此处返回false,因为行count上的客户0不等于{{1每次返回1时都会这样。

false

来自PHP手册用户注释

  如果mysql_query返回0行,

mysql_result()将抛出E_WARNING。   这与任何mysql_fetch_ *函数都不同,所以要小心   这个如果你在error_reporting()中打开了E_WARNING。你可能会   想在调用mysql_result()

之前检查mysql_num_rows()

按评论:

return (mysql_result(mysql_query("
        SELECT COUNT(customerNumber) FROM customers WHERE 
        username = '$username'"), 0) == 1) ? true : false;