如何通过img_id在PHP中实现博客文章指定图片的删除功能
解决图片删除功能失效的问题
你已经精准定位到核心问题了——在echo语句里嵌套<?php print $img_id; ?>是完全错误的写法:此时你已经处于PHP代码执行环境中,不能再直接嵌入PHP标签,而且你要输出的应该是循环里当前图片的$imrow->img_id,而非未定义的$img_id变量。
问题根源
原代码中这一行的错误导致表单提交的delete_rec_id值是无效的字符串<?php print $img_id; ?>,而非真实的图片ID,自然无法触发正确的删除逻辑:
echo '<input type="hidden" name="delete_rec_id" value="<?php print $img_id; ?>" /> ';
修正后的完整图片展示&删除按钮代码
只需要把嵌套的PHP标签改成字符串拼接,直接输出循环中的$imrow->img_id即可:
<?php $imsql = "SELECT img_name, img_path, img_id FROM images WHERE post_id = '$id'"; $q2 = $db->query($imsql); if($q2->num_rows>0){ while ($imrow = $q2->fetch_object()){ echo '<img src="images/' . $imrow->img_name . '" width="100%" height="auto"/>'; echo '<br><br>'; echo '<form id="delete-' . $imrow->img_id . '" method="post" action="">'; // 这里改为字符串拼接,直接输出当前图片的ID echo '<input type="hidden" name="delete_rec_id" value="' . $imrow->img_id . '" /> '; echo '<input type="submit" name="delete" value="Delete Image" class="btn btn-default"/> '; echo '</form>'; echo '<br><br><br><br>'; } } ?>
额外优化建议
- 避免SQL注入风险:当前的删除查询存在注入隐患,建议改用预处理语句:
if(isset($_POST['delete'])){ $img_id = $_POST['delete_rec_id']; $deletequery = "DELETE FROM images WHERE img_id=?"; $stmt = mysqli_prepare($db, $deletequery); mysqli_stmt_bind_param($stmt, "i", $img_id); mysqli_stmt_execute($stmt); }
- 修复HTML ID唯一性问题:原代码中所有删除表单用了相同的
id="delete",不符合HTML规范,上面的修正代码已经改成动态生成唯一IDdelete-{$imrow->img_id}。
内容的提问来源于stack exchange,提问作者abiadura
相关产品推荐
相关产品推荐

