1

可能重复:
PHP 5.3 不显示错误消息
PHP 已发送的标头

我有一个 main.php 文件。它加载我的页眉、正文和页脚部分。身体部分是灵活的。在我的索引页面中,站点决定了活动页面,因此在主文件中,活动页面正文方法有效。在登录页面中,我检查用户,如果它有效,我想重定向到另一个页面。在这种情况下会出现问题。

索引.php:

if(isset($_GET["page"]))
{

    $jsPages.="\n\t<script src='pages/".$_GET["page"]."/resources/".$_GET['page'].".js' type='text/javascript' charset='utf-8'></script>";
    $cssPages.="\n\t<link rel='stylesheet' href='pages/".$_GET['page']."/resources/".$_GET['page'].".css' type='text/css' media='screen' title='no title' charset='utf-8'/>";
    include("pages/". $_GET["page"] ."/_index.php");
}
include("template/$Template/_index.php");

_index.php(主)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
</head>
<body">
        <div ><?php userpanel(); ?></div>                   
    <div id="header"><?php pageHeader(); ?></div>
    <div id="horiz-menu" class="splitmenu"><?php horizmenu();?></div>
    <div id="sub-menu"></div>
    <?php body();?>
    <div id="bottom-menu"></div>
    <div id="footer"><?php footer();?></div>
</body>
</html>
<?php 

登录.php:

<?php
function body(){

  if ($_SERVER["REQUEST_METHOD"] == "POST")
  {
  if (!$_POST["username"] || !$_POST["password"])
        {
        die("You need to provide a username and password.");
        }

  // username and password sent from Form 
$myusername=addslashes($_POST['username']); 
$mypassword=addslashes($_POST['password']); 

$sql="SELECT id FROM members WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
{
session_register("myusername");
$_SESSION['login_user']=$myusername;
header("location: pages/welcome/_index.php");
exit();
}
else 
{
$error="Your Login Name or Password is invalid";
}
}
?>
<form action="" method="post">
<label>UserName :</label>
<input type="text" name="username"/><br />
<label>Password :</label>
<input type="password" name="password"/><br/>
<input type="submit" value=" Submit "/><br />
</form>
<?php }

我搜索它,但找不到任何答案。我该如何解决它或有什么问题?

4

4 回答 4

1

header() 只应在任何 HTML 呈现到页面上之前调用。

于 2012-12-16T15:57:51.147 回答
1

已经向客户端发送了一些数据后,您不能使用标头。您必须在发送或发送任何其他内容之前将您的支票放在页面顶部。

来自: http: //php.net/manual/en/function.header.php

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。

于 2012-12-16T15:58:56.080 回答
1

此外,您可能需要注意这一点。该脚本依赖于已从现代 PHP 中删除的函数。请查看此网页上的红色大警告标签。

http://php.net/manual/en/function.session-register.php

你或许可以阅读这篇文章。它显示了用于 PHP 客户端身份验证的一些常见设计模式。

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

最好的问候,~雷

于 2012-12-16T16:07:57.220 回答
0

您可以添加ob_start()到您的 PHP 脚本的顶部。这将允许您发出 header() 即使您已经开始创建浏览器输出流。它还将使您的脚本更快,因为将避免重复调用发送浏览器输出,在脚本末尾只进行一次调用。

于 2012-12-16T16:04:19.637 回答