2010-12-16 2 views
0

У меня есть базовый скрипт PHP mail(), который отправляет пользователям сообщения о форме, которую они только что отправили. PHP вставляет все данные в базу данных отлично, но есть проблема, когда я хочу перенаправить их после завершения обработки данных.Видя ошибку «Невозможно изменить информацию заголовка» при попытке перенаправления

настоящее время я использую:

mail($email, $subject, $message, $headers); 

header('Location: '/reservations/?res='.$res.'&id='.$id.''); 

Но это бросает эту ошибку:

Warning: Cannot modify header information - headers already sent 

я понимаю, вы не можете отправить несколько заголовков, но есть ли способ дифференциации между почты и местоположения? Я не хочу использовать перенаправление JavaScript, потому что он слишком медленный и медленный. Я где-то читал около ob_start(), но я не знаю, нужно ли это ...

ответ

3

Изменение HTTP-заголовка с помощью header требует, чтобы он еще не был отправлен. И это происходит, когда происходит первый выход.

Таким образом, чтобы избежать заголовка HTTP посылают вам нужно, чтобы избежать вывода перед вызовом header или вы должны буфер так, чтобы она не присылают (см output control, особенно ob_start).

положение, где выход произошло, что вызвало отправку заголовка HTTP в сообщении об ошибке («выход начался в файле: линии»).

4

mail() не производит никакого вывода. Вероятно, у вас есть пробелы в верхней части файла перед открытием тега <?php.

0

Добавить символ «@» перед функцией почты, это решит вашу проблему.

т.е..,

@mail($email, $subject, $message, $headers); 
header('Location: /reservations/?res='.$res.'&id='.$id); 
+0

Это приведет к подавлению любых возможных сообщений об ошибках. Если есть ошибка с почтой (и мы не знаем, есть ли), лучше исправить это. – 2010-12-16 10:34:59

0
<?php 
mail($email, $subject, $message, $headers); 
header('Location: '/reservations/?res='.$res.'&id='.$id.''); 
?> 

должно работать нормально. Просто убедитесь, что перед вами ничего другого не происходит. Другими словами, у вас нет <body>, <title>, <head> или чего-нибудь выше вашего кода.

Если вы по какой-то причине хотите, чтобы это удостоверялось, что ваш php-код по-прежнему остается выше всего.

Пример:

<?php 
mail($email, $subject, $message, $headers); 
header('Location: '/reservations/?res='.$res.'&id='.$id.''); 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Send mail</title> 
</head> 

<body> 
</body> 
</html> 
0

привет лучше вариант, можно использовать яваскрипт window.location вернуться на странице с window.location нравится ECHO»="/оговорки/Рез = $ рес & ID = $ id "'

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