/
burmistrova_irina
/
web-application
Обзор
Документация
Войти
/
burmistrova_irina
/
web-application
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
order_processing.php
96 строк
3 KB
burmistrova_irina
upload files
21 фев 2025, 13:38
21 фев 2025, 13:38
08eb655
Код
Авторство
О чём код?
<?php session_start(); error_reporting(E_ALL); ini_set('display_errors', 1); // Проверка авторизации if (!isset($_SESSION['user_id'])) { echo json_encode(['status' => 'error', 'message' => 'Необходима авторизация']); exit; } include 'db_connect.php'; try { // Проверяем наличие всех необходимых данных if (empty($_POST['productName']) || empty($_POST['quantity']) || empty($_POST['delivery_address']) || empty($_POST['delivery_type']) || empty($_POST['email'])) { throw new Exception('Все поля должны быть заполнены'); } $product_id = $_POST['productName']; // Теперь это ID продукта из select $quantity = (int)$_POST['quantity']; $delivery_address = $_POST['delivery_address']; $delivery_type = $_POST['delivery_type']; $email = $_POST['email']; $user_id = $_SESSION['user_id']; // Проверяем корректность количества if ($quantity <= 0) { throw new Exception('Количество должно быть больше нуля'); } // Получаем информацию о товаре и проверяем наличие на складе $stmt = $pdo->prepare("SELECT price, stock_quantity FROM products WHERE product_id = ?"); $stmt->execute([$product_id]); $product = $stmt->fetch(PDO::FETCH_ASSOC); if (!$product) { throw new Exception('Товар не найден'); } if ($product['stock_quantity'] < $quantity) { throw new Exception('Недостаточно товара на складе'); } // Вычисляем общую стоимость $total_amount = $product['price'] * $quantity; // Начинаем транзакцию $pdo->beginTransaction(); try { // Создаем заказ $stmt = $pdo->prepare(" INSERT INTO orders (user_id, product_id, quantity, total_amount, delivery_address, delivery_type, email, status) VALUES (?, ?, ?, ?, ?, ?, ?, 'pending') "); $stmt->execute([ $user_id, $product_id, $quantity, $total_amount, $delivery_address, $delivery_type, $email ]); // Обновляем количество товара на складе $stmt = $pdo->prepare(" UPDATE products SET stock_quantity = stock_quantity - ? WHERE product_id = ? "); $stmt->execute([$quantity, $product_id]); // Завершаем транзакцию $pdo->commit(); echo json_encode([ 'status' => 'success', 'message' => 'Заказ успешно создан', 'redirect' => 'orders.html' ]); } catch (Exception $e) { // В случае ошибки откатываем транзакцию $pdo->rollBack(); throw $e; } } catch (Exception $e) { echo json_encode([ 'status' => 'error', 'message' => $e->getMessage() ]); } ?>