Контактная форма PHP перенаправление не работает

Я пытаюсь перенаправить на мою домашнюю страницу после отправки сообщения в моей контактной форме, форма отправляет электронное письмо, но я получаю это сообщение:

Array ( [name] => Abdo [company] => Mediabyrån A&B [email] => a.el-madhoun@hotmail.com [content] => Hejsan [contact_to] => info@web.se ) 

Предупреждение. Невозможно изменить информацию заголовка – уже отправленные заголовки (вывод запущен в /customers/4/5/a/webelite.se/httpd.www/kontakt.php:3) в / clients / 4/5 / a / webelite. se / httpd.www / kontakt.php в строке 39

Моя контактная форма;

 <form action="kontakt.php" method="post"> <p><input type="text" required="required" id="name" name="name" class="text_input" size="22" /> <label for="name">Namn *</label></p> <p><input type="text" required="required" id="company" name="company" class="text_input" size="22" /> <label for="company">Företag *</label></p> <p><input type="email" required="required" id="email" name="email" class="text_input" size="22" /> <label for="email">Epost *</label></p> <p><textarea required="required" name="content" class="textarea" cols="30" rows="5"></textarea></p> <p><button type="submit" class="button white"><span>Skicka</span></button></p> <input type="hidden" value="info@web.se" name="contact_to"/> </form> 

и это мой PHP:

 <?php echo $name = $_POST['name']; echo $company = $_POST['company']; echo $email = $_POST['email']; echo $content = $_POST['content']; $mail_to = 'info@webelite.se'; $subject = 'Lilla form'.$name; $body_message = 'From: '. $name . "\n"; $body_message .= 'company: '. $company . "\n"; $body_message .= 'E-mail: '. $email ."\n"; $body_message .= 'Message: '. $content; $headers = 'From: '. $mail_name . "\r\n"; $headers .= 'Reply-To: '. $email ."\r\n"; $success = mail($mail_to, $subject, $body_message, $headers); echo "<pre>"; print_r($_POST); header('Location:mydomain'); ?> 

Я также попытался использовать if

 ($success){ print "<meta http-equiv=\"refresh\" content=\"0;URL=YOUR_PAGE_HERE.html\">"; 

Это сработало, но я получил уродливую половину секунды вспышки между ударом submit и перенаправлением.

Вся помощь предоставляется.

спасибо

Вы не можете выводить ничего на экран перед перенаправлением.

Удалите все ваши echo -символы и print_r , и все будет в порядке.

РЕДАКТИРОВАТЬ:

Также, как упомянуто @jhonraymos, обязательно используйте header() правильно. Возможно, вы изменили это, чтобы скрыть фактическую страницу, на которую вы перенаправляете. Либо добавьте локальный файл с правильными определениями маршрутов, либо если перенаправление на другой домен, вам нужно определить полный URL-адрес. См. Uniform resource locator, если есть сомнения.

Другой EDIT:

Я вижу, что вы обновили свой вопрос. Прекратите попытки индейской магии, например

 if ($success){ print "<meta http-equiv=\"refresh\" content=\"0;URL=YOUR_PAGE_HERE.html\">"; 

Просто соглашайтесь с тем фактом, что ничего не выводить на экран перед headers() и ваша душа безопасна навсегда. Это не место для смешивания http-meta. PHP может сделать это просто отлично.

Сначала это может звучать как ограничение, но поверьте мне, это не так. Это благословение.

Заголовки используются для связи с браузером вашего клиента. Они похожи на небольшие команды, которые браузер будет выполнять при их получении. Когда вы выводите любые данные (текст, цифры и т. Д.), Вы будете распечатывать эти данные в браузере клиента. После этого браузер больше не будет интересоваться никакими заголовками, которые вы отправляете.

Функция header() – это функция, используемая для отправки пользовательских заголовков. Поэтому, когда эта функция вызывается, заголовки отправляются в браузер вашего клиента.

Теперь у вас есть очень короткое понимание того, что вы на самом деле пытаетесь сделать, вы должны уметь видеть, где ваша проблема.

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

Итак, это:

 echo "<pre>"; print_r($_POST); 

Не должно быть до этого:

 header('Location:mydomain'); 

это ошибка

 print_r($_POST); header('Location:mydomain'); 

Вы печатаете что-то перед header("location: mydomain.com")

да, вы не должны эхо, напечатайте что-либо перед тем, как header попытается разместить это в верхней части страницы:

 <?php ob_start(); ?> 

затем в нижней части страницы:

 <?php ob_end_flush(); ?> 

Что такое echo "<pre>"; print_r($_POST); echo "<pre>"; print_r($_POST); для ?

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

Это очень распространенная проблема в php. некоторые способы разобраться:

  1. используйте в верхней части страницы.

  2. проверьте, случайно ли вы добавляете некоторые пробелы перед тегом открытого php или после закрытого тега php.

  3. если все еще не решить, используйте java-script window.location вместо заголовка.

Надеюсь, это поможет. Счастливое кодирование!

Вы получаете это предупреждение, потому что после этого вы выводите на экран значения ваших переменных и перенаправляете их header .

Заголовки не могут отправляться после печати ( echo , print_r …). Чтобы исправить это, следуйте следующему коду:

 $name = $_POST['name']; //no echo $company = $_POST['company'];//no echo $email = $_POST['email'];//no echo $content = $_POST['content'];//no echo $mail_to = 'info@webelite.se'; $subject = 'Lilla form'.$name; $body_message = 'From: '. $name . "\n"; $body_message .= 'company: '. $company . "\n"; $body_message .= 'E-mail: '. $email ."\n"; $body_message .= 'Message: '. $content; $headers = 'From: '. $mail_name . "\r\n"; $headers .= 'Reply-To: '. $email ."\r\n"; $success = mail($mail_to, $subject, $body_message, $headers); //echo "<pre>"; //print_r($_POST);