Создание системы учета прихода, продажи и остатков товара на PHP — задача, которая на первый взгляд может показаться сложной. Однако с правильным подходом и пониманием основных принципов её реализация становится вполне достижимой. В этой статье мы подробно рассмотрим, как шаг за шагом создать такую систему, охватив ключевые аспекты, технические детали и практические примеры.
Шаг 1: Создание базы данных
Первый шаг — разработка структуры базы данных. Мы будем использовать MySQL, так как это один из самых популярных и удобных вариантов для веб-приложений.
Таблица товаров
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Таблица приходов
CREATE TABLE stock_in (
id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
quantity INT NOT NULL,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (product_id) REFERENCES products(id)
);
Таблица продаж
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
quantity INT NOT NULL,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (product_id) REFERENCES products(id)
);
Таблица остатков
CREATE TABLE stock (
product_id INT PRIMARY KEY,
quantity INT NOT NULL,
FOREIGN KEY (product_id) REFERENCES products(id)
);
Эти таблицы покрывают все основные аспекты нашей системы: товары, приходы, продажи и остатки.
Шаг 2: Реализация пользовательского интерфейса
Переходим к созданию пользовательского интерфейса. Для простоты будем использовать HTML и CSS, а также небольшие фрагменты JavaScript для улчушения взаимодействия.
Страница добавления товара
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Добавить товар</title>
</head>
<body>
<h1>Добавить новый товар</h1>
<form action="add_product.php" method="post">
<label for="name">Название товара:</label>
<input type="text" id="name" name="name" required>
<br>
<label for="description">Описание:</label>
<textarea id="description" name="description"></textarea>
<br>
<label for="price">Цена:</label>
<input type="number" step="0.01" id="price" name="price" required>
<br>
<input type="submit" value="Добавить">
</form>
</body>
</html>
Обработка формы добавления товара
<?php
// add_product.php
require 'db_connection.php';
$name = $_POST['name'];
$description = $_POST['description'];
$price = $_POST['price'];
$sql = "INSERT INTO products (name, description, price) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssd", $name, $description, $price);
if ($stmt->execute()) {
echo "Товар успешно добавлен!";
} else {
echo "Ошибка: " . $stmt->error;
}
$conn->close();
?>
Шаг 3: Учет приходов и продаж
Для учета приходов и продаж нам потребуются аналогичные формы и обработчики.
Страница учета прихода
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Учет прихода</title>
</head>
<body>
<h1>Учет прихода товара</h1>
<form action="stock_in.php" method="post">
<label for="product_id">Товар:</label>
<select id="product_id" name="product_id">
<?php
require 'db_connection.php';
$result = $conn->query("SELECT id, name FROM products");
while ($row = $result->fetch_assoc()) {
echo "<option value='{$row['id']}'>{$row['name']}</option>";
}
?>
</select>
<br>
<label for="quantity">Количество:</label>
<input type="number" id="quantity" name="quantity" required>
<br>
<input type="submit" value="Добавить">
</form>
</body>
</html>
Обработка формы прихода
<?php
// stock_in.php
require 'db_connection.php';
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
$sql = "INSERT INTO stock_in (product_id, quantity) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $product_id, $quantity);
if ($stmt->execute()) {
// Обновляем таблицу остатков
$update_sql = "INSERT INTO stock (product_id, quantity) VALUES (?, ?)
ON DUPLICATE KEY UPDATE quantity = quantity + ?";
$update_stmt = $conn->prepare($update_sql);
$update_stmt->bind_param("iii", $product_id, $quantity, $quantity);
$update_stmt->execute();
echo "Приход успешно учтен!";
} else {
echo "Ошибка: " . $stmt->error;
}
$conn->close();
?>
Страница учета продаж
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Учет продаж</title>
</head>
<body>
<h1>Учет продаж товара</h1>
<form action="sales.php" method="post">
<label for="product_id">Товар:</label>
<select id="product_id" name="product_id">
<?php
require 'db_connection.php';
$result = $conn->query("SELECT id, name FROM products");
while ($row = $result->fetch_assoc()) {
echo "<option value='{$row['id']}'>{$row['name']}</option>";
}
?>
</select>
<br>
<label for="quantity">Количество:</label>
<input type="number" id="quantity" name="quantity" required>
<br>
<input type="submit" value="Продать">
</form>
</body>
</html>
Обработка формы продажи
<?php
// sales.php
require 'db_connection.php';
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
// Проверяем наличие товара на складе
$check_sql = "SELECT quantity FROM stock WHERE product_id = ?";
$check_stmt = $conn->prepare($check_sql);
$check_stmt->bind_param("i", $product_id);
$check_stmt->execute();
$check_stmt->bind_result($current_quantity);
$check_stmt->fetch();
$check_stmt->close();
if ($current_quantity >= $quantity) {
$sql = "INSERT INTO sales (product_id, quantity) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $product_id, $quantity);
if ($stmt->execute()) {
// Обновляем таблицу остатков
$update_sql = "UPDATE stock SET quantity = quantity - ? WHERE product_id = ?";
$update_stmt = $conn->prepare($update_sql);
$update_stmt->bind_param("ii", $quantity, $product_id);
$update_stmt->execute();
echo "Продажа успешно учтена!";
} else {
echo "Ошибка: " . $stmt->error;
}
} else {
echo "Ошибка: Недостаточно товара на складе.";
}
$conn->close();
?>
Шаг 4: Вывод остатков
Для удобства пользователей необходимо реализовать возможность просмотра текущих остатков.
Страница остатков
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Текущие остатки</title>
</head>
<body>
<h1>Текущие остатки товаров</h1>
<table border="1">
<tr>
<th>Товар</th>
<th>Количество</th>
</tr>
<?php
require 'db_connection.php';
$result = $conn->query("SELECT p.name, s.quantity FROM stock s JOIN products p ON s.product_id = p.id");
while ($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['name']}</td><td>{$row['quantity']}</td></tr>";
}
?>
</table>
</body>
</html>
Автор статьи:
Обновлено:
Добавить комментарий