php实现订单批量发货
实现订单批量发货的步骤
获取待发货订单列表 通过数据库查询获取状态为待发货的订单列表,可以使用SQL语句筛选符合条件的订单。例如:
$pendingOrders = $db->query("SELECT * FROM orders WHERE status = 'pending'");
构建批量发货表单 创建一个表单,允许用户选择多个订单进行发货操作。表单中可以包含复选框来选择订单:
<form method="post" action="batch_ship.php">
<?php foreach ($pendingOrders as $order): ?>
<input type="checkbox" name="order_ids[]" value="<?php echo $order['id']; ?>">
<?php endforeach; ?>
<input type="submit" value="批量发货">
</form>
处理发货请求 在接收表单提交的PHP脚本中,遍历选中的订单ID,更新订单状态并记录发货信息:

if (isset($_POST['order_ids'])) {
foreach ($_POST['order_ids'] as $orderId) {
$db->query("UPDATE orders SET status = 'shipped' WHERE id = $orderId");
// 记录发货日志等其他操作
}
}
批量发货的优化措施
加入事务处理 确保所有订单发货操作要么全部成功,要么全部失败,保持数据一致性:
$db->beginTransaction();
try {
foreach ($orderIds as $orderId) {
// 发货操作
}
$db->commit();
} catch (Exception $e) {
$db->rollBack();
}
添加进度显示 对于大量订单的发货操作,可以分批次处理并显示进度:

$total = count($orderIds);
$batchSize = 50;
for ($i = 0; $i < $total; $i += $batchSize) {
$batch = array_slice($orderIds, $i, $batchSize);
// 处理当前批次
echo "已处理 " . ($i + $batchSize) . "/$total 订单";
}
安全注意事项
验证用户权限 在执行批量操作前,确认用户具有相应权限:
if (!hasPermission('batch_ship')) {
die('无权操作');
}
防止SQL注入 使用预处理语句处理订单ID参数:
$stmt = $db->prepare("UPDATE orders SET status = 'shipped' WHERE id = ?");
foreach ($orderIds as $orderId) {
$stmt->execute([$orderId]);
}






