简单的PHP登录无法正常工作

时间:2017-04-19 17:10:48

标签: php login xampp

我是PHP的新手,我正在尝试使用登录页面构建一个网页。我想我明白了,但我的登录页面虽然非常基本,但仍无效。

这是我目前的文件结构: http://imgur.com/a/zVcPK

这是idx(索引):

<?php

error_reporting( E_ALL );
ini_set( "display_errors", 1 );

include 'templates/header.php';

if(!isset($_SESSION['logged'])){
    include 'controller/login.php';
}else{
    if($_SESSION['logged'] == true){
        include "controller/navigation.php";
    }else{
        include "idx.php";
    }
}

include 'templates/footer.php'
?>

这是login.php模板:

<?php
$out = "<form method='POST' action='idx.php'>
        <p>Login:</p>
        <label>Username:</label><input type='text' name ='username' required />
        <label>Password:</label><input type='password' name'password' required />
        <input type='submit' value='submit' name=submit'/>
        </form>";

echo $out;

这是login.php控制器:

<?php


include "view/login.php";
if(isset($_POST['submit'])){

    $urn=$_POST['username'];
    $pwd=$_POST['password'];

    $user = new user($urn);

    $worked = $user->authenticate($urn, $pwd);
    if($worked == true){
        $_SESSION['logged']=true;
        $_SESSION['username']=$urn;
        header('Location: controller/navigation.php');
    }
    else
    {
        echo('Error');
    }
}
?>

这是用户模型:

<?php
class user
{
    private $username;

    function __construct($username)
    {
        $this->username=$username;
    }

    function authenticate($username, $password)
    {
        if ($username == 'tim' && $password == 'ttt') {
            return true;
        } else {
            return false;
        }
    }
}
?>

我只是想让表单接收用户详细信息,检查它们是“tim”和“ttt”,如果是,则返回true值,提示控制器将标题URL更改为导航。 php控制器反过来显示navigation.php视图,它只是一个链接列表。出于某种原因,虽然每当我点击提交没有任何反应时,它只会停留在登录页面上。

我知道这是一个非常基本的事情,但我已经坚持了几天了,我已经看了几个小时的视频,并阅读了几十页解释MVC如何工作,但可以做完这件简单的事情。请有人告诉我哪里出错了。

3 个答案:

答案 0 :(得分:1)

确保在要获取的每个页面上启动会话或设置会话变量。

session_start()

它应该就这么简单,它让我在一段时间内徘徊了一段时间。

您是否考虑过使用MVC框架?它们非常有助于保持一切整洁有序,并提供有用的功能和类库。 CodeIgniter是一个非常容易使用的超轻量级框架。 Laravel更加活跃,更适合大型项目。

答案 1 :(得分:1)

更改此内容:

<input type='password' name'password' required />

这个:(您错过了= name='password'

<input type='password' name='password' required />

不要忘记在页面顶部添加session_start()

答案 2 :(得分:-1)

我将与您分享我的示例PHP登录页面设置。 它有3个页面,索引,管理员,注销

index.php:创建一个询问用户名和密码的表单,一旦给出正确的用户名pssword(此处为admin,密码),它将创建一个新会话&#34; login&#34;。登录后,它将重定向到admin.php $ validuser,确保以前的登录名为true。

<?php
session_start();
$errorMsg = "";
$validUser = $_SESSION["login"] === true;

if (isset($_POST["sub"]))
    {
    $validUser = $_POST["username"] == "admin" && $_POST["password"] == "password";
    if (!$validUser) $errorMsg = "Invalid username or password.";
      else $_SESSION["login"] = true;
    }

if ($validUser)
    {
    header("Location: /admin.php");
    die();
    }

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>Login</title>
    </head>
    <body>
        <center>
            <h1>Login</h1>
            <table>
                <form name="input" action="" method="post">
                    <tr>
                        <th>
                            <label for="username">Username</label>
                        </th>
                        <th>
                            <input type="text" value="" id="username" name="username" />
                        </th>
                    </tr>
                    <tr>
                        <th>
                            <label for="password">Password</label>
                        </th>
                        <th>
                            <input type="password" value="" id="password" name="password" />
                        </th>
                    </tr>
                    <tr>
                        <th></th>
                        <th>
                            <input type="submit" value="Login" name="sub" />
                        </th>
                    </tr>
                </form>
            </table>
        </center>
    </body>
</html>

admin.php:检查会话&#34;登录&#34;,如果设置了会话,它将继续进行,否则它将转到login.php

<?php
session_start();

if (!isset($_SESSION['login']))
    {
    header('LOCATION:login.php');
    die();
    }

?>
<html>
    <head>
        <title>Admin Page</title>
    </head>
    <body>
       <center>
           <h1>Succesfully logged in</h1>
           <input type="button" value="Logout" onclick='window.open("/logout.php","_self")'/>
       </center>
    </body> 
</html>

logout.php:清除会话,cookie并关闭它们并返回login.php

<?php
session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name() , '', 0, '/');
session_regenerate_id(true);
header("Location: /index.php");
die();
?>

将它们放在相同的文件夹中即可。