2014-01-21 6 views
1

Я создал систему билетов на PHP. При загрузке мой сценарий в Интернете я получил следующее сообщение об ошибке при перенаправлении на второй странице:Переадресация PHP с использованием сеанса

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал ... выход начался в строке 29.

У меня не было этой ошибки при разработке на моем локальном компьютере с wampserver.

билетной PHP состоит из двух страниц:

  1. Первая страница: HTML форма, PHP проверяет ввод после нажатия на кнопку. Если все в порядке ==> перенаправление на вторую страницу.
  2. Вторая страница: выбор билетов.

Я понимаю, что получаю эту ошибку, потому что я выводил HTML перед перенаправлением на другую страницу. Как я могу это решить? (Потому что я должен вывести HTML)

Сердечные приветы

+0

Всевозможные решения с использованием буферизации вывода, _but_ это будет полезно для вашего кода различными способами, если вы придерживаетесь правила «первого процесса» (что также означает все виды заголовки и переадресации) _before_ вывод _anything_. 'ob_start()' - это костыль, который вы можете использовать, но для этого это плохой запах кода. Короче говоря, не записывайте свои приложения для вывода HTML, когда они еще не обработаны, что произойдет, если вы решите, что хотите вывести что-то еще, например xml, pdf, json и т. Д.? – Wrikken

+0

Зачем вам выводить HTML перед перенаправлением? – Tchoupi

+0

Похоже, вы выводили материал перед сеансом. Можете ли вы предоставить свой код? – Enijar

ответ

0

Это сообщение сорвала меня много раз также. Это решение должно получить вокруг него:

echo '<meta HTTP-EQUIV="REFRESH" content="0; url=newurl.php">'; 

Если номер ноль в content="0; представляет число секунд, чтобы сделать паузу перед перенаправлением.

Я предполагаю, что это само собой разумеется, что вы должны заменить newurl.php с нужным названием страницы ... просто говоря ...

Поскольку выше, имеет свои недоброжелатели, хотя я использовал это сам без заметных отрицательных результатов , вот несколько альтернатив:

Redirects - alternative to "<meta http-equiv='refresh' />"?

в статье связано в комментарии Сэма Dufel в выше удивительна:

How to fix "Headers already sent" error in PHP

+0

Это просто взломать проблему. На самом деле проблема должна быть исправлена ​​(т. Е. Не выводить в браузер перед попыткой перенаправления). Исправить актуальную проблему не добавить взломать, чтобы замаскировать проблему. –

+1

Взлом - это исправление, которое кому-то еще не нравится. – gibberish

+0

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

0

Убедитесь, что у вас нет никакого вывода перед вызовом header() или session_start()

  • Убедитесь, что у вас нет места в любом месте, прежде чем <?php во всех PHP файлов
  • Удалить ?> в конце каждого PHP file
  • Сменить error_reporting на E_ALL и display_errors на On в php.ini на вашей машине разработки, после чего запустите приложение еще раз и проверьте, есть ли ошибки. Исправьте их.
-1

Запуск риск получения замучен с этим, но вы можете иметь Javascript перенаправлены вместо этого:

<?php 
// instead of header('Location: someURL.php'); 
die('<script>window.location = \'someURL.php\';</script>'); 
?> 

В противном случае, не выход НИЧЕГО перед header() вызова.Следуйте правилам и счастливому кодированию =)

Смежные вопросы