Php 未使用标头正确重定向

Php 未使用标头正确重定向,php,mysql,Php,Mysql,删除工作正常,页面重定向,但删除后的url为http://localhost:/manage_items.php?yesdelete=23为什么会这样?它应该是manage\u items.php while ($row = $get_products->fetch()) { $item_id = $row['item_id']; $user_id = $row['user_id']; $item_name = $row['item_name']; $date = $r

删除工作正常,页面重定向,但删除后的url为
http://localhost:/manage_items.php?yesdelete=23
为什么会这样?它应该是
manage\u items.php

while ($row = $get_products->fetch()) {
  $item_id =  $row['item_id'];
  $user_id =  $row['user_id'];
  $item_name = $row['item_name'];
  $date = $row['add_date'];
  $image = $row['photopath'];
  $products .= "<br/><img src = $image><img> Item ID: $item_id UserID: $user_id NAME: 
                  $item_name Added on: $date &nbsp
                  <a href='item_edit.php?pid=$item_id'>Edit</a>&nbsp 
                  <a href='manage_items.php?deleted=$item_id'>Delete</a>";
}

//delete Item

if(isset($_GET['deleted'])) {
   echo 'delete this product?'.$_GET['deleted'].'<a 
         href="manage_items.php?yesdelete='.$_GET['deleted'].'">Yes<a/> 
         / <a href ="manage_items.php">No</a>';
   exit();
}

if(isset($_GET['yesdelete'])) {
  $deleteid = $_GET['yesdelete'];
  $sql = $db->exec("DELETE FROM item WHERE `item_id` = '$deleteid' LIMIT 1");
  $image_delete = 'file_to/$deleteid';

  if(file_exists($image_delete)) {
    unlink($image_delete);
  }
  header("Location: manage_items.php");
  exit();
}
while($row=$get\u products->fetch()){
$item_id=$row['item_id'];
$user_id=$row['user_id'];
$item_name=$row['item_name'];
$date=$row['add_date'];
$image=$row['photopath'];
$products.=“
项目ID:$Item\u ID UserID:$user\u ID NAME: $item\u名称添加于:$date   "; } //删除项目 如果(isset($_GET['deleted'])){ echo“删除此产品?”。$\u获取[“删除”]; 退出(); } 如果(isset($\u GET['yesdelete'])){ $deleteid=$_GET['yesdelete']; $sql=$db->exec(“从项目中删除,`item\u id`='$deleteid'限制1”); $image_delete='file_to/$deleteid'; 如果(文件存在($image\u delete)){ 取消链接($image\u delete); } 标题(“位置:manage_items.php”); 退出(); }
在任何类型的输出进入浏览器之前都必须调用header才能正常工作,即使我看不到完整的代码,但我看到您正在以下位置输出空白字符串:

  ?>
  <?php
?>

看起来像是标头已发送的案例

您必须执行以下操作

  • 删除代码块

    ?>
    
    或者至少确保在这之后没有空格或换行符
  • 您可以使用输出缓冲
  • 编辑:您也在重定向之前发送html。在这里我重新安排了你的密码。我已将删除块移到开头

    <?php
    //delete Item
    
    if(isset($_GET['yesdelete']))
    {
        $deleteid = $_GET['yesdelete'];
    
        $sql = $db->exec("DELETE FROM item WHERE `item_id` = '$deleteid' LIMIT 1");
    
        $image_delete = 'file_to/$deleteid';
    
        if(file_exists($image_delete))
        {
            unlink($image_delete);
    
        }
        header("Location: manage_items.php");
        exit();
    }
    while ($row = $get_products->fetch())
    {
        $item_id =  $row['item_id'];
        $user_id =  $row['user_id'];
        $item_name = $row['item_name'];
        $date = $row['add_date'];
        $image = $row['photopath'];
        $products .= "<br/><img src = $image><img> Item ID: $item_id UserID: $user_id NAME: 
                      $item_name Added on: $date &nbsp
                      <a href='item_edit.php?pid=$item_id'>Edit</a>&nbsp 
                      <a href='manage_items.php?deleted=$item_id'>Delete</a>";
    }
    if(isset($_GET['deleted']))
    {
        echo 'delete this product?'.$_GET['deleted'].'<a 
               href="manage_items.php?yesdelete='.$_GET['deleted'].'">Yes<a/> 
               / <a href ="manage_items.php">No</a>';
        exit();
    }
    ?>
    

    这就是问题所在。它位于页面顶部的会话块中

    session_start();
    
    if(!isset($_SESSION['id']))
    
    {
    header("Location: yackimo_register_form.php");
    
    exit();
    }
    $userID = $_SESSION['id'];
    echo "";<<<------------
    
    session_start();
    如果(!isset($\u会话['id']))
    {
    标题(“位置:yackimo_register_form.php”);
    退出();
    }
    $userID=$\会话['id'];
    
    回声“;1.您的代码易受sql注入2的攻击。您的代码易受不同浏览器的XSSTry攻击,请查看它是否具有相同的功能。代码中没有任何内容表明查询字符串应该在重定向中保持不变。您还可以尝试在浏览器的NetDeveloper控制台中监视网络请求/响应tab@dhpratik是的,我看得出来,但那有什么问题吗?@dhpratik是的,它就在房间里code@mavrosxristoforos对,代码有效。没有已发送的
    标题
    消息。确保没有空白,我不是反对者,但你的回答没有任何用处。@mavrosxristoforos这篇文章的第一项实际上修复了error@IlyaBursov你测试了吗?@IlyaBursov如果重定向有效,它还没有发送头。花点时间阅读评论。我知道,因为在这个问题第一次被编辑之前我就在这里(两个php代码块被合并成一个)@rogert我指的是你最初拥有的这个问题的两个blockquote。OP已经确认重定向发生了。这不是一个已经发送的问题我很高兴你找到了它。只需确保下次确实添加了所有可疑代码。
    session_start();
    
    if(!isset($_SESSION['id']))
    
    {
    header("Location: yackimo_register_form.php");
    
    exit();
    }
    $userID = $_SESSION['id'];
    echo "";<<<------------