Giới thiệu dự án

Thị trường thương mại điện tử (E-commerce) tại Việt Nam đang trải qua giai đoạn tăng trưởng bứt phá với tốc độ tăng trưởng kép hàng năm (CAGR) duy trì ở mức trên 20%. Cùng với sự bùng nổ của các thiết bị di động thông minh (smartphone), nhu cầu tiêu thụ các sản phẩm phụ kiện như cáp sạc, tai nghe, ốp lưng, kính cường lực và pin dự phòng ngày càng gia tăng mạnh mẽ, ước tính quy mô thị trường phụ kiện đạt trên 500 triệu USD.

Tuy nhiên, các cửa hàng kinh doanh phụ kiện truyền thống và các đơn vị bán buôn/bán lẻ quy mô vừa và nhỏ đang đối mặt với nhiều rào cản vận hành nghiêm trọng:

  • Phụ thuộc vào mạng xã hội: Bán hàng qua Facebook, TikTok hoặc Zalo gặp tình trạng tin nhắn rác (spam), thất thoát thông tin khách hàng, tình trạng đơn hàng ảo và tỷ lệ hủy đơn cao.
  • Quy trình quản lý thủ công: Quản lý kho hàng, kiểm soát mã hàng (SKU) và thống kê doanh thu chủ yếu qua sổ sách hoặc bảng tính rời rạc, gây sai lệch tồn kho lên tới 15 - 20%.
  • Trải nghiệm khách hàng phân mảnh: Khách hàng gặp khó khăn trong việc tra cứu mức giá chính xác, thông số kỹ thuật và tình trạng còn hàng theo thời gian thực.

Đề tài "Thiết kế Website bán phụ kiện điện thoại" do sinh viên Nguyễn Đức Hải (Khoa Công nghệ Thông tin, Trường Đại học Hải Phòng) thực hiện, dưới sự hướng dẫn của ThS. Vũ Thị Sơn, được xây dựng nhằm giải quyết triệt để các bài toán thực tế trên.

Mục tiêu dự án

  1. Xây dựng nền tảng E-commerce chuyên biệt: Phát triển hệ thống website bán hàng phụ kiện điện thoại trực tuyến hoàn chỉnh, cung cấp giao diện thân thiện, chuẩn responsive cho cả máy tính và thiết bị di động.
  2. Số hóa quy trình bán hàng và quản trị: Tự động hóa chu trình từ đặt hàng, cập nhật giỏ hàng, xác nhận đơn, phân quyền nhân viên đến quản lý danh mục và bài viết.
  3. Tối ưu hóa hiệu năng và bảo mật: Đảm bảo thời gian phản hồi trang dưới 300ms, bảo vệ dữ liệu người dùng và chống các lỗ hổng bảo mật web phổ biến.

Phương pháp tiếp cận

Giải pháp sử dụng mô hình ngăn xếp công nghệ LAMP (Linux, Apache, MySQL, PHP) kết hợp kiến trúc phân tầng dạng module, giúp hệ sinh thái vận hành nhẹ, độc lập, không bị phụ thuộc vào các plugin cồng kềnh của bên thứ ba, đồng thời dễ dàng tùy biến mở rộng.

Phạm vi và giới hạn đề tài

  • Phạm vi chức năng: Hệ thống tập trung vào nghiệp vụ bán lẻ phụ kiện điện thoại, phân quyền 2 nhóm người dùng chính (Quản trị viên/Nhân viên và Khách hàng), quản lý kho cơ bản, giỏ hàng, đơn hàng và hệ thống đánh giá sản phẩm.
  • Giới hạn kỹ thuật: Phiên bản hiện tại tập trung xử lý quy trình thanh toán COD và chuyển khoản ngân hàng; chưa tích hợp cổng thanh toán trực tiếp (như VNPay, MoMo) qua Webhook thời gian thực.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Bán hàng qua Mạng xã hội (Social) Sàn TMĐT (Shopee, Lazada) Website E-commerce Chuyên biệt
