2013-05-16 55 views
-4

我想在同一页上使用php错误检查来构建窗体。PHP窗体标题位置不工作

除了将访问者重定向到我网站上的另一个页面(thanks.html)之后,所有内容似乎都能正常工作,因为他们填写了正确的表单。首先,将电子邮件发送到我的代码顶部提供的电子邮件地址,然后将访问者重定向到我无法工作的感谢页面。

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

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

下面是我在总:

<?php 
/* Set e-mail recipient */ 
$myemail = "[email protected]"; 
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

您是对的 - 如果您向浏览器输出任何内容,则无法重定向。这在一开始就是空间,任何事情都是真的。

为了解决这个问题,请查看php.net上的ob_ *函数。特别是,检查刷新。你将能够绕过这一点。

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

+0

感谢您的帮助。 我试着添加ob_start();在开头<?php和ob_end_flush()之后的顶部。在底部。 还加入退出;标题重定向之后。我也移动了 $ headers =“From:$ email_address”; 最适合发送联系电子邮件。 但仍然没有运气......非常令人沮丧。 – Chazz

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获取更多信息。

Regards

+0

注意到我改变了你的建议 – Chazz