我编写了代码来检索特定城市的数据库中的所有图像,我希望能够删除特定图像或更改标题。
问题是:
代码始终仅适用于最后一张图片! 我希望你们能够帮助我解决这个问题。
检索代码:
<?php
$City_name=$_REQUEST['id'];
$Image_query = "SELECT * FROM image where City_name ='".$City_name."' ";
$Image_result = mysqli_query($dbcon,$Image_query);
echo "<table>";
while ($row = mysqli_fetch_array($Image_result))
{
$image_id = $row['Image_id'];
$image = $row['Image_url'];
$Caption = $row['Caption'];
echo "<tr style='float:right;'>";
echo "<td>"; ?> <img src="<?php echo $image ; ?>"/> <br>
<input type="text" name="caption" value="<?php echo $Caption ;?>" />
<br> <input name="delete" type="submit" value="Delete picture" />
<br> <input name="Update_caption" type="submit" value="change caption" />
<?php echo "</td>";
echo "<td>"; ?> <input class="input-image" type="hidden" name="id" value="<?php echo $image_id ;?>" />
<?php echo "</td>";
} /* End of while loop */
echo "</tr>";
echo"</table>";
?>
更新代码:
if (isset($_POST['Update_caption'])) {
$ImageID = $_POST['id'];
$ImageCaption = $_POST['caption'];
$sql = mysqli_query ($dbcon,"UPDATE `image` SET `Caption`='".$ImageCaption."' WHERE `Image_id`='".$ImageID."' ");
if ($sql) {
echo "done";
} else { echo "error"; }
}
删除代码:
if (isset($_POST['delete'])) {
$ImageID = $_POST['id'];
$sql = mysqli_query ($dbcon,"DELETE FROM `image` where `Image_id` = '".$ImageID."' ");
if ($sql) {
echo "done";
} else { echo "error"; }
}
答案 0 :(得分:0)
$_POST['id']
(sql injection alert!)包含名称属性为id
的input元素的内容。
你正在循环中回显你的输入元素,所有这些都具有相同的名称,所以最后一个将覆盖所有以前的输入元素。
您应该使用类似的数组:
<input class="input-image" type="hidden" name="id[<?php echo $image_id ;?>]" value="<?php echo $image_id ;?>" />
这样你的$_POST['id']
就是一个包含所有元素的数组。
这同样适用于其他输入元素,如标题。
替代方案,尤其是对于您的删除选项,将以自己的形式包装每个图像。但请记住,您需要有效的html才能使用,您不能拥有一个在行元素中打开并跨越不同列的表单。
请注意,您应该使用预准备语句来关闭现在的SQL注入漏洞。