1

我在 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 的新手,所以我可能使用了错误的命令或其他东西。

如果查询发现至少 1 行包含电子邮件和密码的组合,则该函数应该返回 true,但它每次都返回 false。

这是 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>
4

2 回答 2

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 注入攻击

于 2013-09-06T09:59:31.687 回答
1
  1. "=== 1" 正在检查一个而不是至少一个,不是吗?

  2. 您是否尝试过 phpmyadmin 中的 sql-statement fe 或类似的东西?

  3. 您是否尝试过将单行分隔成单行以使调试更容易?

  4. 打印出你生成的sql?

于 2013-09-06T09:07:54.827 回答