2012-10-20 87 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

看起来你之前已经输出了缓冲,因为你在尝试重定向之前肯定有输出。