我正在尝试使用同一页面上的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上的其他帖子之后,我想问题可能是空格或已经发送的标题。但我仍然无法工作。
有人可以提供帮助,并提出解决此问题的建议吗?
答案 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了解详情。
此致