";无法修改标题信息“;警告


"Cannot modify header information" warning

我在观看YouTube教程时收到了这个警告,不知道为什么:

警告:无法修改标头信息-标头已由发送(输出起始于/Applications/XAMPP/examplepfiles/htdocs/storeadmin/inventory_list.php:23

这是代码:

<?php
session_start();
if(!isset($_SESSION["manager"])){
header("location: admin_login.php");
exit();
}
$managerID = preg_replace('#[^0-9]#i','',$_SESSION["id"]);//filter everything but numbers
$manager= preg_replace('#[^A-Za-z0-9]#i','',$_SESSION["manager"]);
$password= preg_replace('#[^A-Za-z0-9]#i','',$_SESSION["password"]);
include "../connect_to_mysql.php";//includes file to connect to db
$sql= mysql_query("SELECT * FROM admin WHERE id='$managerID' AND username='$manager' AND password='$password' LIMIT 1");
$existCount=mysql_num_rows($sql); //count row
if ($existCount == 0) {
echo "your login does not exist";
exit();
}
?>

<?php
error_reporting(E_ALL);//error report testing
ini_set('display_errors','1');
?>
<?php 
// Delete Item Question to Admin, and Delete Product if they choose
if (isset($_GET['deleteid'])) {
    echo 'Do you really want to delete product with ID of ' . $_GET['deleteid'] . '? <a href="inventory_list.php?yesdelete=' . $_GET['deleteid'] . '">Yes</a> | <a href="inventory_list.php">No</a>';
    exit();
}
if (isset($_GET['yesdelete'])) {
    // remove item from system and delete its picture
    // delete from database
    $id_to_delete = $_GET['yesdelete'];
    $sql = mysql_query("DELETE FROM products WHERE id='$id_to_delete' LIMIT 1") or die (mysql_error());
    // unlink the image from server
    // Remove The Pic -------------------------------------------
    $pictodelete = ("../inventory_images/$id_to_delete.jpg");
    if (file_exists($pictodelete)) {
                unlink($pictodelete);
    }
    header("location: inventory_list.php"); 
    exit();
    }
?>

<?php
//parse form data adds inventory item to database
if(isset($_POST['product_name'])){
$product_name = mysql_real_escape_string($_POST['product_name']);
$price = mysql_real_escape_string($_POST['price']);
$proddescription = mysql_real_escape_string($_POST['proddescription']);
$genre = mysql_real_escape_string($_POST['genre']);
$quantity = mysql_real_escape_string($_POST['quantity']);
//this checks if an item already exists under this name
$sql= mysql_query("SELECT id FROM products WHERE product_name='$product_name' LIMIT 1");
$productMatch = mysql_num_rows($sql);
if($productMatch > 0){
echo 'Sorry, this item already exists, <a href="inventory_list.php">click here</a>';
exit();
}
//add items to database
$sql = mysql_query("INSERT INTO products (product_name, price, proddescription, genre, quantity)
VALUES('$product_name','$price','$proddescription','$genre','$quantity')") or die (mysql_error());
$pid = mysql_insert_id();
    // Place image in the folder 
    $newname = "$pid.jpg";
    move_uploaded_file( $_FILES['fileField']['tmp_name'], "../inventory_images/$newname");
    header("location: inventory_list.php"); 
    exit();
}
?>
<?php
//this displays whole list
$product_list="";
$sql = mysql_query("SELECT * FROM products");
$productCount =mysql_num_rows($sql);
if($productCount>0){
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
$product_name = $row["product_name"];
$price = $row["price"];
$quantity = $row["quantity"];
$product_list.="$id - $product_name - $quantity - $price &nbsp; &nbsp; &nbsp; <a href= 'inventory_edit.php?pid=$id'>edit</a> &bull; <a href='inventory_list.php?deleteid=$id'>delete</a><br />";
}
} else {
$product_list = "There are no products in the store.";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
   <title>Inventory List</title>
   <link href="../style2.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
   <div id="masthead">
   </div>
   <div id="navigation">
      <p><a href="index1.php">Home</a>
      <a href="fiction.php">Fiction</a>
      <a href="travel.php">Travel</a>
      <a href="sport.php">Sport</a>
      <a href="arts.php">Arts & Design</a>
      <a href="cart.php">Shopping Cart</a>
      <a href="account.php">Manage Account</a></p>

   </div>
   <div id="content">
   <div align ="right" style="margin-right:32px;"><a href="inventory_list.php#inventoryForm">+ Add New Item</a></div>
   <div align="left" style="margin-left:24px;">
   </div>
<h4>Inventory List</h4>
<?php echo $product_list; ?>
<a name = "inventoryForm" id="inventoryForm"></a>
<h3> 
&darr; Add New Item Form &darr;
</h3>
<form action="inventory_list.php" enctype="multipart/form-data" name="myForm" id="myForm" method="post">
<table width="90%" border="0" cellspacing="0" cellpadding="6">
<tr>
<td width="20%">Product Name</td>
<td width="80%"><label>
<input name="product_name" type="text" id="product_name" size="64" />
</label></td>
</tr>
<tr>
<td>Product Price</td>
<td><label>
&pound;
<input name="price" type="text" id="price" size="12" />
</label></td>
</tr>
<tr>
<td>Description</td>
<td><label>
<input name="proddescription" type="text" id="proddescription" size="64" />
</label></td>
</tr>
<tr>
<td>Genre</td>
<td><label>
<select name="genre" id="genre" />
<option value=""></option>
<option value="Fiction">Fiction</option>
<option value="Travel">Travel</option>
<option value="Sport">Sport</option>
<option value="Arts & Design">Arts & Design</option>
</select>
</label></td>
</tr>
<tr>
<td>Product Image</td>
<td><label>
<input type="file" name="fileField" id="fileField" />
</label></td>
</tr>
<tr>
<td>Quantity</td>
<td><label>
<input name="quantity" type="text" id="quantity" size="4" />
</label></td>
</tr>
<tr>
<tr>
<td>&nbsp;</td>
<td><label>
<input type="submit" name="button" id="button" value="Add Item" />
</label></td>
</tr>
</table>
</form>
<br />
<br />
</div>
   <div id="footer">
      <p>ADMIN AREA</p>
   </div>
</div>
</body>
</html>

php标签外有一个空行:

?>

<?php

这将导致php发送换行符。

这发生在稍后块中的一个header()调用中。例如,在第三个<?php ?>块中,它调用:

header("location: inventory_list.php");

每个<?php ?>块之间都有空行,因此它被视为原始HTML,并在发生时立即发送到用户的浏览器(代码块外的第一行是第23行,这就是错误中提到它的原因)。在发送数据之前,必须发送标头,因此此时您无法再更改它们。由于PHP块之间除了空行之外什么都没有,所以您可以将它们合并在一起以修复

由于错误提示您无法修改标头。因此,如果使用header()函数,请确保<?php ?>标记之外没有空间或内容。不要在同一个脚本中两次发送同一个标头。在你的代码中有几个类似的问题:

 ...
 echo "your login does not exist";
 exit();
}
?> 
//here you have space and 'n
<?php

合并所有PHP块。