【问题标题】:PHP Form Header Location not working [duplicate]PHP表单标题位置不起作用[重复]
【发布时间】:2013-05-16 15:42:51
【问题描述】:

我正在尝试在同一页面上使用 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 上的其他帖子后,我猜问题可能是空格或已发送的标头。但我仍然无法正常工作。

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

【问题讨论】:

    标签: php header http-headers


    【解决方案1】:

    您是对的 - 如果您向浏览器输出任何内容,则无法重定向。这适用于一开始的空间,任何东西。

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

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

    【讨论】:

    • 感谢您的帮助。我尝试添加 ob_start();在打开
    【解决方案2】:

    附带说明,从 5.3.0 起,eregi 已被弃用,因此使用它可能不是一个好主意。而不是使用

    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 了解更多信息。

    问候

    【讨论】:

    • 注意到我把它改成了你的建议
    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多