Как сделать корзину для интернет-магазина на PHP

Как сделать корзину для интернет-магазина на PHP

от автора

в

Создание корзины для интернет-магазина – это задача, которая кажется сложной, но при правильном подходе и четком понимании технологии, она становится вполне выполнимой. В этой статье я расскажу, как сделать корзину для интернет-магазина на PHP с нуля. Давайте погрузимся в процесс, от простых шагов до более сложных технических деталей, чтобы создать надежную и функциональную корзину для вашего сайта.

Шаг 1: Подготовка окружения

Прежде чем приступить к разработке, убедитесь, что у вас установлены следующие инструменты:

  • Web-сервер (например, Apache или Nginx)
  • PHP (версия 7.4 или выше)
  • База данных MySQL или MariaDB
  • Текстовый редактор или IDE (например, Visual Studio Code, PhpStorm)

Настроив рабочее окружение, вы готовы к написанию кода.

Шаг 2: Создание базы данных

Первым шагом будет созданеи базы данных, в которой будут храниться данные о товарах и заказах. Откройте вашу систему управления базами данных (например, phpMyAdmin) и создайте новую базу данных. Назовем ее shop.

Таблица товаров

Создадим таблицу products для хранения информации о товарах.

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2) NOT NULL,
    image VARCHAR(255)
);

Таблица заказов

Теепрь создадим таблицу orders для хранения информации о заказах.

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    total_price DECIMAL(10, 2) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Шаг 3: Создание основной структуры проекта

Создайте структуру директорий вашего проекта. Она должна выглядеть примерно так:

/shop
    /css
    /js
    /images
    /includes
    /templates
    index.php
    cart.php
    checkout.php

Файл index.php

Это будет главная страница нашего магазина, где будут отображаться товары.

<?php
include 'includes/db.php';

$query = "SELECT * FROM products";
$result = $conn->query($query);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Интернет-магазин</title>
    <link rel="stylesheet" href="css/styles.css">
</head>
<body>
    <h1>Добро пожаловать в наш магазин</h1>
    <div class="products">
        <?php while($row = $result->fetch_assoc()): ?>
            <div class="product">
                <img src="images/<?php echo $row['image']; ?>" alt="<?php echo $row['name']; ?>">
                <h2><?php echo $row['name']; ?></h2>
                <p><?php echo $row['description']; ?></p>
                <p><?php echo $row['price']; ?> руб.</p>
                <a href="cart.php?action=add&id=<?php echo $row['id']; ?>">Добавить в корзину</a>
            </div>
        <?php endwhile; ?>
    </div>
</body>
</html>

Шаг 4: Реализация функционала корзины

Теперь нам нужно создать файл cart.php, который будет обрабатывать добавление товаров в корзину и отображать их.

Файл cart.php

<?php
session_start();
include 'includes/db.php';

if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['action'])) {
    switch ($_GET['action']) {
        case 'add':
            $id = $_GET['id'];
            $query = "SELECT * FROM products WHERE id = $id";
            $result = $conn->query($query);
            $product = $result->fetch_assoc();

            if (!isset($_SESSION['cart'])) {
                $_SESSION['cart'] = [];
            }

            if (isset($_SESSION['cart'][$id])) {
                $_SESSION['cart'][$id]['quantity']++;
            } else {
                $_SESSION['cart'][$id] = [
                    'name' => $product['name'],
                    'price' => $product['price'],
                    'quantity' => 1
                ];
            }

            header('Location: cart.php');
            break;

        case 'remove':
            $id = $_GET['id'];
            if (isset($_SESSION['cart'][$id])) {
                unset($_SESSION['cart'][$id]);
            }

            header('Location: cart.php');
            break;
    }
}

