1

チェックボックス項目を使用して複数の写真を削除しようとしています。しかし、どういうわけか写真はデータベースから削除されません。

コードは間違いなく実行されます。ページはリダイレクトされていますが、削除クエリは実行されていません。

画像IDをクエリに渡すことに何か関係があると思います$List[1]が、何が何なのか本当に理解できません。すべてうまくいっているようです。

事前に助けてくれてありがとう。

それがコードです:

<?php
$Connection = mysql_connect( $Host, $User, $Pass ) or die('ERROR: '.mysql_error());
mysql_select_db( $DataBase )or die('ERROR: '.mysql_error());

$Query = "SELECT * FROM pictures WHERE folder_id = ".$FolId.";";
$Picture = mysql_query($Query, $Connection)or die('ERROR: '.mysql_error());
?>
    <form name='Photos' method='POST' >
<?php
   while($List = mysql_fetch_array($Picture)){
     echo "<input type='checkbox' name='photoList[]' value='".$List[1]."'> <span> &nbsp;".$List[4]."</span>";
   }
?>
   <input type='submit' name='Delit' value='DELETE'  >
       </form>

<?php
   if(isset($_POST['Delit'])){
     foreach($_POST['photoList'] as $item){
       $Query="DELETE FROM pictures WHERE picture_id =".$item;
       mysql_query($Query, $Connection)or die("ERROR: ".mysql_error());
       header('Location: photos.php');
    }
  }
?>
4

1 に答える 1

1

私の推測では$List[1]、あなたのpicture_id. おそらく$List[0]です。

を使用fetch_arrayして DB からデータを取得する方法としては、 を使用するのは適切ではありませんSELECT *。列の位置が変わる可能性があり、取得している列がインデックスによって明確に示されないからです。

fetch_assoc代わりに使用して、データに関連付けられた列名を取得してみてください。

<?php
    // Change `picture_name` below to the name of the column storing your picture's name
    while ($List = mysql_fetch_assoc($Picture)) {
        echo "<input type='checkbox' name='photoList[]' value='{$List['picture_id']}'> <span> &nbsp;{$List['picture_name']}</span>";
    }
?>

また、あなたのDELETEロジックのためにこれを試してください:

  1. が設定されているかどうかの確認photoList(vs. Delit)
  2. 写真リストをループし、(int)SQL インジェクションを防ぐために値をキャストする
  3. を使用して ID のリストをカンマ区切りのリストに連結するimplode
  4. 写真 ID リストを提供するクエリを実行する - これは、ループしていくつかのステートメントDELETE... WHERE INを実行するよりもはるかに高速ですDELETE... WHERE =

コード:

<?php
    if (isset($_POST['photoList']) && !empty($_POST['photoList'])) {
        $photoIds = array();
        foreach ($_POST['photoList'] as $photoId) {
            $photoIds[] = (int) $photoId;
        }
        $photoIds = implode(',', $photoIds);
        $Query = "DELETE FROM pictures WHERE picture_id IN ({$photoIds})";
        mysql_query($Query, $Connection)or die("ERROR: ".mysql_error());
        header('Location: photos.php');
    }
?>
于 2013-06-29T12:29:29.277 に答える