为什么我的错误信息不起作用?

时间:2012-06-30 19:27:05

标签: php

我有一个$_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>

2 个答案:

答案 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很有意思。