2013-07-30 44 views
0

我最近刚到的服务器,因为我做了我的PHP的联系表格已经有点歪斜,WIFF。PHP联系表重定向错误

它工作正常,作为一个接触的形式,而是重新定向功能将不复存在。

我得到了重新定向页面上此错误:

警告:不能更改头信息 - 已经 发送头(输出开始/家庭/内容/11511973分之73/ HTML /接触。 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 = '[email protected]'; 
    $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

+0

使用'标题(“位置:index.html的”);',而不是'头('Refresh:3; url = index.html')'。另外,您的'header'('Refresh:3; url = index.html')'末尾没有关闭';'。 –

+0

此外,您收到错误消息(*“无法修改标题信息”*)的原因可能是PHP,HTML或臭名昭着的BOM字节顺序标记之间的空白造成的。其中一个原因会导致这种情况。 –

回答

0

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

移除重定向之前,所有输出。

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

的beggining在PHP中你使用echo()使用header()之前。当您向页面输出内容时,您正在有效关闭HTTP标头。当您尝试再次使用header()函数时,由于标题必须在任何内容之前发送,因此您将该消息视为错误。

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

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

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

我一般不推荐显示消息给用户仅自动重定向他几秒钟后,因为表示中间页面是在整个过程中的不必要的步骤。相反,我可能会在index.html本身上显示“成功”消息。如果你真的想这样做,你以后要去什么,你可以:

  1. 使用输出缓冲抓住你的输出,并且已经发出你的重定向头后,刷新输出缓冲区像这样。由你echo任何事情之前调用ob_start();在页面本身,或的HTML做到这一点,然后header("...");后打电话ob_end_flush();,或...
  2. 显示<meta http-equiv="refresh" content="3; url=index.html"> ...
  3. 不自动发出重定向头,而是提供了一个链接到“成功”页面上的index.html