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();
- 每个 space 将转换为 %20,因为没有包含 space 的 URL;
- 没有<、>、!等特殊字符在网址中
<br />
中的“/”会建议名为“>感谢您联系我们。”的文件。
查看:http://www.w3schools.com/tags/ref_urlencode.asp;
还要在每个 header 后面加上 exit();
以防止进一步执行脚本
所以我尝试在 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();
- 每个 space 将转换为 %20,因为没有包含 space 的 URL;
- 没有<、>、!等特殊字符在网址中
<br />
中的“/”会建议名为“>感谢您联系我们。”的文件。
查看:http://www.w3schools.com/tags/ref_urlencode.asp;
还要在每个 header 后面加上 exit();
以防止进一步执行脚本