2013-10-23 74 views
4

删除工程和页面重定向,但删除后的网址是http://localhost:/manage_items.php?yesdelete=23这是为什么?它应该是之前的任何类型的输出去的浏览器才能正常工作manage_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(); 
} 
+11

_1._ **你的代码是容易受到SQL注入** ** _2._你的代码很容易受到XSS * * –

+0

@NullPoiиteя是的,我知道,但这不是我关心的问题。 – rogerthat

+0

你有什么错误吗? – bansi

回答

0

头必须调用,即使我没有看到整个代码,我看到你在输出空字符串:

?> 
    <?php 

删除所有这样的地方和可能的其他地方输出可以做到的 - 那么重定向将工作

还,我真的建议你使用正确的重定向:

function redirect($url) 
{ 
    if (!headers_sent()) 
    { 
     if (strtoupper($_SERVER['SERVER_PROTOCOL']) == 'HTTP/1.1') 
      @header('HTTP/1.1 303 See Other', true, 303); 
     else 
      @header('HTTP/1.0 302 Found', true, 302); 
     @header('Location: ' . $url); 
     @header('Content-type: text/html'); 
    } 

    echo '<html><head><title>Redirect</title><meta http-equiv="Refresh" content="0;URL='.htmlspecialchars($url).'"></head><body>'. 
     '<a href="'.htmlspecialchars($url).'">Click here</a>'. 
     '</body></html>'; 
    @ob_flush(); 
    exit(); 
} 
+2

OP已经确认重定向发生。这不是*头已经发送*问题 – Phil

0

看起来像是一个已经发送头的情况。

您必须执行以下操作。

  1. 删除代码块。

    ?> <?php

  2. 前第一<?

  3. 删除任何空间和换行符删除最后?>或者,至少要确保没有空格或换行之后。
  4. 您可以使用输出缓冲ob_startob_end_flush

编辑:您重定向之前还发送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(); 
} 
?> 
+2

我不是downvoter,但你的答案表明没有用。 – mavrosxristoforos

+0

@mavrosxristoforos从这个职位的第一项实际修复错误 –

+0

@IlyaBursov你测试? – rogerthat

0

这是问题所在。这是在我的会话框页面

session_start(); 

if(!isset($_SESSION['id'])) 

{ 
header("Location: yackimo_register_form.php"); 

exit(); 
} 
$userID = $_SESSION['id']; 
echo "";<<<------------ 

坏习惯的顶部

+0

我很高兴你找到它。只要确保你下次实际添加所有可疑的代码。 – mavrosxristoforos

相关问题