Chi phí duy trì Thấp (chủ yếu chi phí Ads) Phí sàn cao (8% - 15% / đơn) Chi phí cố định (Hosting/Domain)
Sở hữu dữ liệu khách hàng Không (phụ thuộc nền tảng) Không (sàn kiểm soát) 100% dữ liệu thuộc về cửa hàng
Nhận diện thương hiệu Thấp, dễ bị cạnh tranh giá Rất thấp, cạnh tranh trực tiếp Cao, tùy biến giao diện riêng
Kiểm soát quy trình kho/vận Hoàn toàn thủ công Phụ thuộc đơn vị của sàn Chủ động, dễ dàng tích hợp API
Rủi ro spam / giả mạo Rất cao Trung bình Rất thấp (có xác thực dữ liệu)

Ưu tiên yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc có): Đăng ký/đăng nhập phân quyền (RBAC), quản lý sản phẩm (CRUD), quản lý giỏ hàng và đặt hàng, quản lý trạng thái đơn hàng, tìm kiếm theo từ khóa.
  • Should have (Nên có): Đánh giá sản phẩm, quản lý banner/slide quảng cáo, module bài viết tin tức công nghệ, lọc danh mục đa cấp.
  • Could have (Có thể mở rộng): Tích hợp cổng thanh toán trực tuyến, chatbot tư vấn tự động, gửi email thông báo trạng thái đơn hàng.
  • Won't have (Chưa thực hiện trong phiên bản này): Đồng bộ đa kho đa điểm vật lý, tính năng livestream bán hàng trực tiếp.

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình 3 tầng (3-Tier Architecture): Tầng Trình diễn (Presentation Layer - HTML5/CSS3/JavaScript), Tầng Xử lý nghiệp vụ (Business Logic Layer - PHP 8.x), và Tầng Dữ liệu (Data Layer - MySQL 8.0).

+-------------------------------------------------------------+
|               CLIENT LAYER (Browser / Mobile Web)           |
|            HTML5, CSS3, JavaScript (DOM / Fetch API)        |
+------------------------------+------------------------------+
                               | HTTP / HTTPS (JSON, POST/GET)
                               v
+-------------------------------------------------------------+
|             WEB SERVER & APPLICATION LAYER                  |
|                   Apache 2.4 + PHP 8.x                      |
|  +---------------------+  +-------------------------------+ |
|  | Routing & Controller|  | Authentication & RBAC Filter  | |
|  +----------+----------+  +---------------+---------------+ |
|             |                             |                 |
|             v                             v                 |
|  +--------------------------------------------------------+ |
|  | Modules: Product, Cart, Order, User, Article, Review   | |
|  +--------------------------------------------------------+ |
+------------------------------+------------------------------+
                               | PDO / Prepared Statements
                               v
+-------------------------------------------------------------+
|                   DATABASE LAYER (MySQL 8.0)                |
|      Tables: users, products, categories, orders, order_details|
+-------------------------------------------------------------+

Ngăn xếp công nghệ chi tiết

  • Hệ điều hành máy chủ: Linux (Ubuntu 22.04 LTS).
  • Web Server: Apache HTTP Server v2.4.52.
  • Ngôn ngữ lập trình Backend: PHP v8.2.x với PDO (PHP Data Objects).
  • Hệ quản trị cơ sở dữ liệu: MySQL Server v8.0.36 với Storage Engine InnoDB hỗ trợ giao dịch ACID.
  • Giao diện Frontend: HTML5, CSS3, Bootstrap v5.3, JavaScript ES6.

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống sử dụng cơ sở dữ liệu quan hệ với các bảng chuẩn hóa (3NF):

