无法检查选中的检查清单

时间:2013-06-29 12:24:37

标签: php mysql

我正在尝试使用复选框项删除多张图片。但不知何故,图片不会从数据库中删除。

没有错误的coderuns。正在重定向页面,但不执行删除查询。

我相信将图片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');
    }
  }
?>

1 个答案:

答案 0 :(得分:1)

我的猜测是$List[1]不包含您的picture_id。它可能是$List[0]

使用fetch_array不是使用SELECT *从数据库获取数据的好方法,因为您的列可能会更改位置,并且索引不会清楚地说明您要检索的列。< / p>

请尝试使用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(与Delit相比)
  2. 循环浏览照片列表并将值转换为(int)以防止SQL注入
  3. 使用implode
  4. 将ID列表连接到逗号分隔的列表中
  5. 执行DELETE... WHERE IN查询,提供照片ID列表 - 这比循环执行并执行多个DELETE... WHERE =语句要快得多
  6. 代码:

    <?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');
        }
    ?>