Как перенаправить на другую страницу в php после заполнения формы? - PullRequest
2 голосов
/ 26 января 2011

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

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

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

Ответы [ 3 ]

8 голосов
/ 26 января 2011

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

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

<?php

// Process form

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

?>

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

1 голос
/ 26 января 2011

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

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

<?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 на наличие предшествующих пробелов, так как они заставят отправлять заголовки и содержимое.

1 голос
/ 26 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...