Правильный способ перенаправления после отправки формы - PullRequest
6 голосов
/ 03 марта 2011

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

Я не знаю почему, но если я добавлю action="done.php", то форма не сохранит данные в моей базе данных.

Я пытался добавить header ("location:/done.php");, это сработало, но когда я переместил страницу на исходный сервер (PHP 4 и MySQL 3.23.5), при попытке отправить форму Warning: Cannot modify header information - headers already sent by ........

возникает ошибка

Вот мой php-код:

if(isset($_POST['submit']))
{
$name=$_POST['name'];
$email = $_POST['email'];
$company = $_POST['company'];
$adress = $_POST['adress'];
$post = $_POST['post'];
$phone = $_POST['phone'];

$sql="INSERT INTO tekstile_users (id, name, email, company, adress, post, phone)
VALUES
('', '$name','$email','$company', '$adress', '$post', '$phone')";

if (mysql_query($sql,$con)) {

    header ("location:/done.php"); 
    }
    else {
echo "Something is wrong";
}

}//end of submit button

I fix преобразует этот файл .php в UTF-8 without BOM.

Спасибо всем за предложения!

Ответы [ 6 ]

6 голосов
/ 03 марта 2011

Сообщение «заголовки уже отправлены» означает, что ваш скрипт уже что-то выдал.Что-нибудь отображается на веб-странице над этим сообщением об ошибке?Проверьте наличие пробелов перед тегом <?php.Также проверьте все включаемые файлы на наличие пробелов до или после тегов <?php ?>.

Заголовок Location должен содержать пробел после ":" и должен быть абсолютным URI, подобным следующему:

header("Location: http://www.yoursite.com/done.php");
4 голосов
/ 03 марта 2011

«Заголовки уже отправлены», скорее всего, означает, что в вашем .php-файле есть некоторый контент перед вашим PHP-кодом.Это может быть так же просто, как пробел, или, возможно, ваш код PHP встроен в HTML.В любом случае, убедитесь, что ничто не предшествует вашему PHP-коду, и с вами все будет в порядке.

Что касается правильности этого метода перенаправления, я считаю, что это общепринятый метод.

2 голосов
/ 03 марта 2011

использование ob_start(); вверху страницы и сразу после <?php

2 голосов
/ 03 марта 2011

другие ответили относительно уже отправленных заголовков. Альтернативой является включение или требование done.php, если обновление прошло успешно. Не забывайте выход после включения / требуют.

if (mysql_query($sql,$con)) {

    header ("location:/done.php");
    require_once('done.php');
    exit();
    }
    else {
echo "Something is wrong";
}
1 голос
/ 03 марта 2011

headers already sent означает, что что-то уже отправлено в браузер.

MySQL дает ошибку?

Также обратите внимание, что $_POST была введена в PHP 4.1, поэтому, если вы используете действительно старую версию php, это может вызвать ошибку.

0 голосов
/ 03 марта 2011

I fix преобразует этот файл .php в UTF-8 without BOM.

Спасибо всем за предложения!

...