2011-09-22 127 views
0

假设我有一个表单,用户可以登录,并且当用户填写表单时,它会回发到同一页面,使用用户名和密码以及日志检查错误如果一切都膨胀的话。目前,我被这种条件下加载的形式这样做:PHP - 处理POST和头文件包括

if($_SERVER['REQUEST_METHOD'] != 'POST') { 

,如果这是不正确的,然后检查是否存在错误并登录等

的问题是,这一切发生在signin.php。在signin.php的顶部,我包括header.phpconnect.php,它们完全符合他们的名字。当我回发到页面时,登录状态中的更改不会显示在头文件中(该文件中有一个用户栏,与本站类似)。登录工作,但我必须导航到不同的页面,以显示“登录”而不是“登录/注册”或其他任何内容。

我是否以错误的方式解决了这个问题,还是只是需要添加一些内容才能使标题更新?干杯。

P.S:我很新的PHP,所以不要太复杂的东西会更好。

+0

重定向到其他页面标题(“Location:”。$ url);或者你可以重定向同一页面。它会被解决。如果重定向之前在浏览器中有输出,请使用元刷新或JavaScript重定向。 – mahadeb

+0

@mahadeb不应该是浏览器输出的东西。 –

+0

登录完成后,使用 - header('Location:'。basename($ _ SERVER ['REQUEST_URI'])); 退出;用于页面重定向。在这个代码之前记住一件事,那就是不应该有任何输出到浏览器,甚至没有任何空间输出。 – mahadeb

回答

1

有2个问题,你的设置违反了Web开发的非常基本但严格的规则

  1. 任何POST请求后都应该重定向。可以按照其他答案中所示完成。
  2. 在完成所有逻辑之前,不得显示HTML。所以,你的header.php应该在形式检查之后被调用,而不是在它之前。
+0

是的,我现在看到第2点是如何重要的,只要我按照正确的顺序开始调用它,一切都按照我想要的方式工作。真的很明显。干杯! –

3

你可能需要(使用header())侦错码发生后重定向:

if($_SERVER['REQUEST_METHOD'] != 'POST') { 
    .. 
} 
else { 
    .. 
    header('Location: ' . basename($_SERVER['REQUEST_URI'])); 
    exit; 
}