2015-08-04 5 views
0

У меня есть какая-то странная проблема. Да, я полностью знаю и понимаю, что это сообщение об ошибке (не могу изменить информацию заголовка - уже отправленные заголовки) означает, но я все еще боюсь с некоторыми частями этого ...заголовки уже отправлены php

Объяснение: У меня есть центральный 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(). Это работает на каждом сайте проекта и правильно перенаправляется в $ root после выполнения(), но не будет работать на некоторых сайтах: мой пользовательский запрограммированный форум. Например, когда моей подтемой является addthread.php, где пользователь может запустить новый поток, он не сможет этого сделать, даже если шаблон выглядит ТОЧНО, как другие (changepwd.php), где он работает.

  1. Почему такой материал даже работает? При использовании execute() в рабочих подтемах подметка по-прежнему встроена в основной индекс index.php, поскольку уже был напечатан html-код из основного html-шаблона в index.php. Переадресация header() по-прежнему работает в этих случаях.

  2. Почему это не работает в моем addthread.php? И как я могу это исправить?

Если есть реальный код, просто скажите мне :) Спасибо!

+0

Возможно, вы можете использовать [буферизацию вывода] (http://php.net/manual/function.ob-start.php), чтобы избежать ошибки. – hellcode

ответ

1
header("Location: " . $root); 

Невозможно запустить, если что-либо было передано браузеру/пользователю. Включая любые дополнительные строки вверху.