0

我最近移动了服务器,自从我这样做以来,我的 php 联系表已经有点歪斜了。

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

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

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

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

谢谢你,-亚历克斯

4

4 回答 4

0

在你使用 PHPecho()之前,你使用header(). 当您将内容输出到页面时,您实际上是在关闭 HTTP 标头。当您再次尝试使用该header()功能时,由于必须在任何内容之前发送标头,您将收到该消息作为错误。

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

<meta http-equiv="refresh" content="3;url=/index.html">
于 2013-07-30T18:14:50.003 回答
0

之前不能输出任何东西header()

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

于 2013-07-30T18:13:37.947 回答
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>'; 
    }
}
于 2013-07-30T18:13:50.000 回答
0

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

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

  1. 使用输出缓冲获取您的输出,并在发出重定向标头后,像这样刷新输出缓冲区。ob_start();通过在你之前调用任何东西来做到这一点,然后在之后echo调用,或者......ob_end_flush();header("...");
  2. 显示<meta http-equiv="refresh" content="3; url=index.html">在页面本身的 HTML 中,或者...
  3. 不要自动发出重定向标头,而是在“成功”页面上提供指向 index.html 的链接
于 2013-07-30T18:24:16.153 回答