$total_price = 0;
if (isset($_SESSION['cart'])) {
    foreach ($_SESSION['cart'] as $item) {
        $total_price += $item['price'] * $item['quantity'];
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Корзина</title>
    <link rel="stylesheet" href="css/styles.css">
</head>
<body>
    <h1>Ваша корзина</h1>
    <div class="cart">
        <?php if (!empty($_SESSION['cart'])): ?>
            <table>
                <thead>
                    <tr>
                        <th>Название</th>
                        <th>Цена</th>
                        <th>Количество</th>
                        <th>Итого</th>
                        <th>Действие</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($_SESSION['cart'] as $id => $item): ?>
                        <tr>
                            <td><?php echo $item['name']; ?></td>
                            <td><?php echo $item['price']; ?> руб.</td>
                            <td><?php echo $item['quantity']; ?></td>
                            <td><?php echo $item['price'] * $item['quantity']; ?> руб.</td>
                            <td><a href="cart.php?action=remove&id=<?php echo $id; ?>">Удалить</a></td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
            <p>Общая стоимость: <?php echo $total_price; ?> руб.</p>
            <a href="checkout.php">Оформить заказ</a>
        <?php else: ?>
            <p>Ваша корзина пуста</p>
        <?php endif; ?>
    </div>
</body>
</html>

Шаг 5: Оформление заказа

Теперь создадим файл checkout.php, который будет обрабатывать оформление заказа.

Файл checkout.php

<?php
session_start();
include 'includes/db.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    foreach ($_SESSION['cart'] as $id => $item) {
        $product_id = $id;
        $quantity = $item['quantity'];
        $total_price = $item['price'] * $quantity;

        $query = "INSERT INTO orders (product_id, quantity, total_price) VALUES ($product_id, $quantity, $total_price)";
        $conn->query($query);
    }

    unset($_SESSION['cart']);
    header('Location: index.php');
}

$total_price = 0;
if (isset($_SESSION['cart'])) {
    foreach ($_SESSION['cart'] as $item) {
        $total_price += $item['price'] * $item['quantity'];
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Оформление заказа</title>
    <link rel="stylesheet" href="css/styles.css">
</head>
<body>
    <h1>Оформление заказа</h1>
    <div class="checkout">
        <?php if (!empty($_SESSION['cart'])): ?>
            <p>Общая стоимость: <?php echo $total_price; ?> руб.</p>
            <form action="checkout.php" method="post">
                <button type="submit">Подтвердить заказ</button>
            </form>
        <?php else: ?>
            <p>Ваша корзина пуста</p>
        <?php endif; ?>
    </div>
</body>
</html>

Шаг 6: Улучшение функционала и пользовательского опыта

На этом этапе у нас уже есть рабочая корзина и функционал оформления заказа. Однако, чтобы сделать наш интернет-магазин действительно удобным для пользователей, мы можем добавить несколько улучшений:

Обновление количества

товаров в корзине

Мы можем добавить возможность обновления количества товаров в корзине непосредственно на странице корзины.

// В файл cart.php добавляем код для обработки обновления количества товаров
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['update_cart'])) {
    foreach ($_POST['quantities'] as $id => $quantity) {
        if (isset($_SESSION['cart'][$id])) {
            $_SESSION['cart'][$id]['quantity'] = $quantity;
        }
    }

    header('Location: cart.php');
}
?>

<!-- В HTML-код страницы корзины добавляем форму для обновления количества товаров -->
<form action="cart.php" method="post">
    <table>
        <!-- ... существующий код ... -->
        <tbody>
            <?php foreach ($_SESSION['cart'] as $id => $item): ?>
                <tr>
                    <td><?php echo $item['name']; ?></td>
                    <td><?php echo $item['price']; ?> руб.</td>
                    <td>
                        <input type="number" name="quantities[<?php echo $id; ?>]" value="<?php echo $item['quantity']; ?>">
                    </td>
                    <td><?php echo $item['price'] * $item['quantity']; ?> руб.</td>
                    <td><a href="cart.php?action=remove&id=<?php echo $id; ?>">Удалить</a></td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
    <button type="submit" name="update_cart">Обновить корзину</button>
</form>

Валидация и уведомления

Для улучшения пользовательского опыта добавим валидацию данных и уведомления о результатах действий (например, добавление товара в корзину, успешное оформление заказа).


Автор статьи:

Обновлено:

30.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *