PDO登录if语句

时间:2013-12-25 08:05:03

标签: php pdo

我正在尝试检查我的用户是否插入了正确的信息并且它给了我一个未定义的PDO错误。

我想确定如果用户填写了错误的密码/用户名,他们会收到我设置的错误,但现在就是这样。

<form method="POST">
    <input type="text" name="username" placeholder="username"><br />
    <input type="password" name="password" placeholder="password"><br />
    <input type="submit">
</form>

<?php
    if(isset($_POST['username'], $_POST['password'])){
        require'core/connect.php';

        $query = dbConnect()->prepare("SELECT username, password FROM users WHERE username = :username AND password = :password");
        $query->execute(array(
            ':username' => $_POST['username'],
            ':password' => $_POST['password']
            ));

        // check to see if username & password is correct
        if(!$query->prepare($_POST['username'])){
            echo 'username is incorrect.';
        }
        if(!$query->prepare($_POST['password'])){
            echo 'password is incorrect.';
        } else{
            if($query){
            header("Location: index.php");
            }
        }
    }
?>

2 个答案:

答案 0 :(得分:2)

你的逻辑错误。你应该做什么:

  • 第1步:按用户名
  • 获取用户
  • 第2步:检查密码

如果任一步骤失败,请拒绝登录。理想情况下使用相同的消息,以避免泄露用户名。

PDO错误本身是因为你在不应该被调用的情况下调用prepare()。准备语句意味着将实际的SQL语句发送到服务器,以便获得预先计划的可执行SQL语句。 (通过单独发送用户名或密码,您基本上发送的是无效的SQL。)

最后,您不应该以明文形式存储密码。如果您使用的是旧版本的PHP,请使用PHP 5.5中的PHP密码功能,或bcrypt()crypt()CRYPT_BLOWFISH):

答案 1 :(得分:0)

试试这个。您不需要单独检查用户名或密码

$query = dbConnect()->prepare("SELECT username, password FROM users WHERE username = :username AND password = :password");
$query->execute(array(
    'username' => $_POST['username'],
    'password' => $_POST['password']
    ));

if ($query->rowCount() == 0) {
    echo 'Username or password is incorrect'
} else {
    header("Location: index.php");
}