PHP 提交后联系表返回错误

PHP Contact Form returning error upon submission

所以我尝试在 2 台不同的服务器上发布一个带有 PHP 联系表单的页面,但我无法让它们中的任何一个正常工作。

服务器 1:
Returns 提交后 500 internal error 页。
我联系了网络支持,他们回答说我有:

malformed header from script 'index.php': Bad header:

我的index.php代码如下:

    <?php
 if(isset($_POST['submit']))
 {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $query = $_POST['message'];
    $email_from = $name.'<'.$email.'>';

 $to="testemail@email.com";
 $subject="test subject";
 $headers  = 'MIME-Version: 1.0' . "\r\n";
 $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 $headers .= "From: ".$email_from."\r\n";
 $message="   

         Name:
         $name     
         <br>
         Email:
         $email        
         <br>
         Message:
         $query        

   ";
    if(mail($to,$subject,$message,$headers))
        header("Location:../contact.php?msg=Successful Submission!<br />
 Thank you for contacting us.");
    else
        header("Location:../contact.php?msg=Error To send Email !");
 }
?>

服务器 2:
正确地将我链接到我的 "Thank you page",但它正在显示 "Error To send Email !" 而不是 "Successful Submission!"

任何帮助或建议将不胜感激!

问题似乎是 header 位置重定向调用,它应该提供完整的 url,例如:

header("Location: http://www.example.com");

相对 url 已根据浏览器的最大努力进行处理,您的浏览器显然不喜欢 ../,因此 "bad header" 投诉。

这在 php.net page as per the official URL spec 上有注明。

我认为问题出在这部分:

 if(mail($to,$subject,$message,$headers))
        header("Location:../contact.php?msg=Successful Submission!<br />
 Thank you for contacting us.");
    else
        header("Location:../contact.php?msg=Error To send Email !");

具体在header();

  1. 每个 space 将转换为 %20,因为没有包含 space 的 URL;
  2. 没有<、>、!等特殊字符在网址中
  3. <br /> 中的“/”会建议名为“>感谢您联系我们。”的文件。

查看:http://www.w3schools.com/tags/ref_urlencode.asp

还要在每个 header 后面加上 exit(); 以防止进一步执行脚本