使用PHP创建CMS,不会显示正确的输出,也不会登录

时间:2014-07-14 22:44:27

标签: php

我在youtube上关注本教程:how to create a 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 = 'All fields are reqired!';
        } else {
            $query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password = ?");

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

            $num = $query->rowCount();

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

                header('Location: index.php');
                exit();
            } else {
                $error = 'Incorrect details!';
            }
        }
    }

?>

<!doctype html>
<html>
<head>
    <title> CMS Tutorial</title>
    <link rel="stylesheet" type="text/css" href="../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; ?></small>
            <br /><br />
        <?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
}
?>

2 个答案:

答案 0 :(得分:1)

如果没有听到任何错误输出,空(md5(&#39;&#39;))将始终返回false。这使得以下代码无法确定密码字段是否为空:

    if (empty($username) or empty($password)) {

请改为尝试:

    if (empty($username) or empty($_POST['password'])) {

答案 1 :(得分:0)

您在isset($_POST['username'], $_POST['password'])为假时没有定义任何错误消息。

如果要输出错误消息,则需要包含相应的else部分。

if ( isset($_POST['username'], $_POST['password']) ) {
    // Handle checking username/password, do database stuff

} else {
    // Error message here
}

至于SQL登录查询不起作用,那是因为你永远不会执行它。绑定参数,然后检查行计数,甚至不运行它,这意味着结果将始终为零。

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

// Execute the query here
$query->execute();

$num = $query->rowCount();