PHP表格模态框确认删除功能失效问题求助
解决模态框确认后删除表格行的问题
问题根源
- 原页面删除按钮为
<a>标签,点击时会触发默认跳转,且模态框表单未传递目标用户ID,导致delete.php无法获取待删除数据的ID。 delete.php的POST请求处理逻辑依赖$_GET['id']赋值的$userid,但POST请求时该变量未初始化,无法执行删除操作。
主页面代码修改
1. 调整表格中的删除按钮
将<a>标签改为<button>,移除href属性,新增data-user-id存储用户ID:
<td><button class="btn btn-danger delete-btn" data-bs-toggle="modal" data-bs-target="#deleteModal" data-user-id="<?php echo $row['user_id']; ?>">Delete</button></td>
2. 给删除模态框表单添加隐藏输入框
用于传递用户ID到delete.php:
<!-- Delete Modal --> <form action="delete.php" method="POST"> <!-- 新增隐藏输入框存储用户ID --> <input type="hidden" name="user_id" id="delete-user-id"> <div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Delete Record</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <p class="lead">Are you sure you want to delete this user?</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <input type="submit" class="btn btn-success" name="delete_student" value="Yes"> </div> </div> </div> </div> </form>
3. 添加JavaScript传递ID
在页面</body>标签前添加脚本,点击删除按钮时将ID赋值给隐藏输入框:
<script> document.querySelectorAll('.delete-btn').forEach(btn => { btn.addEventListener('click', function() { const userId = this.getAttribute('data-user-id'); document.getElementById('delete-user-id').value = userId; }); }); </script>
delete.php代码修改
调整POST请求处理逻辑,从$_POST获取ID并加入SQL注入防护:
<?php include 'header.php'; ?> <?php include 'config.php'; ?> <?php if(isset($_POST['delete_student']) && isset($_POST['user_id'])) { // 转义特殊字符防止SQL注入 $userid = mysqli_real_escape_string($connection, $_POST['user_id']); $query = "DELETE FROM `users` WHERE `user_id` = '$userid'"; $result = mysqli_query($connection, $query); if(!$result){ die('Error: '. mysqli_error($connection)); } else { header('Location: index.php?delete-msg=Deleted successfully'); exit; // 跳转后终止脚本执行 } } else { // 非法访问直接跳转回主页面 header('Location: index.php'); exit; } ?> <?php include 'footer.php'; ?>
额外说明
- 移除了原代码中冗余的注释代码,简化逻辑结构。
- 增加SQL注入防护,避免恶意输入破坏数据库。
- 跳转后添加
exit确保脚本停止执行,防止后续无效代码运行。
内容的提问来源于stack exchange,提问作者シマRin
相关产品推荐
相关产品推荐

