0

我有一个简单的表格,$_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>

4

2 回答 2

3

header("Location: /cms/");- 这将在打印消息之前重定向到不同的页面,因此您将看不到该消息。

编辑 - 事实上header("Location: /cms/login");,如果发生错误,它将执行重定向,它不会找到会话变量。

于 2012-06-30T19:30:28.617 回答
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>标签不适用于格式化布局。

哦,你可能会觉得这篇文章很有趣。

于 2012-06-30T19:35:47.543 回答