Создание корзины для интернет-магазина – это задача, которая кажется сложной, но при правильном подходе и четком понимании технологии, она становится вполне выполнимой. В этой статье я расскажу, как сделать корзину для интернет-магазина на 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>
Валидация и уведомления
Для улучшения пользовательского опыта добавим валидацию данных и уведомления о результатах действий (например, добавление товара в корзину, успешное оформление заказа).
Автор статьи:
Обновлено:
Добавить комментарий