我有一个$_Session
的简单表单,并且在密码错误时不会打印我的错误消息。除了错误消息之外它工作得很好,事实上错误消息一直有效,直到我把header("Location: /cms/");
放进去。有什么我做错了吗?
<?php
session_start();
$error_msg = "";
if($_POST['username']) {
$username = $_POST['username'];
$password = $_POST['password'];
$admin = "a";
$adminpass = "s";
if(($username != $admin) || ($password != $adminpass)) {
$error_msg = 'Your login information is wrong dude!';
}
else {
$_SESSION['admin'] = '$username';
header("Location: /cms/");
exit();
}
}
if(!isset($_SESSION['admin'])) {
header("Location: /cms/login");
exit();
}
?>
<html>
<body>
<form action="/cms/loggedin.php" method="post" target=_self>
<label>Username: <input type="text" name="username" id="username"></label>
<font color="#FF0000"><?php echo $error_msg; ?></font><br />
<br />
<label>Password: <input type="text" name="password" id="password"></label>
<br />
<br />
<label><input type="submit" name="Submit" value="Sign In"></label>
</form>
答案 0 :(得分:3)
header("Location: /cms/");
- 在打印邮件之前,这会重定向到其他页面,因此您将看不到该邮件。
编辑 - 事实上,header("Location: /cms/login");
将执行重定向,如果出现错误,它将找不到会话变量。
答案 1 :(得分:1)
这是你应该改变的......
在您检查用户名和密码时:
if(($username != $admin) || ($password != $adminpass)) {
$_SESSION['error'] = 'Your login information is wrong dude!';
}
在HTML部分:
<?php
if (isset($_SESSION['error']))
{
echo '<p class="warning">',$_SESSION['error'],'</p>';
unset( $_SESSION['error'] );
}
?>
另外,请学习如何编写正确的语义HTML。 <font>
代码已被弃用了大约10年,您的代码缺少任何类型的<!DOCTYPE
,<br>
代码不会形成布局。
哦,你可能会发现this article很有意思。