PHP表头标题位置不起作用

时间:2013-05-16 15:42:51

标签: php header http-headers

我正在尝试使用同一页面上的php错误检查来构建表单。

除了正确填写表单后,将访问者重定向到我网站上的其他页面(thanks.html),似乎一切正常。首先,将电子邮件发送到我的代码顶部提供的电子邮件地址,然后将访问者重定向到感谢页,我无法开始工作。

重定向是我的代码中的这一部分:

/* Redirect visitor to the thank you page */ header('Location: thanks.html');

以下是我的总体内容:

<?php
/* Set e-mail recipient */
$myemail = "myemail@gmail.com";
if (!$_POST['submit']) 
{ 
form();
} else { 
if (empty($_POST['name'])) { $error0='<br>name'; }
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email_address'])) {     $error2='<br>Valid email address'; }
if (empty($_POST['phonenumber'])) { $error1='<br>phonenumber'; }
if (empty($_POST['comment'])) { $error3='<br>comment'; }
$error_messages = $error0.$error1.$error2.$error3;
if ($error_messages) 
{ 
echo "Please ensure the following fields are completed before submitting your form:<strong>". $error_messages     ."</strong><br><br>";
form();
} else { 
$name = $_POST['name'];
$email_address = $_POST['email_address'];
$phonenumber = $_POST['phonenumber'];
$comment = $_POST['comment'];
/* Message for the e-mail */
$message = "
New contact request:
Name: $name
Email address: $email_address
Phonenumber: $phonenumber
comment: $comment
";
$subject = "Contact";
$headers = "From: $email_address";

/* Send the message using mail() function */
mail($myemail, $subject, $message, $headers);

/* Redirect visitor to the thank you page */
header('Location: thanks.html');
}}
?>

检查错误时,我得到了这个结果:

Warning: Cannot modify header information - headers already sent by (output started at form.php:11). 

Form.php:11是这行代码:

if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email_address'])) { $error2='<br>Valid email address'; }

所以在查看stackoverflow上的其他帖子之后,我想问题可能是空格或已经发送的标题。但我仍然无法工作。

有人可以提供帮助,并提出解决此问题的建议吗?

2 个答案:

答案 0 :(得分:2)

您是对的 - 如果您向浏览器输出任何内容,则无法重定向。这开头就是空间,真的是什么。

要解决这个问题,请查看php.net上的ob_ *函数。特别是,检查同花顺。你可以绕过这个。

希望有所帮助。如果您有ob_ *问题,请再次发帖。

答案 1 :(得分:0)

作为旁注,eregi自5.3.0起已被弃用,因此使用它可能不是一个好主意。而不是使用

eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email_address'])

使用

filter_var($_POST['email_address'], FILTER_VALIDATE_EMAIL)

请参阅http://php.net/manual/en/function.filter-var.php了解详情。

此致