heredoc, мешающий header () в сценарии Post / Redirect / Get - PullRequest
0 голосов
/ 17 января 2012

У меня есть форма heredoc (показана ниже) внутри addToDb.php.Форма отправляется обратно в addToDb.php, когда пользователь нажимает кнопку отправки на форме (кнопка «ДОБАВИТЬ ЗАПИСЬ» в форме ниже).

Убедившись, что у меня все в порядке с данными, я добавляю данные в свою базу данных и использую перенаправление header () на 303 (это моя первая попытка использовать post / redirect / get).

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

"Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с 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 из-за отправки я проверяю действительные данные формы, предоставленные пользователеми сохраните в базу данных, если это действительные данные, и вызовите header () следующим образом:

// 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();

(ПРИМЕЧАНИЕ: tДва вышеупомянутых вызова заголовка появляются в строках 129 и 130 в addToDb.php)

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

  • Я заполняю форму действительнымdata
  • нажмите «ADD RECORD»
  • , после чего форма будет отображаться заново при повторном вводе 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 в строке 130 "

В прошлом я использовал подход heredoc без проблем.

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

Итак, каким образом heredoc как-то мешает моей PRG?

1 Ответ

0 голосов
/ 17 января 2012

Заголовки должны быть первым, что отправлено клиенту.Сначала вы можете делать все, что вам нравится в коде (т.е. тестировать переменные post / get), если вы не отправляете данные клиенту (т.е. используете echo или размещаете обычный html вне тегов php) перед отправкой заголовков http,После отправки заголовков вы, конечно же, можете делать все, что захотите.

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

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

Заголовки были автоматически предоставлены в начале документа.потому что вы не предоставили свои там.

...