You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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">&times;</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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:04:39