单击“登录”按钮后页面没有更改吗?

时间:2019-03-04 18:01:28

标签: php html

使用php和PDO创建一个登录页面,但是一旦我用正确的用户名和密码填写表格以登录系统并单击“登录”,除了框现在为空,就像没有输入用户名一样,没有任何更改和密码,有人可以告诉我发生了什么问题吗?

这是php代码:

<?php

session_start();
$server = "127.0.0.1";
$dbusername = "root";
$dbpassword = "";
$db = "movie1";
$message = "";
try
{
    $handle = new PDO("mysql:host=$server; dbname=$db", $dbusername, $dbpassword);
    $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if(isset($_POST["login"]))
    {
        if(empty($_POST["username"]) || empty($_POST["password"]))
        {
            $message = '<label>All fields are required</label>';
        }
        else
        {
            $query = "SELECT * FROM register WHERE username = :username AND password = :password";
            $statement = $handle->prepare($query);
            $statement->execute(
                array(
                    'username'     =>     $_POST["username"],
                    'password'     =>     $_POST["password"]
                )
            );
            $count = $statement->rowCount();
            if($count > 0)
            {
                $_SESSION["username"] = $_POST["username"];
                header("location:login_success.php");
            }
            else
            {
                $message = 'Wrong Data';
            }
        }
    }
}
catch(PDOException $error)
{
    $message = $error->getMessage();
}
?>

,这是它适用于的html表单:

<!DOCTYPE html>
<html lang="en">

<meta charset="UTF-8">
<title>log in</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<body>

<form class="w3-container w3-card-4" action="login.php" method="post">
    <h2 class="w3-text-black">Log in</h2>
    <?php
    if(isset($message))
    {
        echo '<label class "text-danger">'.$message.'</label>';
    }
        ?>

    <p>
        <label class="w3-text-black"><b>username</b></label>
        <input class="w3-input w3-border" name="username" type="text" placeholder="username"></p>
    <p>
        <label class="w3-text-black"><b>Password</b></label>
        <input class="w3-input w3-border" name="password" type="text" placeholder="********"></p>
    <p>
        <input type="submit" name="login" class="w3-btn w3-black">Log in</input>
    </p>

    <p>

请忽略不对密码进行散列的情况,稍后再解决。第一个图像是带有输入信息的登录表单的外观,下一个图像是单击登录后发生的情况(图一)1

选择两个2

1 个答案:

答案 0 :(得分:0)

为了使您的脚本正常工作,我仅作了一些较小的更改,请参阅下面的评论。我认为您的login_success.php将经过身份验证的用户发送回登录页面。

<?php
/* my table in db named 'movie1':

CREATE TABLE `register` (
  `ID` int(11) NOT NULL  AUTO_INCREMENT  PRIMARY KEY,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL
);

INSERT INTO `register` (`username`, `password`) VALUES
('User1', '1111'),
('User2', '2222');

*/

session_start();
$server = "127.0.0.1";
$dbusername = "www"; //Changed
$dbpassword = "www"; //Changed
$db = "movie1";
$message = "";
try
{
    $handle = new PDO("mysql:host=$server; dbname=$db", $dbusername, $dbpassword);
    $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if(isset($_POST["login"]))
    {
        if(empty($_POST["username"]) || empty($_POST["password"]))
            $message = '<label>All fields are required</label>';
        else
        {
            $query = "SELECT * FROM register WHERE username = :username AND password = :password";
            $statement = $handle->prepare($query);
            $statement->execute(
                array(
                    ':username'     =>     $_POST["username"], //Inserted colon here
                    ':password'     =>     $_POST["password"]  //Inserted colon here
                )
            );
            $count = $statement->rowCount();
            if($count > 0)
            {
                $_SESSION["username"] = $_POST["username"];
                header("location:FileNotExistAndWillProduce404WhichMeansSuccess.php");//Target changed
            }
            else
                $message = 'Wrong Data';
        }
    }
}
catch(PDOException $error)
{
    $message = $error->getMessage();
}
?>
<!DOCTYPE html>
<html lang="en">

<meta charset="UTF-8">
<title>log in</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<body>

<form class="w3-container w3-card-4" action="LoginTest.php" method="post"> <!-- action-target changed -->
    <h2 class="w3-text-black">Log in</h2>
    <?php
    if($message>'') //was isset(), changed, because it contains at least an empty string
        echo '<label class "text-danger">'.$message.'</label>';
    ?>

    <p>
        <label class="w3-text-black"><b>username</b></label>
        <input class="w3-input w3-border" name="username" type="text" placeholder="username"></p>
    <p>
        <label class="w3-text-black"><b>Password</b></label>
        <input class="w3-input w3-border" name="password" type="text" placeholder="********"></p>
    <p>
        <input type="submit" name="login" class="w3-btn w3-black">Log in</input>
    </p>

</form></body></html>