警告:无法修改 header 信息 - header 已由 [登录表单错误] 发送
Warning: Cannot modify header information - headers already sent by [Error in login form]
我在创建一个没有数据库的登录页面时遇到问题,看起来一切正常,除了当我登录时出现此错误 Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\index.php:25) in C:\AppServ\www\index.php on line 65
我想知道问题是什么?这是一个非常简单的网页,里面有一个登录表单,如果用户名和密码正确,用户应该会看到欢迎消息 + 注销,但由于 header 错误而不会出现。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head lang="en">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>Login To Your Account</title>
<!-- Framework CSS -->
<link rel="stylesheet" href="assets/blueprint-css/screen.css" type="text/css" media="screen, projection">
<link rel="stylesheet" href="assets/blueprint-css/print.css" type="text/css" media="print">
<!--[if lt IE 8]><link rel="stylesheet" href="assets/blueprint-css/ie.css" type="text/css" media="screen, projection"><![endif]-->
<link rel="stylesheet" href="assets/blueprint-css/plugins/fancy-type/screen.css" type="text/css" media="screen, projection">
<style type="text/css" media="screen">
p, table, hr, .box { margin-bottom:25px; }
.box p { margin-bottom:10px; }
</style>
</head>
<body>
<div class="container">
<h3 class="center alt"> Welcome.</h3>
<hr>
<?php
$username = 'username';
$password = 'password';
$random1 = 'secret_key1';
$random2 = 'secret_key2';
$hash = md5($random1.$pass.$random2);
$self = $_SERVER['REQUEST_URI'];
if(isset($_GET['logout']))
{
unset($_SESSION['login']);
}
if (isset($_SESSION['login']) && $_SESSION['login'] == $hash) {
?>
<p>Hello <?php echo $username; ?>, you have successfully logged in!,</p>
<a href="?logout=true">Logout</a>
<?php
}
else if (isset($_POST['submit'])) {
if ($_POST['username'] == $username && $_POST['password'] == $password){
//IF USERNAME AND PASSWORD ARE CORRECT SET THE LOG-IN SESSION
$_SESSION["login"] = $hash;
header("Location: $_SERVER[PHP_SELF]");
} else {
display_login_form();
echo '<p>Username or password is invalid</p>';
}
}
else {
display_login_form();
}
function display_login_form(){ ?>
<form action="<?php echo $self; ?>" method='post'>
<label for="username">Username: </label>
<input type="text" name="username" id="username">
<br>
<br>
<label for="password">Password: </label>
<input type="password" name="password" id="password">
<br>
<br>
<input type="submit" name="submit" value="Submit">
<br>
</form>
<?php } ?>
<br>
<hr>
<p> </p>
<p>Copyright © 2015 -</p>
<hr class="space">
</div><!-- end div .container -->
</body>
请在页面顶部设置会话。
session_start();
使用header()
函数前不能有任何输出。
在将任何内容发送到浏览器之前,您需要进行登录检查/重定向。
我在创建一个没有数据库的登录页面时遇到问题,看起来一切正常,除了当我登录时出现此错误 Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\index.php:25) in C:\AppServ\www\index.php on line 65
我想知道问题是什么?这是一个非常简单的网页,里面有一个登录表单,如果用户名和密码正确,用户应该会看到欢迎消息 + 注销,但由于 header 错误而不会出现。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head lang="en">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>Login To Your Account</title>
<!-- Framework CSS -->
<link rel="stylesheet" href="assets/blueprint-css/screen.css" type="text/css" media="screen, projection">
<link rel="stylesheet" href="assets/blueprint-css/print.css" type="text/css" media="print">
<!--[if lt IE 8]><link rel="stylesheet" href="assets/blueprint-css/ie.css" type="text/css" media="screen, projection"><![endif]-->
<link rel="stylesheet" href="assets/blueprint-css/plugins/fancy-type/screen.css" type="text/css" media="screen, projection">
<style type="text/css" media="screen">
p, table, hr, .box { margin-bottom:25px; }
.box p { margin-bottom:10px; }
</style>
</head>
<body>
<div class="container">
<h3 class="center alt"> Welcome.</h3>
<hr>
<?php
$username = 'username';
$password = 'password';
$random1 = 'secret_key1';
$random2 = 'secret_key2';
$hash = md5($random1.$pass.$random2);
$self = $_SERVER['REQUEST_URI'];
if(isset($_GET['logout']))
{
unset($_SESSION['login']);
}
if (isset($_SESSION['login']) && $_SESSION['login'] == $hash) {
?>
<p>Hello <?php echo $username; ?>, you have successfully logged in!,</p>
<a href="?logout=true">Logout</a>
<?php
}
else if (isset($_POST['submit'])) {
if ($_POST['username'] == $username && $_POST['password'] == $password){
//IF USERNAME AND PASSWORD ARE CORRECT SET THE LOG-IN SESSION
$_SESSION["login"] = $hash;
header("Location: $_SERVER[PHP_SELF]");
} else {
display_login_form();
echo '<p>Username or password is invalid</p>';
}
}
else {
display_login_form();
}
function display_login_form(){ ?>
<form action="<?php echo $self; ?>" method='post'>
<label for="username">Username: </label>
<input type="text" name="username" id="username">
<br>
<br>
<label for="password">Password: </label>
<input type="password" name="password" id="password">
<br>
<br>
<input type="submit" name="submit" value="Submit">
<br>
</form>
<?php } ?>
<br>
<hr>
<p> </p>
<p>Copyright © 2015 -</p>
<hr class="space">
</div><!-- end div .container -->
</body>
请在页面顶部设置会话。
session_start();
使用header()
函数前不能有任何输出。
在将任何内容发送到浏览器之前,您需要进行登录检查/重定向。