PHP联系表单重定向错误

时间:2013-07-30 18:12:22

标签: php forms contact

我最近移动了服务器,因为我做了我的php联系表单有点偏斜。

它作为联系表格很好,但重定向功能不再存在。

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

  

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

这是我的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

谢谢你, -Alex

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

只有在写入任何输出之前,才能使用标题功能。基本上是脚本的开始

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>'; 
    }
}

答案 2 :(得分:0)

在PHP中,您在使用echo()之前使用header()。当您向页面输出内容时,您正在有效地关闭HTTP标头。当您再次尝试使用header()功能时,因为必须在任何内容之前发送标头,否则您将收到该消息作为错误。

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

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

答案 3 :(得分:0)

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

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

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