-- Bảng quản lý người dùng và phân quyền
CREATE TABLE `users` (
  `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(50) NOT NULL UNIQUE,
  `password` VARCHAR(255) NOT NULL,
  `fullname` VARCHAR(100) NOT NULL,
  `email` VARCHAR(100) NOT NULL UNIQUE,
  `phone` VARCHAR(15) NOT NULL,
  `role` ENUM('admin', 'staff', 'customer') DEFAULT 'customer',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng danh mục sản phẩm
CREATE TABLE `categories` (
  `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(100) NOT NULL,
  `slug` VARCHAR(120) NOT NULL UNIQUE,
  `description` TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng sản phẩm
CREATE TABLE `products` (
  `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `category_id` INT UNSIGNED NOT NULL,
  `name` VARCHAR(200) NOT NULL,
  `price` DECIMAL(12,2) NOT NULL,
  `quantity` INT NOT NULL DEFAULT 0,
  `image` VARCHAR(255) NOT NULL,
  `description` TEXT,
  `status` TINYINT(1) DEFAULT 1,
  FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng đơn hàng
CREATE TABLE `orders` (
  `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `user_id` INT UNSIGNED NOT NULL,
  `total_amount` DECIMAL(12,2) NOT NULL,
  `shipping_address` VARCHAR(255) NOT NULL,
  `phone_contact` VARCHAR(15) NOT NULL,
  `status` ENUM('pending', 'processing', 'shipped', 'completed', 'cancelled') DEFAULT 'pending',
  `order_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Thiết kế An toàn & Bảo mật

  • Xác thực và phân quyền: Sử dụng hàm password_hash() với thuật toán PASSWORD_BCRYPT (chi phí tính toán cost = 12) để mã hóa mật khẩu, kiểm tra phiên làm việc qua $_SESSION với flag HttpOnlySecure.
  • Phòng chống tấn công: Sử dụng Prepared Statements qua PDO để ngăn ngừa triệt để lỗ hổng SQL Injection; lọc và chuẩn hóa dữ liệu đầu ra qua htmlspecialchars() để chống Cross-Site Scripting (XSS).

Phương pháp phát triển (Methodology)

Dự án áp dụng mô hình Agile/Scrum rút gọn kéo dài trong 8 tuần với 4 Sprint chính:

Sprint Thời gian Nhiệm vụ chính Sản phẩm bàn giao (Deliverables)
Sprint 1 Tuần 1 - 2 Khảo sát yêu cầu, thiết kế sơ đồ Use Case, thiết kế CSDL ERD Tài liệu SRS, File Script SQL khởi tạo schema
Sprint 2 Tuần 3 - 4 Phát triển module Auth (Đăng nhập/Đăng ký), CRUD Danh mục, Sản phẩm Backend API, Giao diện Dashboard Admin cơ bản
Sprint 3 Tuần 5 - 6 Xây dựng Giỏ hàng (Cart), Checkout, Quản lý đơn hàng, Tìm kiếm Giao diện Shop hoàn chỉnh, luồng Đặt hàng End-to-End
Sprint 4 Tuần 7 - 8 Module Đánh giá, Tin tức, Kiểm thử bảo mật, Benchmark hiệu năng Báo cáo kiểm thử UAT, Website triển khai thử nghiệm

Implementation và kết quả

Quy trình phát triển và Thuật toán cốt lõi

Một trong những nghiệp vụ quan trọng nhất là quá trình xử lý đơn hàng và trừ kho tự động. Để đảm bảo tính toàn vẹn dữ liệu (Data Integrity) khi nhiều người dùng cùng đặt mua sản phẩm, hệ thống áp dụng kỹ thuật Database Transaction kết hợp Prepared Statements trong PHP:

<?php
// Xử lý thanh toán đơn hàng an toàn với PDO Transaction
function processCheckout(PDO $pdo, int $userId, array $cartItems, string $address, string $phone): int {
    try {
        $pdo->beginTransaction();

        // 1. Tính tổng giá trị đơn hàng và kiểm tra tồn kho
        $totalAmount = 0.0;
        foreach ($cartItems as $item) {
            $stmt = $pdo->prepare("SELECT price, quantity FROM products WHERE id = :id FOR UPDATE");
            $stmt->execute([':id' => $item['product_id']]);
            $product = $stmt->fetch(PDO::FETCH_ASSOC);

            if (!$product || $product['quantity'] < $item['quantity']) {
                throw new Exception("Sản phẩm ID {$item['product_id']} không đủ số lượng trong kho.");
            }
            $totalAmount += $product['price'] * $item['quantity'];
        }

        // 2. Tạo bản ghi đơn hàng mới
        $stmtOrder = $pdo->prepare("INSERT INTO orders (user_id, total_amount, shipping_address, phone_contact, status) 
                                    VALUES (:user_id, :total, :address, :phone, 'pending')");
        $stmtOrder->execute([
            ':user_id' => $userId,
            ':total'   => $totalAmount,
            ':address' => $address,
            ':phone'   => $phone
        ]);
        $orderId = (int)$pdo->lastInsertId();

        // 3. Chèn chi tiết đơn hàng và cập nhật số lượng tồn kho
        $stmtDetail = $pdo->prepare("INSERT INTO order_details (order_id, product_id, quantity, unit_price) 
                                     VALUES (:order_id, :product_id, :quantity, :price)");
        $stmtStock = $pdo->prepare("UPDATE products SET quantity = quantity - :quantity WHERE id = :product_id");

        foreach ($cartItems as $item) {
            $stmtDetail->execute([
                ':order_id'   => $orderId,
                ':product_id' => $item['product_id'],
                ':quantity'   => $item['quantity'],
                ':price'      => $item['price']
            ]);

            $stmtStock->execute([
                ':quantity'   => $item['quantity'],
                ':product_id' => $item['product_id']
            ]);
        }

        $pdo->commit();
        return $orderId;
    } catch (Exception $e) {
        $pdo->rollBack();
        error_log("Lỗi xử lý đơn hàng: " . $e->getMessage());
        return 0;
    }
}
?>

Kiểm thử và Đánh giá hiệu năng

Hệ thống đã trải qua quá trình kiểm thử tự động và kiểm thử người dùng (UAT) với các chỉ số đo lường thực tế:

1. Kiểm thử chức năng (Functional Testing)

  • Tổng số test cases: 45 trường hợp kiểm thử cho toàn bộ các module (User, Product, Cart, Order, Admin Dashboard).
  • Tỷ lệ vượt qua (Pass rate): 100% sau 2 vòng kiểm thử hồi quy (Regression Testing).

2. Đo lường hiệu năng chịu tải (Benchmark với ApacheBench - ab)

  • Kịch bản: 500 yêu cầu đồng thời (-c 500) với tổng số 5.000 requests (-n 5000) vào trang chủ và trang chi tiết sản phẩm.
  • Thời gian phản hồi trung bình (Latency): 182 ms.
  • Tỷ lệ lỗi (Failed requests): 0.00%.
  • Thông lượng (Throughput): Đạt 286.4 requests/second trên môi trường máy chủ cục bộ (Core i5, 8GB RAM).
Server Software:        Apache/2.4.52
Concurrency Level:      500
Time taken for tests:   17.45 seconds
Complete requests:      5000
Failed requests:        0
Requests per second:    286.45 [#/sec] (mean)
Time per request:       182.31 [ms] (mean)

3. Đánh giá từ người dùng thực tế (UAT)

Thực hiện khảo sát trên mẫu 35 người dùng (bao gồm 5 quản trị viên cửa hàng và 30 khách mua hàng):

  • Giao diện thân thiện và dễ sử dụng: 94.3% phản hồi tích cực.
  • Tốc độ tìm kiếm sản phẩm và đặt hàng: 91.4% đánh giá rất nhanh và trực quan.
  • Độ chính xác trong trừ kho và tra cứu đơn: 100% không phát sinh lỗi lệch số liệu.

Đổi mới và đóng góp

  1. Kiến trúc Module hóa gọn nhẹ: So với các nền tảng CMS dựng sẵn có dung lượng source code lên đến hàng trăm Megabytes do tích hợp quá nhiều module dư thừa, hệ thống được tinh giản tối đa, giúp giảm 65% dung lượng lưu trữ và giảm 40% lượng RAM tiêu thụ trên máy chủ.
  2. Cơ chế xử lý giao dịch an toàn tuyệt đối: Ứng dụng khóa bi quan (SELECT ... FOR UPDATE) kết hợp ACID Transaction giúp loại bỏ hoàn toàn hiện tượng Race Condition (hai khách hàng cùng mua một sản phẩm tồn kho cuối cùng cùng một thời điểm).
  3. Phân quyền người dùng chặt chẽ: Tách biệt hoàn toàn luồng quản trị (Admin Dashboard) với luồng khách hàng (Storefront), ngăn chặn việc leo thang đặc quyền (Privilege Escalation) qua việc kiểm tra phiên làm việc trực tiếp tại tầng Middleware của ứng dụng.

Ứng dụng thực tế và triển khai

Yêu cầu cấu hình hệ thống

  • Hệ điều hành: Linux (Ubuntu/Debian/CentOS) hoặc Windows Server.
  • Web Server: Apache 2.4+ hoặc Nginx 1.20+.
  • PHP: Phiên bản 8.1 trở lên (yêu cầu các extension: pdo_mysql, mbstring, openssl, gd).
  • Database: MySQL 8.0+ hoặc MariaDB 10.6+.

Hướng dẫn triển khai từng bước trên Ubuntu Server

# 1. Cập nhật hệ thống và cài đặt Apache, PHP, MySQL
sudo apt update && sudo apt upgrade -y
sudo apt install apache2 mysql-server php8.2 php8.2-mysql php8.2-gd php8.2-mbstring git -y

# 2. Clone mã nguồn vào thư mục web server
cd /var/www/html
sudo git clone https://github.com/nguyenduchai/phukien-shop.git .

# 3. Phân quyền thư mục tải lên hình ảnh
sudo chown -R www-data:www-data /var/www/html/uploads
sudo chmod -R 755 /var/www/html/uploads

# 4. Import cơ sở dữ liệu
sudo mysql -u root -p phukien_db < /var/www/html/database/schema.sql

# 5. Cấu hình file kết nối CSDL và khởi động lại dịch vụ
sudo systemctl restart apache2

Phân tích hiệu quả kinh tế và ROI

  • Tiết kiệm chi phí đầu tư ban đầu: Không mất phí bản quyền phần mềm (100% Open Source).
  • Giảm chi phí vận hành: Cắt giảm 70% thời gian tạo đơn và thống kê doanh thu so với phương thức thủ công.
  • Thời gian hoàn vốn ước tính (ROI Timeline): Đạt điểm hòa vốn chỉ sau 3 - 5 tháng vận hành nhờ tối ưu hóa chi phí sàn và giảm thiểu tỷ lệ thất thoát kho.

Hạn chế và hướng phát triển

Hạn chế còn tồn tại

  • Hệ thống chưa hỗ trợ đa ngôn ngữ và thanh toán đa tiền tệ.
  • Việc cập nhật trạng thái vận đơn hiện tại vẫn dựa trên cập nhật thủ công của quản trị viên, chưa kết nối trực tiếp API của các đơn vị giao hàng như Viettel Post, GHTK hay GHN.
  • Chưa có hệ thống thông báo đẩy (Web Push Notifications) khi có trạng thái đơn mới.

Hướng phát triển trong tương lai

  • Tích hợp API cổng thanh toán quốc gia: Kết nối cổng VNPay Sandbox/Production và ví MoMo qua giao thức RESTful API.
  • Ứng dụng AI/Machine Learning: Xây dựng hệ thống gợi ý sản phẩm thông minh (Recommendation System) dựa trên lịch sử xem hàng và hành vi mua sắm của khách.
  • Phát triển Progressive Web App (PWA): Tăng cường khả năng lưu cache offline và cài đặt nhanh ứng dụng trên smartphone của khách hàng mà không cần qua App Store/Google Play.

Đối tượng hưởng lợi

  • Sinh viên & Người học CNTT: Cung cấp tài liệu tham khảo chi tiết về quy trình phân tích thiết kế hệ thống thông tin, biểu đồ Use Case, Sequence Diagram và kỹ thuật lập trình PHP hướng bảo mật.
  • Lập trình viên Web: Nắm bắt được mô hình triển khai CSDL chuẩn hóa, giải thuật khóa giao dịch xử lý đơn hàng và kỹ thuật tối ưu hóa truy vấn MySQL.
  • Chủ cửa hàng kinh doanh phụ kiện: Sở hữu một giải pháp quản lý bán hàng toàn diện, chi phí thấp, làm chủ hoàn toàn dữ liệu khách hàng và chủ động trong chiến lược kinh doanh.
  • Nhà nghiên cứu / Giảng viên: Một minh chứng thực tiễn về việc ứng dụng kiến trúc Web LAMP cơ bản nhưng giải quyết hiệu quả bài toán thương mại điện tử quy mô vừa và nhỏ.

Câu hỏi thường gặp

1. Hệ thống có thể mở rộng để bán các mặt hàng khác ngoài phụ kiện điện thoại không?

Có. Cấu trúc cơ sở dữ liệu được thiết kế theo dạng danh mục đa cấp linh hoạt (categories), cho phép mở rộng không giới hạn các ngành hàng như thiết bị gia dụng, đồ chơi công nghệ, thời trang mà không cần thay đổi cấu trúc mã nguồn.

2. Làm thế nào để đảm bảo hệ thống không bị tấn công SQL Injection?

Toàn bộ các thao tác truy xuất cơ sở dữ liệu đều sử dụng đối tượng PDO với cơ chế Prepared Statements và tham số hóa (Parameterized Queries). Không có bất kỳ chuỗi truy vấn nào được ghép trực tiếp từ dữ liệu người dùng ($GET / $_POST).

3. Hệ thống có thể xử lý bao nhiêu người truy cập cùng lúc?

Với cấu hình máy chủ VPS tiêu chuẩn (2 vCPU, 4GB RAM), hệ thống có thể đáp ứng ổn định 300 - 500 người dùng hoạt động đồng thời (CCU) với thời gian phản hồi trang dưới 250ms nhờ tối ưu hóa cấu trúc chỉ mục (Indexing) trong MySQL.

4. Chi phí duy trì website hàng năm là bao nhiêu?

Chi phí vận hành rất tiết kiệm, chỉ bao gồm tên miền quốc tế (.com/.net: khoảng 250.000 - 350.000 VNĐ/năm) và dịch vụ Hosting/Cloud VPS gói cơ bản (khoảng 800.000 - 1.500.000 VNĐ/năm), hoàn toàn không phát sinh phí duy trì phần mềm hàng tháng.

5. Website có thể chạy trên các thiết bị di động không?

Website được thiết kế hoàn toàn theo tiêu chuẩn Responsive Web Design bằng CSS Grid và Flexbox, đảm bảo giao diện tự động co giãn và hiển thị tối ưu trên tất cả các kích thước màn hình từ điện thoại thông minh, máy tính bảng đến máy tính để bàn.


Kết luận

Đồ án tốt nghiệp "Thiết kế Website bán phụ kiện điện thoại" của sinh viên Nguyễn Đức Hải đã hoàn thành toàn diện các mục tiêu đặt ra: từ việc khảo sát thực tế, phân tích đặc tả yêu cầu, thiết kế kiến trúc hệ thống, xây dựng cơ sở dữ liệu đến lập trình hoàn thiện và kiểm thử hiệu năng.

Hệ thống cung cấp một giải pháp công nghệ thực tiễn, giải quyết triệt để bài toán số hóa quy trình kinh doanh cho các cửa hàng phụ kiện điện thoại với chi phí tối ưu, độ an toàn cao và hiệu năng vận hành ổn định. Đề tài không chỉ khẳng định năng lực ứng dụng công nghệ của tác giả mà còn đóng vai trò là tài liệu tham khảo giá trị cho các nghiên cứu và dự án phát triển hệ thống thương mại điện tử tiếp theo.