我正在尝试使用复选框项删除多张图片。但不知何故,图片不会从数据库中删除。
没有错误的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> ".$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');
}
}
?>
答案 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> {$List['picture_name']}</span>";
}
?>
另外,请尝试使用DELETE
逻辑:
photoList
(与Delit
相比)(int)
以防止SQL注入implode
DELETE... WHERE IN
查询,提供照片ID列表 - 这比循环执行并执行多个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');
}
?>