我在这里有一些奇怪的问题。是的我完全知道并理解该错误消息(无法修改标题信息 - 标题已经发送)意味着,但我仍然在努力解决这个问题的某些部分......
说明: 我有一个中心index.php,它包含基本的html模板。在内容区域中的这个html模板的中间,我有类似的东西:
<?php
if(isset($_GET["site"]) && $PAGE->isValidPage($_GET["site"])) {
include($_GET["site"] . ".php");
}
所以基本上我只有主html模板,并根据请求的页面将子模板中的所有子php逻辑插入到主模板中。
基本的“待导入”页面如下所示:
if(isset($_POST["somevar"])) {
if($CLASS->validate($_POST["somevar"])) {
$CLASS->execute($_POST["somevar"]);
header("Location: " . $root);
}
else {
// Show normal template from here like:
?>
<div>
<input type="text" name="somevar" />
</div>
<?php
}
因此,一般来说,我的子模板会查看是否有要处理的数据($ _POST [“somevar”])并将验证然后执行此数据。如果thers不是任何数据,它将只显示一个表单,以便用户可以输入数据。典型目的:“用户更改密码”。
现在有趣的部分:在验证并执行某些内容后,它将使用header()重定向。这适用于项目的每个站点,并在execute()之后正确地重定向到$ root,但在某些特定站点中将无法执行此操作:我的自定义编程论坛。例如,当我的子模板是addthread.php,用户可以在其中启动一个新线程时,即使该模板看起来与其他工作模式(changepwd.php)完全相同,也不会这样做。
为什么这种东西甚至可以工作?在工作子模板中使用execute()时,子模板仍然嵌入在主index.php中,这意味着已经从index.php中的主html模板打印了html代码。在这些情况下,header()重定向仍然有效。
为什么它在我的addthread.php中不起作用?我怎么能真正解决这个问题?
如果需要实际代码,请告诉我:) 谢谢!
答案 0 :(得分:1)
header("Location: " . $root);
如果已向浏览器/用户回显任何内容,则无法运行。包括顶部的任何额外线条。