模态框更新订单状态无报错但数据库未同步问题求助
订单状态更新无报错但数据库未变更问题排查
问题描述
尝试通过模态框更新订单状态,操作过程无任何报错,但数据库中的订单状态并未更新。已检查表单及相关文件逻辑,仍未找到问题原因。
前端代码(模态框部分)
<!-- Transaction History --> <div> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title"><b>Transaction Full Details</b></h4> </div> <div class="modal-body"> <p> Date: <span id="date"></span> <span class="pull-right">Transaction#: <span id="transid"></span></span> </p> <table class="table table-bordered"> <thead> <th>Product</th> <th>Price</th> <th>Quantity</th> <th>Subtotal</th> <th>Status</th> </thead> <tbody id="detail"> <tr> <td colspan="4" align="right"><b>Total</b></td> <td><span id="total"></span></td> </tr> <form action="order_edit.php" method="POST" enctype="multipart/form-data"> <td colspan="3" align="right"><b>Status</b></td> <td><span id="total"> <select name="status" id="status" class="form-control form-control-sm rounded-0" required> <option value="1" <?php echo isset($meta['status']) && $meta['status'] == 1 ? 'selected' : '' ?>>Pending</option> <option value="3" <?php echo isset($meta['status']) && $meta['status'] == 3 ? 'selected' : '' ?>>Out for Delivery</option> <option value="4" <?php echo isset($meta['status']) && $meta['status'] == 4 ? 'selected' : '' ?>>Done and Paid</option> </select> </span></td> <td> <button type="submit" class="btn btn-success btn-flat" name="edit"><i class="fa fa-check-square-o"></i> Update</button> </td> </form> </tbody> </table> </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-flat pull-left" data-dismiss="modal"><i class="fa fa-close"></i> Close</button> </div>
后端PHP代码(order_edit.php)
<?php include 'includes/session.php'; if(isset($_POST['edit'])){ $id = $_POST['id']; $status = $_POST['status']; date_default_timezone_set("Asia/Manila"); $date = date('Y-m-d h:i:sa'); $date1 = date('Y-m-d h:i:sa'); try{ $stmt = $conn->prepare("SELECT * FROM sales WHERE id=:id"); $stmt->execute(['id'=>$id]); $row = $stmt->fetch(); $stmt = $conn->prepare("UPDATE sales SET dateDelivered=:dateDelivered, order_received=:order_received, status=:status WHERE id=:id"); $stmt->execute(['dateDelivered'=>$date,'order_received'=>$date1,'status'=>$status, 'id'=>$id]); $_SESSION['success'] = 'Status updated successfully'; } catch(PDOException $e){ $_SESSION['error'] = $e->getMessage(); } $pdo->close(); } else{ $_SESSION['error'] = 'Fill up Update Status form first'; } header('location: sales.php'); ?>
核心问题及解决方案
缺失订单ID参数:后端依赖
$_POST['id']获取要更新的订单ID,但前端表单未包含该参数。需在表单内添加隐藏字段,其中[订单ID值]需从模态框关联的订单数据中渲染:<input type="hidden" name="id" value="[订单ID值]">HTML结构非法:表单直接嵌套在
<tbody>中且未包裹在<tr>内,浏览器解析异常可能导致表单数据提交不全。调整结构,将表单包裹在<tr>里:<tr> <form action="order_edit.php" method="POST" enctype="multipart/form-data"> <td colspan="3" align="right"><b>Status</b></td> <td> <select name="status" id="status" class="form-control form-control-sm rounded-0" required> <!-- 选项内容 --> </select> </td> <td> <input type="hidden" name="id" value="[订单ID值]"> <button type="submit" class="btn btn-success btn-flat" name="edit"><i class="fa fa-check-square-o"></i> Update</button> </td> </form> </tr>数据库连接对象混淆:后端使用
$conn执行语句,但最后关闭的是$pdo,需统一为$conn->close();(若$conn是PDO实例,实际无需手动关闭,此句可直接移除)。
调试建议
- 在后端
if(isset($_POST['edit']))开头添加调试代码,查看提交的参数:var_dump($_POST); exit; - 检查UPDATE语句的受影响行数,确认是否命中目标订单:
$stmt->execute(...); echo $stmt->rowCount(); // 输出1表示成功更新一行,0表示未找到对应订单 - 查看服务器PHP错误日志,排查隐性报错。
内容的提问来源于stack exchange,提问作者Remenio Madrona
相关产品推荐
相关产品推荐

