我在php和mysql中创建了一个简单的登录系统,但我一直收到错误,说已经发送了标题,并且使用ob_start修复了这个问题,但我不确定我是否应该在之后的页脚使用ob_clean?< / p>
另外,当我登录帐户页面时,错误就出现了,说已经在previuos页面中发送了标题 - &gt; header(“Location:account.php”);但是我必须在用户登录时重定向。
我的登录页面如下所示
require_once('models/init.php'); // db connection and other functions
include('header.php'); // some html code for the header, with one line php-function to check if user is logged in, if so show "home" tab instead of "login"
{
php code to check if username/pass matches etc, and if so redirect to account page
header("Location: account.php");
}
echo "<form>" // display the login form
include("footer"); // including footer, some html/js code.
如果我在header.php文件中使用ob_start,则上面的代码可以正常工作。但是我应该在footer.php文件中使用ob_clean吗?
对不起,如果有什么不清楚,英语不是我的第一个憔悴
谢谢!
答案 0 :(得分:3)
一般原则是您无法在echo
之前使用header()
。所以,这永远不会奏效:
echo "this is my header";
header("Location: account.php");
echo "this is my footer";
但是,如果你先发送标题,一切正常:
header("Location: account.php");
echo "this is my header";
echo "this is my footer";
在您的情况下,您应该在包含标题之前进行检查:
require_once('models/init.php'); // db connection and other functions
if ($user_is_logged_in) { // Do your check here
header("Location: account.php");
}
include('header.php'); // some html code for the header, with one line php-function to check if user is logged in, if so show "home" tab instead of "login"
echo "<form>" // display the login form
include("footer"); // including footer, some html/js code.
答案 1 :(得分:1)
ob_start()
捕获输出(否则将打印或回显)。如果您不需要回显输出或对其执行任何操作,那么只需在完成时使用ob_end_flush()
。