无法修改标头信息

时间:2012-10-20 02:40:33

标签: php

  

可能重复:
  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
}
?>

以前工作过,现在不行,不太确定原因。

3 个答案:

答案 0 :(得分: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(); 

答案 1 :(得分:0)

这是因为你已经向stdout输出了一些东西。看看你的代码。如果您没有明确地这样做,可能是您的代码执行中存在错误(例如,MySQL连接错误),display_errors Onphp.iniheader来电之前写入错误消息。

此外,如果您的PHP代码的编码发生了变化,那么在您发送标题之前,您的代码可能已经添加了BOM字符,这是一种非自愿但非常实际的输出。

可能导致此问题的另一件事是,使用close-open ?><?php标记可能会在PHP块之间的代码中留下空格(甚至其他字符),从而通过HTTP向浏览器发送不必要的输出,导致问题。

答案 2 :(得分:0)

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