PHP实现删除确认模态框时,始终操作第一条数据的问题求助
PHP实现删除确认模态框时,始终操作第一条数据的问题求助
兄弟,我一眼就看出问题所在啦!你现在的代码里,所有循环生成的模态框都用了同一个ID exampleModal,而HTML里ID是必须唯一的——浏览器只会识别第一个拥有这个ID的元素,所以不管你点哪条记录的按钮,弹出的都是第一条的模态框,提交自然也只会操作第一条数据。
别慌,咱们改几步就能搞定:
核心修改思路
给每个模态框和对应的按钮绑定唯一的标识,也就是用每条记录的id来区分它们,这样点击不同按钮时,就能唤起对应记录的模态框,提交正确的ID。
修改后的完整代码示例
<?php $intros = "SELECT * FROM intro WHERE status !='2'"; $intros_run = mysqli_query($con, $intros); ?> <?php if (mysqli_num_rows($intros_run) > 0): ?> <?php foreach ($intros_run as $intro): ?> <tr> <td> <form action="code.php" method="POST"> <!-- 隐藏字段:传递当前记录的id --> <input type="hidden" name="intro_id" value="<?= $intro['id'] ?>"> <!-- 修改按钮的data-target,用唯一id绑定模态框 --> <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#exampleModal-<?= $intro['id'] ?>"> 删除 Intro #<?= $intro['id'] ?> </button> <!-- 模态框:id改为唯一值,和按钮的data-target对应 --> <div class="modal fade" id="exampleModal-<?= $intro['id'] ?>" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel-<?= $intro['id'] ?>" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel-<?= $intro['id'] ?>">确认删除</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> 你确定要删除ID为 <?= $intro['id'] ?> 的Intro记录吗?此操作不可恢复! </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button> <!-- 改成submit按钮,点击后提交表单 --> <button type="submit" name="delete_intro" class="btn btn-danger">确认删除</button> </div> </div> </div> </div> </form> </td> </tr> <?php endforeach; ?> <?php else: ?> <tr> <td colspan="9">暂无记录</td> </tr> <?php endif; ?>
关键修改点说明
- 唯一的模态框ID:把模态框的
id改成exampleModal-<?= $intro['id'] ?>,同时按钮的data-target也对应改成这个值,确保每个按钮只唤起自己对应的模态框。 - 传递记录ID:在表单里加一个隐藏的
input字段,把当前记录的id传递给code.php,这样后端就能明确要删除哪条数据。 - 提交按钮改为submit类型:原来的按钮是
type="button",改成type="submit"后,点击就能直接提交表单,触发删除操作。
另外,你还需要在code.php里接收这个ID并执行删除逻辑,比如:
<?php if (isset($_POST['delete_intro']) && isset($_POST['intro_id'])) { // 先转义防止SQL注入 $id = mysqli_real_escape_string($con, $_POST['intro_id']); // 如果你是软删除(标记status为2) $delete_query = "UPDATE intro SET status='2' WHERE id='$id'"; // 如果你是硬删除(直接删除记录) // $delete_query = "DELETE FROM intro WHERE id='$id'"; mysqli_query($con, $delete_query); // 操作完成后跳转回原页面 header("Location: your_page.php"); exit(); } ?>
这样修改后,每个按钮对应自己的模态框,提交的也是正确的记录ID,就不会再出现只删第一条的问题啦!
备注:内容来源于stack exchange,提问作者Yellow rain coat
相关产品推荐
相关产品推荐

