这是显示我的登录系统中必须显示的错误的代码:
<?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显然应该说'用户名或密码不正确'。但是,当我尝试使用正确的用户名和密码(从我的数据库)登录时,它还会显示“用户名或密码不正确”。那么这段代码有什么问题呢?
答案 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;