2012-01-16 1 views
0

У меня есть форма heredoc (показано ниже) внутри addToDb.php. Форма отправляется обратно в addToDb.php, когда пользователь нажимает кнопку отправки в форме (кнопка «ADD RECORD» в форме ниже).heredoc, мешающий заголовку() в столбце Post/Redirect/Get

После проверки того, что у меня есть хорошие данные в форме, я добавляю данные в свою базу данных и использую заголовок() для перенаправления 303 (это моя первая попытка использовать пост/перенаправление/получение).

Я получаю сообщение об ошибке:

«Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в C: \ XAMPP \ HTDOCS \ Foo \ addToDb.php: 165) в C: \ XAMPP \ HTDOCS \ Foo \ addToDb.php в строке 129 и в C: \ XAMPP \ HTDOCS \ Foo \ addToDb.php на линии 130"

echo <<<_END 
    <h1>Please add a new student....</h1> 
    <p>Fields with an asterisk (*) are required fields.</p> 
    <form action="addToDb.php" method="post"> 
    <b><i>First name *</b></i> : <input type="text" name=$firstNameLabel /><br /> 
Middle initial : <input type="text" name=$middleInitialLabel /><br /> 
    <b><i>Last name *</b></i> : <input type="text" name=$lastNameLabel /><br /> 
     <b><i>School*</i></b> : <input type="text" name=$schoolLabel size=40/><br /> 
     Grade: <input type="text" name=$gradeLabel /><br /> 
     <b><i>Email *</b></i> : <input type="text" name=$emailLabel size=40 /><br /> 
    <input type="submit" name="addrecord" value="ADD RECORD" /><br /> 
</form> 
_END; 

* (Примечание: выше _END, который закрывает Heredoc, появляется в строке 165 в addToDb.php - эта строка 165 упоминается в сообщении об ошибке, которое я получаю.) *

Итак, когда кнопка отправки «ADD RECORD» нажата, снова вводится тот же файл addToDb.php и снова отображается тот же вид, что и выше.

Когда addToDb.php повторно введен из-за представить, проверить наличие действительных данных формы, поставляемые пользователем и сохранить в базе данных, если это действительные данные и вызвать заголовок() следующим образом:

// check for valid form data and add to the database, then redirect now......... 
header("HTTP/1.1 303 See Other"); 
header("Location: http://localhost/foo/index.php"); 
exit(); 

(Примечание: два вызова в заголовок выше появляются на линиях 129 и 130 в addToDb.php)

Так вот что происходит:

  • я заполнить форму с действительными данными
  • толчка «Добавить запись»
  • то форма повторно отображается как я повторно ввести addToDb.php
  • моей запись успешно добавляются в базу данных, но. .....
  • Я не вижу index.php в браузере, я все еще вижу addToDb.php
  • и я получаю сообщение об ошибке, как описано выше, и повторяющееся ниже:

«Предупреждение: Невозможно изменить информацию заголовка - заголовки уже (вывод начинается с C: \ xampp \ htdocs \ foo \ addToDb.php: 165) в C: \ xampp \ htdocs \ foo \ addToDb.php в строке 129 и в C: \ xampp \ htdocs \ foo \ addToDb. php on line 130 "

Я использовал метод heredoc в прошлом без проблем.

Но это первый раз в жизни, я пытаюсь реализовать Post/Redirect/Get.

Итак - это heredoc как-то мешает моей PRG?

ответ

0

Контейнеры должны быть отправлены клиенту первым. Вы можете делать все, что вам нравится в первом коде (т. Е. Тестировать переменные post/get) до тех пор, пока вы не отправляете какие-либо данные клиенту (т. Е. Используйте эхо или размещаете простой html вне тегов php) перед отправкой заголовков http , После отправки заголовков вы, конечно, можете делать то, что вам нравится.

Таким образом, вы получаете сообщение об ошибке:

Cannot modify header information - headers already sent by... 

заголовки автоматически при условии в начале документа, так как вы не предоставили ваши там.

+0

Это сделало меня. Благодарю. Как только я удалил все отладочное эхо и весь другой выход, перенаправление работало с индексом index.php. Мне даже пришлось удалить вызов var_dump(). – wantTheBest

+0

Рад помочь. :) – vdbuilder