Отправляет email-рассылки с помощью сервиса Sendsay

[TC] php. header или как перейти на другую страницу

Здравствуйте, уважаемые!
Я опять со своим php:)

В сценарии после ввода всех необходимых данных функцией header пытаюсь
перейти на другую страницу. В сценариях с без формы мне без труда удается
это осуществить. делаю так:

header("location: http://localhost/white.php");
exit;

В данном сценарии Браузер или denwer выводит следующее сообщение:

Warning: Cannot modify header information - headers already sent by (output
started at I:\home\localhost\www\reg_white.php:10) in
I:\home\localhost\www\reg_white.php on line 52

понял, что не может модифицировать заголовочную информацию, потому что
заголовки уже отправлены сценарием reg_white.php. Сообщение в скобках
вообще не понятно особенно reg_white.php:10. Дальше указывается строка в
которой использовалась функция header.

Вопрос 1. из-за чего такие ошибки обычно возникают (раза два у меня такое
как-то было).
Вопрос2. как все-таки перейти на другую страницу автоматом? Кроме header
может быть есть другой способ?

Заранее благодарен всем за помощь,
Грызунов Александр. Самара.

Ответить   "eastreb" Mon, 10 Aug 2009 01:03:32 +0400 (#893129)

 

Ответы:

Vande omentaina, eastreb!

Вот тут ключ к ошибке. _После ввода всех данных_ http-заголовок
передать не получится, он идёт до всего вывода. Иными словами, если у
вас есть хотя бы одно echo (или менее мной любимый print), то функция
header() не сработает.
Я в этом случае делаю HTML-редирект, хотя спецификация HTML его и не
рекомендует:
echo "<html><head><title>Redirect</title>
<meta http-equiv=\"refresh\" content=\"0; url=white.php\">";
Здесь 0 - число секунд задержки. Если вы хотите вывести сообщение об
ошибке, задержите перенаправление секунд на пять и выведите что-нибудь
вроде "Зарегистрироваться не удалось".
Редирект можно сделать и как-то ещё, на это мне в своё время намекнул
Анатолий-сан. Но как именно его делать со стороны сервера, я не
разобрался пока, поэтому советую вам пока делать, как мы в своём
проекте.
Если будут вопросы, обращайтесь, помогу и расскажу, что сам знаю).

Ответить   Anarendil Tue, 11 Aug 2009 17:50:40 +0300 (#893796)