2010-12-16 32 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“'

相关问题