标题已发送错误

时间:2013-12-16 23:44:53

标签: php

我正在尝试将我的联系表单重定向,然后邮寄。但是我遇到了以下错误:

  

警告:无法修改标头信息 - 已发送的标头   (输出从/home3/ettrick/public_html/test3/mail.php:12开始)   第80行/home3/ettrick/public_html/test3/mail.php

<?php 
$email_message .= "Name: ".($name)."\n";

$email_message .= "Email: ".($email)."\n";

$email_message .= "Message: ".($message)."\n";
mail($ToEmail, $EmailSubject, $email_message, $mailheader); 
?>
<?php

if(isset($_POST['email'])) {



    // EDIT THE 2 LINES BELOW AS REQUIRED

    $email_from = "newsletter@kingdomhearts7.com";

    $email_to = "fritzgattereau@gmail.com";

    $email_subject = "Contact Form";


    $email_message = "Form details below.\n\n";



    function clean_string($string) {

      $bad = array("content-type","bcc:","to:","cc:","href");

      return str_replace($bad,"",$string);

    }



    $email_message .= "Name: ".clean_string($name)."\n";

    $email_message .= "Email: ".clean_string($email)."\n";

    $email_message .= "Message: ".clean_string($message)."\n";





// create email headers

$headers = 'From: '.$email_from."\r\n".

'Reply-To: '.$email_from."\r\n" .

'X-Mailer: PHP/' . phpversion();

@mail($email_to, $email_subject, $email_message, $headers);  
if(mail){
echo "Thank you for contacting us. We will be in touch with you very soon.";
}
else {
echo "There's been an error. Please try again.";
}

 ?>

<?php

}

?>
<?php
   header( 'Location: http://kingdomhearts7.com/test3' ) ;
?>

如果有人能帮助我,我真的很感激,因为我是一个完整的菜鸟。

感谢。

更新:我能够通过删除一些空格来修复标题错误,但现在我遇到了一个新问题。

  
    

解析错误:语法错误,第28行&gt;&gt; /home3/ettrick/public_html/test3/mail.php中的意外T_CONSTANT_ENCAPSED_STRING

  
<?php 
$email_message .= "Name: ".($name)."\n";

$email_message .= "Email: ".($email)."\n";

$email_message .= "Message: ".($message)."\n";
mail($ToEmail, $EmailSubject, $email_message, $mailheader); 
?>
<?php
if(isset($_POST['email'])) {
       // EDIT THE 2 LINES BELOW AS REQUIRED
$email_from = "newsletter@kingdomhearts7.com";
$email_to = "fritzgattereau@gmail.com";
$email_subject = "Contact Form";
$email_message = "Form details below.\n\n";
function clean_string($string) {
  $bad = array("content-type","bcc:","to:","cc:","href");
  return str_replace($bad,"",$string);
}
$email_message .= "Name: ".clean_string($name)."\n";
$email_message .= "Email: ".clean_string($email)."\n";
$email_message .= "Message: ".clean_string($message)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".

'Reply-To: '.$email_from."\r\n" 

'X-Mailer: PHP/' . phpversion();

@mail($email_to, $email_subject, $email_message, $headers);  
if(mail){
echo "Thank you for contacting us. We will be in touch with you very soon.";
}
else {
echo "There's been an error. Please try again.";
}
?>
<?php
}
?>
<?php
header( 'Location: http://kingdomhearts7.com/test3' ) ;
?>

2 个答案:

答案 0 :(得分:1)

删除所有出现的

?>

<?php

因为他们已经开始输出(中间的换行符),所以在开始发送标题之前。

另外,if(isset($_POST['email'])),您正在执行echo文字。这也会导致输出阻止您发送标题。

要解决此问题,只有在没有echo任何内容的情况下才会发送标题(特别是如果您要发送'位置'标题。因为甚至会回复文本,因为您不会得到读它?)。

或者在开始时使用ob_start(),在ob_end_flush()之后使用header()。 (但这仍然意味着你正在回复那些你无法阅读的文字,因为header( "Location: ...");会在你阅读回音文本之前重定向。

答案 1 :(得分:1)

切勿在{{1​​}}和<?php

之间留出空格或换行符
?>