验证MySQL的登录详细信息

时间:2013-08-10 19:44:10

标签: php mysql

我目前正在开发自己的CMS。

由于某种原因,似乎它不接受我的登录信息......代码是:

<?php

session_start();

include_once('../includes/connection.php');

if (isset($_SESSION['logged_in'])) {
    // display index
} else {
    if (isset($_POST['username'], $_POST['password'])) {
        $username = $_POST['username'];
        $password = md5($_POST['password']);

        if (empty($username) or empty($password)){
            $error = 'Please enter all of the fields!';
        } else {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password = ?");

            $query->bindValue(1, $username);
            $query->bindValue(2, $password);

            $query->execute();

            $num = $query->rowCount();

            if ($num == 1) {
             // user entered correct
                $_SESSION['logged_in'] = true;

                header('Location: index.php');
                exit();
            } else {
            //user entered false
                $error = "Incorrect details!";
            }
        }
    }
    ?>

    <html>
    <head>
        <title>CMS</title>
        <link rel="stylesheet" type="text/css" href="../assets/style.css" />
    </head>

    <body>
        <div class="container">
            <a href="index.php" id="logo">CMS</a>

            <br /><br />

            <?php if (isset($error)) { ?>

            <small style="color:#aa0000;">
            <?php echo $error; ?>
            <br /><br />
            </small>

            <?php } ?>

            <form action="index.php" method="post" autocomplete="off">
            <input type="text" name="username" placeholder="Username" />
            <input type="password" name="password" placeholder="Password" />
            <input type="submit" value="Login" />
            </form>

        </div>
    </body>
</html>

<?php
}

?>

连接是:

> <?php
> 
> try { $pdo = new PDO('mysql:host=localhost;dbname=website', 'root',
> '');  } catch (PDOException $se) {    exit('Database error.'); }
> 
> 
> ?>

每当我尝试使用正确的详细信息登录时,它只会说''错误的详细信息''

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您正在检查查询是否返回了结果。但是,您执行此操作的方式不适用于SELECT查询。它用于例如删除。

请改为尝试:

<?php
if ($res = $conn->query($sql))
{
    if ($res->fetchColumn() > 0)
    {
        // user entered correct
    }
    else
    {
        //user entered false
    }
}

有关此内容的更多信息,请参阅PHP Manual

我想在手册中添加这句话:

  

对于大多数数据库,PDOStatement :: rowCount()不返回   受SELECT语句影响的行数。相反,使用   PDO :: query()发出带有相同的SELECT COUNT(*)语句   将谓词作为预期的SELECT语句,然后使用   PDOStatement :: fetchColumn()来检索将要的行数   被退回然后,您的应用程序可以执行正确的操作。