2012-10-20 118 views
2

Possible Duplicate:
Headers already sent by PHP不能更改頭信息

錯誤:

Warning: Cannot modify header information - headers already sent by (output started at functions.php:37) in functions.php on line 207 

add.php

<?php include('functions.php'); ?> 
<?php global_header("Add"); ?> 
    <?php page_navigation(); ?> 
    <?php 
    // If no form has been submitted, present form 
    if (empty($_POST)) 
    { 
     add_form(); 
    } 
    // if a form has been submitted 
    else 
    {  
     // if form_validity() == 1, proceed to connect 
     if (form_validity() == 1) 
     { 
      // connect to mysql + database 
      connect(); 

      // get values from form, insert into database 

      $saleItemCheck = isset($_POST['saleItem'])?"y":"n"; 
      $discItemCheck = isset($_POST['discountedItem'])?"y":"n"; 

      $sql=("INSERT INTO inventory (name, manufac, model, descrip, onhand, reorder, cost, price, sale, discont, deleted) 
         VALUES ('$_POST[itemName]', '$_POST[manufacturer]', '$_POST[model]', '$_POST[description]', '$_POST[numberOnHand]', 
           '$_POST[reorderLevel]', '$_POST[cost]','$_POST[sellingPrice]', 
           '$saleItemCheck', '$discItemCheck', 'n')"); 

      // if the query doesn't work, display error message 
      if (!(mysql_query($sql))) { die ("could not query: " . mysql_error()); } 

      add_form(); 

      redirect("view.php"); 
     } 
     else 
     { 
      // if form is not valid (form_validity returns 0), display error messages 
      add_form(); 
     } 
    } 
    ?> 
<?php page_footer(); ?> 

我重定向功能

<?php 
function redirect($page) 
{ 
header('Location:'.$page); <------------------------------------ line 207 
}?> 

頭功能

<?php 
function global_header($page_title) 
{ 
    $content = '<!doctype html> 
    <html lang="en"> 
     <head> 
      <meta charset="utf-8"> 
      <title>DIMAS OLYMPIC WEIGHTLIFTING EQUIPMENT - ' . $page_title . '</title> 
      <meta name="description" content="BTI320 Assignment 1"> 
      <meta name="author" content="Marcel Olszewski - 078-681-103"> 
      <link rel="stylesheet" href="style.css" /> 
     </head> 
     <body> 
     <div id="container"> 
     <div><img src="logo.png" id="logo" alt="I (Marcel Olszewski) created this in photoshop" /></div>'; 
    echo $content; <------------------- LINE 37 
} 
?> 

它工作過,現在不行,不太清楚爲什麼。

回答

0

這是因爲你已經outputed一些東西到標準輸出。看看你的代碼。如果您沒有明確地做到這一點,那麼執行代碼時可能會出錯(例如MySQL連接錯誤),並且您的php.ini中的display_errorsOn,因此在調用header之前會寫入錯誤消息。另外,如果您的PHP代碼的編碼發生了變化,您的代碼中可能會預先附加一個BOM字符,在您發送標題之前,它是一種非自願但非常真實的輸出。

另一件可能導致問題的事情是,有開放的?><?php標籤可能會在PHP代碼塊之間留下代碼中的空白(甚至是其他字符),通過HTTP向瀏覽器發送不必要的輸出,導致問題。

+0

完成後空格它好工作之前,不知道我哪裏錯了。 – eveo

+0

正如我所說的,它可能是你現在得到的錯誤,以前沒有出現。另外,如果你的PHP代碼的編碼發生了變化,一個BOM字符可能已經預先考慮到你的代碼,是一種不由自主的,但非常實際產出你把你的頭前。 –

+0

使用記事本++擺脫BOM字符,仍然無法正常工作。 – eveo

1

你並不需要關閉並重新打開PHP標籤 - 此:

 } 
} 
?> 
<?php page_footer(); ?> 

可以轉換爲:

} 
} 
page_footer(); 

你甚至都不需要關閉PHP標籤。通過關閉標籤,您可能會在結束標籤之後留下空白,並將其回傳給瀏覽器,並導致您遇到的問題。 一般來說,如果它們在文件的末尾,則不需要關閉PHP標記。

編輯:這是你的問題:

變化:

<?php include('functions.php'); ?> 
<?php global_header("Add"); ?> 
    <?php page_navigation(); ?> 
    <?php 

到:

<?php include('functions.php'); 
global_header("Add"); 
page_navigation(); 
+0

感謝您解決我沒有在第一個地方我猜想的問題? – eveo

+0

我在說的是,如果你關閉你的PHP標籤並且在你的結束標籤之後有一個空格(或換行符等),那將被認爲是輸出,然後如果你嘗試發送標題,它會顯示你的錯誤,重新接收。 – StackOverflowed

+1

我爲粗魯而道歉。但是,錯誤信息只提到我的函數文件,並且自從項目開始以來我沒有更改過這個頁腳,但是之前似乎重定向了。 – eveo

0

看起來你之前已經輸出了緩衝,因爲你在嘗試重定向之前肯定有輸出。