4

削除が効いてページがリダイレクトされるのですが、削除後のURLは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();
}
4

3 に答える 3

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();
}
于 2013-10-23T05:23:46.127 に答える
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();
}
?>
于 2013-10-23T05:24:00.740 に答える
0

これが問題でした。ページ上部のセッションブロックにありました

session_start();

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

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

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

悪癖

于 2013-10-23T05:55:23.220 に答える