我是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如何工作,但可以做完这件简单的事情。请有人告诉我哪里出错了。
答案 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();
?>
将它们放在相同的文件夹中即可。