2013-07-30 45 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