/
Evil331
/
Apteka
Обзор
Документация
Войти
/
Evil331
/
Apteka
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
process_order.php
77 строк
3 KB
Evil6766
Add files via upload
31 май 2025, 17:06
Не верифицирован
31 май 2025, 17:06
667fe25
Код
Авторство
О чём код?
<?php session_start(); require_once "db_connect.php"; header('Content-Type: application/json'); $response = ['success' => false, 'message' => '']; if (!isset($_SESSION['user_id'])) { $response['message'] = 'Для оформления заказа необходимо авторизоваться.'; echo json_encode($response); exit(); } $user_id = $_SESSION['user_id']; // Получение товаров из корзины $stmt = $conn->prepare(" SELECT c.product_id, c.quantity, p.price, p.stock FROM cart c JOIN products p ON c.product_id = p.id WHERE c.user_id = ? "); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); $cart_items = []; $total = 0; while ($row = $result->fetch_assoc()) { if ($row['stock'] < $row['quantity']) { $response['message'] = 'Недостаточно товара на складе для одного или нескольких продуктов.'; echo json_encode($response); exit(); } $cart_items[] = $row; $total += $row['price'] * $row['quantity']; } // Создание заказа $conn->begin_transaction(); try { $stmt = $conn->prepare("INSERT INTO orders (user_id, total_amount, status) VALUES (?, ?, 'pending')"); $stmt->bind_param("id", $user_id, $total); $stmt->execute(); $order_id = $conn->insert_id; // Добавление деталей заказа foreach ($cart_items as $item) { $stmt = $conn->prepare(" INSERT INTO order_details (order_id, product_id, quantity, price) VALUES (?, ?, ?, ?) "); $stmt->bind_param("iiid", $order_id, $item['product_id'], $item['quantity'], $item['price']); $stmt->execute(); // Обновление остатка на складе $stmt = $conn->prepare("UPDATE products SET stock = stock - ? WHERE id = ?"); $stmt->bind_param("ii", $item['quantity'], $item['product_id']); $stmt->execute(); } // Очистка корзины $stmt = $conn->prepare("DELETE FROM cart WHERE user_id = ?"); $stmt->bind_param("i", $user_id); $stmt->execute(); $conn->commit(); $response['success'] = true; } catch (Exception $e) { $conn->rollback(); $response['message'] = 'Ошибка при оформлении заказа: ' . $e->getMessage(); error_log('Ошибка оформления заказа: ' . $e->getMessage()); } $stmt->close(); echo json_encode($response); ?>