2010-12-16 35 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代碼仍然是最重要的。

Exampel:

<?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

喜更好的選擇是ü可以使用JavaScript window.location的返回頁面 像 回聲「了window.location =「/預訂/ RES = $水庫& ID = $ ID「'

相關問題