Php 未使用标头正确重定向
删除工作正常,页面重定向,但删除后的url为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
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  
<a href='item_edit.php?pid=$item_id'>Edit</a> 
<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  
<a href='item_edit.php?pid=$item_id'>Edit</a> 
<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 "";<<<------------