【问题标题】:PHP Contact Form Redirect ErrorPHP联系表单重定向错误
【发布时间】:2013-07-31 00:46:33
【问题描述】:

我最近搬了服务器,自从我搬家后,我的 php 联系表格有点歪了。

作为联系表格可以正常工作,但重定向功能不复存在。

我在重定向页面上收到此错误:

警告:无法修改标头信息 - 标头已由 (输出开始于 /home/content/73/11511973/html/contact.php:14) /home/content/73/11511973/html/contact.php 第 20 行

这是我的contact.php代码:

<?php

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: Order/Enquiry';
    $to = 'crookedcartoon@gmail.com'; 
    $subject = "From: ".$_POST['name'];

    $body = "From: $name\nE-Mail: $email\n\nMessage:\n\n $message";

if ($_POST['submit']) {
    if (mail ($to, $subject, $body, $from)) { 
        echo '<p><center><br><img src="images/cat.jpg"><br><br><br><font size="4" face="Tw Cen MT">Your message has been sent! You will now be redirected to the home page.<br><br>Thank you for your message!</font></center></p>';
    } else { 
        echo '<p><center><br><img src="images/cat.jpg"><br><br><br><font size="4" face="Tw Cen MT">Something went wrong, go back and try again! You will now be redirected to the home page.</font></center></p</p>'; 
    }
}

header('Refresh: 3; url=index.html')

?>

这是我的网站,页面处于完整状态:

www.crookedcartoon.co.uk/contact.html

谢谢你, -亚历克斯

【问题讨论】:

  • 使用header("Location: index.html"); 而不是header('Refresh: 3; url=index.html')。另外,您的header('Refresh: 3; url=index.html') 末尾没有结束;
  • 另外,您收到该错误消息的原因(“无法修改标头信息”)可能是由 PHP、HTML 上方的空格或臭名昭著的 @987654327 引起的@字节顺序标记。其中一个原因会导致这种情况。

标签: php forms contact


【解决方案1】:

header()之前不得输出任何内容。

在重定向之前删除所有输出。

【讨论】:

    【解决方案2】:

    您只能在写入任何输出之前使用标头函数。基本上在脚本的开头

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) { 
            header();
        } else { 
            echo '<p><center><br><img src="images/cat.jpg"><br><br><br><font size="4" face="Tw Cen MT">Something went wrong, go back and try again! You will now be redirected to the home page.</font></center></p</p>'; 
        }
    }
    

    【讨论】:

      【解决方案3】:

      在 PHP 中,您在使用 header() 之前使用 echo()。当您将内容输出到页面时,您实际上是在关闭 HTTP 标头。当您再次尝试使用 header() 函数时,由于必须在任何内容之前发送标头,您会收到错误消息。

      您可以在页面的 HTML 标头中使用meta-refresh,如果您希望他们在几秒钟内实际看到页面内容。

      <meta http-equiv="refresh" content="3;url=/index.html">
      

      【讨论】:

        【解决方案4】:

        您得到的错误非常准确。在 HTTP 请求/响应中,标头是发送回用户的第一个项目。当你使用echo 输出文本时,你基本上是在告诉 PHP “好的,我已经完成了标题,我已经准备好开始输出我的响应正文了。”

        我通常不建议向用户显示消息,只是在几秒钟后自动重定向他,因为显示中间页面是整个过程中不必要的步骤。相反,我可能会在 index.html 本身上显示“成功”消息。如果你真的想做你想做的事,你可以:

        1. 使用输出缓冲获取您的输出,并在发出重定向标头后,像这样刷新输出缓冲区。为此,请在 echo 之前调用 ob_start();,然后在 header("..."); 之后调用 ob_end_flush();,或者...
        2. 在页面本身的 HTML 中显示 &lt;meta http-equiv="refresh" content="3; url=index.html"&gt;,或者...
        3. 不要自动发出重定向标头,而是在“成功”页面上提供指向 index.html 的链接

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多