我在PHP中有这个功能:
function login($email, $password) {
$email = sanitize_data($email);
$password = sanitize_data($password);
return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `registration` WHERE `email` = '$email' AND `password` = '$password'"),0) === 1) ? true : false;
}
我从条件语句中调用它,我确信它是正常的,因为如果我将true更改为false,那么事情就会继续进行。我很确定错误就在这里,我已经多次检查了我的变量而且我是MySQL的新手,所以我可能使用了错误的命令或其他东西。
如果查询在电子邮件和密码的组合中找到至少一行但每次都返回false,则该函数应该返回true。
这是sanitize_data()函数,即使我已经尝试摆脱它并且没有发生任何事情:
function sanitize_data ($data) {
return mysql_real_escape_string($data);
}
其余的相关代码:
if (empty($_POST) === false) {
$email = $_POST['email'];
$password = $_POST['password'];
if(empty($email) === true || empty($password) === true) {
$errors[] = 'You need to enter a username and a password';
} else if (email_exists($email) === false){
$errors[] = 'Your email is not registered';
} else {
if(login($email, $password) === false) {
$errors[] = "That username/password combination doesn't exist";
}
}
}
HTML:
<form action='' method='POST'>
<input type='text' name='email' placeholder='E-Mail' class='form-email' />
<input type='password' name='password' placeholder='Password' class='form-password' />
<input type='submit' name='sbmit' class='form-submit' />
</form>
答案 0 :(得分:1)
“=== 1”正在检查一个不是至少一个,不是吗?
你试过sql语句f.e.在phpmyadmin或类似的东西?
您是否尝试将单行单独分开以使调试更容易?
打印出你生成的sql?
答案 1 :(得分:1)
您的SQL Query
查看正常执行的SQL Query
,请参阅SQL Fiddle
我认为严格比较===
可能会破坏您的代码
尝试使用
mysql_result(mysql_query("SELECT COUNT(`id`) FROM `registration` WHERE `email` = '$email' AND `password` = '$password'"),0) == 1
并且还避免使用mysql_*
它已被弃用且易受SQL注入攻击