2011-01-26 4 views
2

У меня есть регистрационная форма на сайте, который я строю. Если он заполнен правильно, я хочу, чтобы пользователь вернулся на главную страницу.Как перенаправить на другую страницу в php после завершения формы?

Я попытался использовать header, но я получаю «Невозможно изменить информацию заголовка ...» Я предполагаю, что это происходит, потому что я отправляю сообщение $_SERVER['PHP_SELF'];

Любые предложения о том, как я могу перенаправить пользователя, если форма в порядке? (За исключением страницы успеха с кнопкой)

+0

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

ответ

7

Функцию header() можно использовать только в том случае, если веб-сервер не выводит никаких других текстовых/строковых данных в браузер пользователей.

Вам нужно поставить логику для редиректа в верхней части вашего скрипта, прежде чем что-нибудь еще:

<?php 

// Process form 

// If processing was successful, redirect 
if($success) 
{ 
    header("Location: http://www.main-page-url.com/"); 
} 

?> 

Причиной этого является то, что, когда браузер получает информацию от веб-сервера, он получает HTTP-заголовок (который функция header() выводит перенаправление на), а затем выводит тело ответа HTTP после заголовка HTTP. Если в вашем скрипте есть echo что-либо перед командой заголовка, вы будете продолжать получать эту ошибку.

+0

Я знаю это. Я думал, что у меня другая проблема. Теперь я узнал, что require_once «file.php»; проблема - какие-то идеи? – AYBABTU

1

Вы получаете сообщение об изменении информации заголовка, поскольку вы пытаетесь отправить новые заголовки в браузер после того, как содержимое было отображено на странице. Если вы выполняете вызов header() перед любыми вызовами echo/print, он будет перенаправлен. В противном случае вам понадобится мета-перенаправление. Там, где вы публикуете форму, не имеет значения.

1

Причина, по которой это не работает, заключается в том, что заголовки предшествуют контенту в HTTP-запросе. Когда вы выводите контент, PHP опережает игру, отправляя все заголовки и весь контент, обработанный до сих пор. Для отправки HTTP-запросов нет CTRL + Z, поэтому функция header() не может добавлять заголовки после их отправки.

Однако вы можете позвонить header() после того, как контент будет эхом, если вы используете семейство функций буферизации ob. Вызовите ob_start() на вывод страницы в буфер, сделайте необходимые вызовы заголовков или выходы контента, и, наконец, отправьте вывод с помощью ob_end_flush(). Ex.

<?php 
ob_start(); //Start buffering 
?> 
<p>This is output!!!</p> 
<?php 
header('403 Moved Permanently'); //Fancy redirect is fancy 
ob_end_flush(); //Send page content with redirect header 
?> 

Единственный возможный недостаток использования буферизации является то, что пользователь будет испытывать небольшое зависание в получении контента, пока команда ob_end_flush() не называется. Скорее всего, это не будет заметно, поэтому вам не стоит беспокоиться об этом!

Прежде чем переходить ко всему этому, вы можете переместить все ваши вызовы заголовков в место до того, как содержимое будет выводиться в вашем коде. Также проверьте открывающий тег PHP для предыдущих пространств, поскольку они будут вынуждены отправлять заголовки и контент.

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