Ở bài viết trước mình đã hướng dẫn mọi người về "Đồ án thiết kế website bán hàng" tuy nhiên để làm đồ án Full thiết kế website bán hàng bằng php thì chúng ta cần xem bài viết này.
Chọn loại sản phẩm: Quần áo, điện thoại, giày dép, thực phẩm, v.v.
Xác định đối tượng người dùng: Người mua hàng, quản trị viên.
Người dùng (Khách hàng):
Đăng ký, đăng nhập.
Xem danh mục sản phẩm.
Tìm kiếm sản phẩm.
Thêm sản phẩm vào giỏ hàng.
Thanh toán đơn hàng.
Quản trị viên:
Quản lý sản phẩm (Thêm/Sửa/Xóa).
Quản lý đơn hàng.
Quản lý khách hàng.
Ngôn ngữ & Công nghệ: PHP (Laravel hoặc thuần PHP), MySQL, HTML, CSS, JavaScript, Bootstrap.
Phần mềm hỗ trợ: XAMPP (Apache + MySQL + PHPMyAdmin), VS Code, Composer (nếu dùng Laravel).
Bảng users (Người dùng):
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100) UNIQUE,
password VARCHAR(255),
role ENUM('admin', 'customer') DEFAULT 'customer'
);
Bảng products (Sản phẩm):
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
description TEXT,
price DECIMAL(10,2),
image VARCHAR(255),
stock INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Bảng orders (Đơn hàng):
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
total_price DECIMAL(10,2),
status ENUM('pending', 'completed', 'canceled') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Bảng order_items (Chi tiết đơn hàng):
CREATE TABLE order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT,
product_id INT,
quantity INT,
price DECIMAL(10,2),
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
Sử dụng HTML, CSS, Bootstrap để tạo giao diện website.
Các trang cần có:
Trang chủ: Hiển thị sản phẩm nổi bật.
Trang sản phẩm: Danh sách sản phẩm theo danh mục.
Trang chi tiết sản phẩm: Hiển thị thông tin sản phẩm.
Trang giỏ hàng: Hiển thị sản phẩm đã chọn.
Trang thanh toán: Nhập thông tin giao hàng và thanh toán.
Ví dụ: Trang sản phẩm
<div class="container">
<h2>Danh sách sản phẩm</h2>
<div class="row">
<?php
$conn = new mysqli("localhost", "root", "", "shop_db");
$result = $conn->query("SELECT * FROM products");
while ($row = $result->fetch_assoc()) {
echo "
<div class='col-md-3'>
<div class='card'>
<img src='{$row['image']}' class='card-img-top'>
<div class='card-body'>
<h5>{$row['name']}</h5>
<p>{$row['price']} VND</p>
<a href='detail.php?id={$row['id']}' class='btn btn-primary'>Xem chi tiết</a>
</div>
</div>
</div>";
}
?>
</div>
</div>
Kết nối CSDL:
Tạo file db.php để kết nối:
<?php
$conn = new mysqli("localhost", "root", "", "shop_db");
if ($conn->connect_error) {
die("Kết nối thất bại: " . $conn->connect_error);
}
?>
Xây dựng hệ thống giỏ hàng:
Tạo file cart.php để xử lý:
session_start();
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
$_SESSION['cart'][$product_id] = $quantity;
header("Location: cart.php");
}
Xử lý thanh toán:
Tạo file checkout.php:
<?php
session_start();
require "db.php";
$user_id = $_SESSION['user_id'];
$total_price = 0;
foreach ($_SESSION['cart'] as $product_id => $quantity) {
$result = $conn->query("SELECT price FROM products WHERE id = $product_id");
$row = $result->fetch_assoc();
$total_price += $row['price'] * $quantity;
}
$conn->query("INSERT INTO orders (user_id, total_price) VALUES ($user_id, $total_price)");
$order_id = $conn->insert_id;
foreach ($_SESSION['cart'] as $product_id => $quantity) {
$price = $conn->query("SELECT price FROM products WHERE id = $product_id")->fetch_assoc()['price'];
$conn->query("INSERT INTO order_items (order_id, product_id, quantity, price) VALUES ($order_id, $product_id, $quantity, $price)");
}
unset($_SESSION['cart']);
echo "Đặt hàng thành công!";
?>
Quản trị website:
Tạo trang admin.php để quản lý sản phẩm và đơn hàng:
<?php
session_start();
if ($_SESSION['role'] != 'admin') {
die("Bạn không có quyền truy cập.");
}
require "db.php";
$result = $conn->query("SELECT * FROM orders");
while ($row = $result->fetch_assoc()) {
echo "Đơn hàng #{$row['id']} - Tổng tiền: {$row['total_price']} VND - Trạng thái: {$row['status']} <br>";
}
?>
Kiểm tra chức năng trên trình duyệt.
Chạy thử giao dịch, đăng nhập, đăng ký.
Triển khai website lên hosting (có thể dùng 000webhost, InfinityFree hoặc VPS).
Ok vậy là đã xong - ngoài ra bạn còn có thể thêm thử một số tính năng khác như: tính năng chat hỗ trợ khách hàng, một số API thanh toán.