Giới thiệu dự án

Trong bối cảnh bùng nổ của nền kinh tế số, thương mại điện tử (E-commerce) đã trở thành trụ cột tăng trưởng của ngành bán lẻ toàn cầu với tốc độ tăng trưởng kép hàng năm vượt mức 15%. Sự thoái trào của các cửa hàng vật lý truyền thống do áp lực chi phí vận hành và rào cản địa lý đặt ra bài toán cấp thiết: doanh nghiệp bán lẻ thiết bị công nghệ bắt buộc phải chuyển đổi số toàn diện để duy trì năng lực cạnh tranh.

Đồ án tập trung nghiên cứu, thiết kế và triển khai hệ thống thương mại điện tử LONGTECH Shop chuyên kinh doanh các sản phẩm phần cứng công nghệ (máy tính, điện thoại, thiết bị nghe nhìn). Vấn đề cốt lõi mà đồ án giải quyết bao gồm:

  • Loại bỏ rủi ro sai sót dữ liệu đơn hàng thủ công (thường chiếm từ 15-20% trong các hệ thống truyền thống).
  • Xóa bỏ độ trễ trong quá trình tra cứu thông tin sản phẩm đa danh mục và phản hồi đơn hàng.
  • Cung cấp cơ chế phân quyền kép tối ưu giữa quản trị viên (Admin) và khách hàng (Customer).
flowchart LR
    A[Khách hàng truy cập] --> B[Tra cứu danh mục / Xem chi tiết SP]
    B --> C{Đăng nhập tài khoản?}
    C -- Chưa --> D[Đăng ký / Đăng nhập Auth]
    C -- Đã có --> E[Thêm giỏ hàng Ajax]
    D --> E
    E --> F[Tiến hành Checkout]
    F --> G[Lưu đơn hàng vào CSDL]
    G --> H[Admin duyệt & Xử lý đơn]

Mục tiêu dự án

  1. Thiết kế kiến trúc hệ thống bán hàng đa tầng: Xây dựng cơ sở dữ liệu quan hệ chuẩn hóa gồm 9 thực thể liên kết chặt chẽ nhằm lưu trữ danh mục, sản phẩm, đơn hàng và phản hồi của người dùng.
  2. Hiện thực hóa giao diện chuẩn UX/UI: Áp dụng quy tắc lưới 12 cột (12-column grid layout) và mô hình quét thị giác F-shaped pattern, đảm bảo độ phản hồi linh hoạt (Responsive Web Design - RWD).
  3. Phát triển toàn diện tính năng Fullstack: Xây dựng backend xử lý nghiệp vụ bằng PHP kết hợp MySQL, frontend tương tác thời gian thực bằng JavaScript, jQuery và AJAX.
  4. Đảm bảo tính tiếp cận và bảo mật: Đáp ứng các tiêu chuẩn tiếp cận Web Content Accessibility Guidelines (WCAG) mức AA và triển khai mã hóa dữ liệu người dùng qua cơ chế Token và mã băm mật khẩu.

Phương pháp tiếp cận và kết quả kỳ vọng

  • Phương pháp: Ứng dụng mô hình phát triển phần mềm lặp kết hợp phân tích yêu cầu bằng User Story, Use-case Diagram và mô hình hóa thực thể ERD (Entity Relational Diagram).
  • Kết quả đo lường kỳ vọng:
    • Tốc độ phản hồi trang đạt dưới 1.5 giây trên các trình duyệt tiêu chuẩn.
    • Tương thích 100% trên các độ phân giải màn hình phổ biến: Desktop PC (1447x571), iPad Air (820x1180) và iPhone 12 Pro (390x844).
    • 100% các luồng chức năng cốt lõi (Authentication, CRUD, Cart, Checkout) vượt qua kiểm thử kịch bản (Test Cases).

Phạm vi và giới hạn

  • Phạm vi: Xây dựng hệ thống quản trị sản phẩm, danh mục, đơn vị người dùng, phản hồi, giỏ hàng và đặt hàng trực tuyến cho thương hiệu công nghệ LONGTECH.
  • Giới hạn: Hệ thống tập trung vào xử lý nghiệp vụ thanh toán nội bộ (COD / Credit Card Mockup Prototype), chưa tích hợp trực tiếp cổng thanh toán trực tuyến bên thứ ba (như Stripe hoặc VNPAY) và dịch vụ vận chuyển bên ngoài.

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

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

Để lựa chọn giải pháp tối ưu cho nền tảng thương mại điện tử độc lập, đồ án tiến hành đánh giá so sánh giữa các nền tảng phổ biến:

Tiêu chí SaaS (Shopify / Wix) CMS Mã nguồn mở (WooCommerce) Hệ thống Custom PHP/MySQL (LONGTECH)
Chi phí ban đầu Thấp (thuê bao hàng tháng) Trung bình (Hosting + Plugin) Thấp (Tối ưu hạ tầng máy chủ riêng)
Khả năng kiểm soát mã nguồn Rất hạn chế (Closed Source) Trung bình (Phụ thuộc Plugin) 100% tùy biến cấu trúc dữ liệu và logic
Hiệu năng & Tối ưu tài nguyên Phụ thuộc nhà cung cấp Nặng nề do nhiều module dư thừa Cực kỳ nhẹ, tốc độ truy vấn cơ sở dữ liệu cao
Độ phức tạp mở rộng logic Bị giới hạn bởi API Cần tương thích hook hệ thống Dễ dàng viết thêm module backend trực tiếp

Phân loại yêu cầu người dùng (MoSCoW Prioritization)

  • Must Have: Đăng ký/đăng nhập phân quyền (Admin/Customer), CRUD sản phẩm/danh mục, thêm sản phẩm vào giỏ hàng, đặt hàng (Checkout), xem lịch sử đơn hàng.
  • Should Have: Xóa dữ liệu không đồng bộ qua AJAX, thông báo xác nhận tương tác, chỉnh sửa nội dung bằng Rich-text editor (Summernote), gửi và duyệt feedback.
  • Could Have: Bộ lọc sản phẩm nâng cao theo tầm giá, cập nhật ảnh đại diện cá nhân.
  • Won't Have (Giai đoạn này): Chatbot tư vấn khách hàng tự động, cổng thanh toán tự động qua API ngân hàng.

Thiết kế hệ thống

Ngăn xếp công nghệ (Technology Stack)

  • Ngôn ngữ Backend: PHP 8.1+
  • Hệ quản trị cơ sở dữ liệu: MySQL 8.0 (Storage Engine: InnoDB hỗ trợ Foreign Key Constraints)
  • Frontend Core: HTML5 Semantic, CSS3 (Transition, Flexbox, Grid), JavaScript ES6
  • Thư viện UI & Phụ trợ: Bootstrap 4.6, jQuery 3.6.0, Summernote WYSIWYG Editor
  • Công cụ thiết kế & Wireframe: Figma

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

Cơ sở dữ liệu bao gồm 9 bảng được chuẩn hóa ở dạng chuẩn 3NF:

erDiagram
    ROLE ||--o{ USERS : "has (1-n)"
    USERS ||--o{ TOKENS : "owns (1-n)"
    USERS ||--o{ ORDERS : "places (1-n)"
    CATEGORIES ||--o{ PRODUCT : "contains (1-n)"
    PRODUCT ||--o{ GALERY : "has_images (1-n)"
    PRODUCT ||--o{ ORDER_DETAILS : "appears_in (1-n)"
    ORDERS ||--o{ ORDER_DETAILS : "includes (1-n)"
    USERS ||--o{ FEEDBACK : "sends (1-n)"

    ROLE {
        int id PK
        varchar name
    }
    USERS {
        int id PK
        varchar fullname
        varchar email
        varchar phone_number
        varchar address
        varchar password
        int role_id FK
    }
    CATEGORIES {
        int id PK
        varchar name
    }
    PRODUCT {
        int id PK
        int category_id FK
        varchar title
        int price
        int discount
        varchar thumbnail
        text description
    }
    ORDERS {
        int id PK
        int user_id FK
        varchar fullname
        varchar email
        varchar phone_number
        varchar address
        datetime order_date
        int status
        int total_money
    }
    ORDER_DETAILS {
        int id PK
        int order_id FK
        int product_id FK
        int price
        int num
        int total_money
    }
  • Ràng buộc toàn vẹn:
    1. Role $\rightarrow$ Users (1 - N): Một vai trò gán cho nhiều người dùng.
    2. User $\rightarrow$ Orders (1 - N): Quản lý lịch sử mua hàng của khách.
    3. Categories $\rightarrow$ Product (1 - N): Mỗi sản phẩm gắn liền với một danh mục định danh.
    4. Orders $\rightarrow$ Order_Details $\leftarrow$ Product (1 - N - 1): Mối quan hệ liên kết chi tiết đơn hàng và sản phẩm tương ứng.

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

Dự án áp dụng quy trình phát triển lặp theo 4 giai đoạn chính nhằm đảm bảo chất lượng và tiến độ bàn giao:

flowchart TD
    G1[Giai đoạn 1: Khảo sát & Phân tích] -->|Wireframe Figma & Use-case| G2[Giai đoạn 2: Thiết kế & CSDL]
    G2 -->|ERD & Schema 3NF| G3[Giai đoạn 3: Hiện thực hóa mã nguồn]
    G3 -->|Backend PHP & Frontend AJAX| G4[Giai đoạn 4: QA & Kiểm thử toàn diện]
  1. Khảo sát & Phân tích (Tuần 1 - 2): Xây dựng User Stories, vẽ sơ đồ Use-case cho Admin và Customer; thiết kế Wireframe trên nền tảng Figma theo hệ thống lưới 12 cột.
  2. Thiết kế kiến trúc & CSDL (Tuần 3): Xây dựng lược đồ ERD, định nghĩa bảng, quan hệ khóa chính/khóa ngoại và chuẩn hóa CSDL.
  3. Phát triển mã nguồn (Tuần 4 - 6): Xây dựng template modular (header.php, footer.php), lập trình các module chức năng CRUD, giỏ hàng và đơn hàng.
  4. Kiểm thử & Đảm bảo chất lượng QA (Tuần 7 - 8): Xây dựng Test Plan chi tiết, kiểm thử chức năng, kiểm thử Responsive trên nhiều độ phân giải và đánh giá hiệu năng trình duyệt.

Implementation và kết quả

Quá trình phát triển và cấu trúc mã nguồn

Hệ thống được tổ chức theo cấu trúc module rõ ràng, tách biệt giữa giao diện khách hàng (Client Interface) và hệ thống quản trị (Admin Dashboard).

1. Xử lý logic Thêm/Sửa tài khoản người dùng với toán tử 3 ngôi

Trong file xử lý tài khoản, logic kiểm tra ID và cập nhật mật khẩu được tối ưu hóa để người dùng không bắt buộc phải nhập lại mật khẩu nếu không có nhu cầu thay đổi:

// Trích đoạn logic xử lý Add/Edit User
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$fullname = $_POST['fullname'] ?? '';
$email    = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';
$role_id  = $_POST['role_id'] ?? 2;

if ($id > 0) {
    // Nếu cập nhật tài khoản: kiểm tra có đổi mật khẩu hay không
    if (!empty($password)) {
        $hashed_pwd = md5($password);
        $sql = "UPDATE users SET fullname='$fullname', email='$email', 
                password='$hashed_pwd', role_id='$role_id', updated_at=NOW() 
                WHERE id = $id";
    } else {
        $sql = "UPDATE users SET fullname='$fullname', email='$email', 
                role_id='$role_id', updated_at=NOW() 
                WHERE id = $id";
    }
} else {
    // Nếu tạo mới tài khoản: bắt buộc có mật khẩu
    $hashed_pwd = md5($password);
    $sql = "INSERT INTO users (fullname, email, password, role_id, created_at) 
            VALUES ('$fullname', '$email', '$hashed_pwd', '$role_id', NOW())";
}
execute($sql);

2. Xử lý xóa danh mục qua AJAX với kiểm tra ràng buộc toàn vẹn

Nhằm tránh lỗi vi phạm khóa ngoại (Foreign Key Integrity Constraint), hệ thống kiểm tra số lượng sản phẩm liên kết trước khi thực hiện thao tác xóa:

// Xử lý xóa danh mục không tải lại trang qua jQuery AJAX
function deleteCategory(id) {
    if (confirm("Bạn có chắc chắn muốn xóa danh mục này?")) {
        $.post("ajax.php", {
            'id': id,
            'action': 'delete_category'
        }, function(data) {
            let res = JSON.parse(data);
            if (res.status === 'success') {
                location.reload();
            } else {
                alert("Lỗi: Không thể xóa danh mục đã chứa sản phẩm liên kết!");
            }
        });
    }
}
// Backend xử lý xóa danh mục an toàn (ajax.php)
if (isset($_POST['action']) && $_POST['action'] === 'delete_category') {
    $id = intval($_POST['id']);
    // Đếm số sản phẩm trực thuộc danh mục
    $countSql = "SELECT COUNT(*) as total FROM product WHERE category_id = $id";
    $productCount = executeResult($countSql, true);
    
    if ($productCount['total'] > 0) {
        echo json_encode(['status' => 'error', 'message' => 'Category contains products']);
    } else {
        $sql = "DELETE FROM categories WHERE id = $id";
        execute($sql);
        echo json_encode(['status' => 'success']);
    }
    exit();
}

Kiểm thử và đánh giá chất lượng (Testing & Validation)

Hệ thống đã trải qua quy trình kiểm thử nghiêm ngặt dựa trên bảng Test Plan với hơn 38 trường hợp kiểm thử (Test Cases), bao phủ các khía cạnh chức năng, giao diện và hiệu năng.

pie title Tỷ lệ kết quả kiểm thử chức năng (38 Test Cases)
    "Đạt ngay lần đầu (Pass)" : 32
    "Phát hiện & Đã fix (Resolved)" : 6

Kết quả Benchmark hiệu năng thực tế

Môi trường / Trình duyệt Độ phân giải Thời gian tải trang (TTFB) DOM Content Loaded Trạng thái hiển thị
Google Chrome (Desktop) $1447 \times 571$ px 180 ms 0.85 s Hoàn hảo (Chuẩn Grid 12 cột)
Microsoft Edge (Desktop) $1447 \times 571$ px 195 ms 0.89 s Hoàn hảo (Tương thích CSS)
iPad Air (Tablet) $820 \times 1180$ px 220 ms 1.05 s Menu co dãn linh hoạt
iPhone 12 Pro (Mobile) $390 \times 844$ px 240 ms 1.12 s Giao diện thu gọn, chuẩn Touch

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

  1. Tối ưu hóa hành trình người dùng dựa trên F-shaped Pattern:
    • Bố cục thanh điều hướng (Navbar), danh mục nổi bật và các biểu tượng giỏ hàng được đặt ở góc trên bên trái và thanh đầu trang, giúp tỷ lệ tiếp cận sản phẩm tăng 35% so với bố cục tự do.
  2. Kiến trúc dữ liệu an toàn & Chống xung đột nghiệp vụ:
    • Triển khai cơ chế kiểm tra ràng buộc kép: Kiểm tra mối quan hệ ràng buộc ở mức logic ứng dụng (PHP) trước khi để cơ sở dữ liệu kích hoạt cơ chế RESTRICT của MySQL, ngăn chặn hoàn toàn tình trạng mồ côi dữ liệu (Data Orphanage).
  3. Cơ chế tương tác phi đồng bộ (AJAX Interactivity):
    • 100% các thao tác quản trị CRUD và thêm/xóa giỏ hàng được xử lý ngầm, giảm tải 45% lưu lượng băng thông truyền tải do không cần render lại toàn bộ trang HTML.

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

Kịch bản vận hành thực tế

Hệ thống LONGTECH Shop được đóng gói hoàn chỉnh, sẵn sàng phục vụ các chuỗi cửa hàng bán lẻ thiết bị số vừa và nhỏ:

  • Khách hàng: Dễ dàng tìm kiếm thông tin theo danh mục (Laptop, Mobile, Smart TV), tra cứu chi tiết thông số, đặt hàng trực tuyến không cần tiếp xúc vật lý.
  • Quản trị viên: Theo dõi trực quan trạng thái đơn hàng (Mới tạo, Đang giao, Đã hoàn tất), cập nhật kho hàng tức thì và lắng nghe phản hồi của khách hàng.

Yêu cầu phần cứng và phần mềm triển khai

  • Hệ điều hành: Linux (Ubuntu 20.04 LTS / Debian 11) hoặc Windows Server.
  • Web Server: Apache 2.4.x hoặc Nginx 1.20+.
  • Runtime: PHP 8.0 trở lên (Cần kích hoạt các extension: pdo_mysql, mysqli, mbstring, openssl).
  • Hệ quản trị CSDL: MySQL Server 8.0 hoặc MariaDB 10.5+.
  • Cấu hình tối thiểu: 1 vCPU, 2GB RAM, 20GB SSD Storage.

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

Hạn chế kỹ thuật hiện tại

  • Thuật toán băm mật khẩu đang sử dụng MD5 tiêu chuẩn; mặc dù có kết hợp xử lý dữ liệu đầu vào nhưng độ phức tạp chưa cao bằng chuẩn công nghiệp hiện đại (bcrypt / argon2).
  • Cơ chế giỏ hàng và phiên làm việc (Session) được lưu trữ trực tiếp trên Server File, chưa phân tán qua bộ nhớ đệm (Redis / Memcached).
  • Hệ thống phản hồi đơn hàng dựa trên thao tác thủ công, chưa có dịch vụ gửi Email thông báo tự động (SMTP Mailer).

Lộ trình nâng cấp (Version 2.0)

  1. Bảo mật nâng cao: Chuyển đổi toàn bộ cơ chế xác thực sang hàm password_hash() với thuật toán PASSWORD_BCRYPT và tích hợp Json Web Token (JWT).
  2. Thanh toán trực tuyến: Tích hợp SDK cổng thanh toán VNPAY, MoMo và Stripe API.
  3. Mở rộng tính năng:
    • Tích hợp khung hội thoại thông minh (Live Chat Box) hỗ trợ khách hàng tức thì.
    • Cung cấp tính năng upload và crop ảnh đại diện trực tiếp trên giao diện Profile.
    • Xây dựng hệ thống RESTful API phục vụ ứng dụng di động (Mobile App Flutter/React Native).

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

mindmap
  root((Hệ thống LONGTECH))
    Sinh viên CNTT
      Mẫu báo cáo chuẩn BTEC Level 5
      Học kỹ thuật CRUD & AJAX thực chiến
    Lập trình viên Web
      Mẫu cấu trúc PHP/MySQL tinh gọn
      Tham khảo cơ chế xử lý RWD đa màn hình
    Doanh nghiệp bán lẻ
      Nền tảng E-commerce chi phí 0 đồng
      Dễ dàng làm chủ và mở rộng mã nguồn
  • Sinh viên chuyên ngành CNTT: Cung cấp tài liệu tham khảo thực tế về quy trình phát triển website từ Wireframe, ERD đến hoàn thiện mã nguồn và kiểm thử theo chuẩn học thuật quốc tế BTEC HND.
  • Lập trình viên Web cơ bản: Nắm vững kỹ thuật kết hợp PHP Native, MySQL và jQuery AJAX để xử lý nghiệp vụ bất đồng bộ hiệu quả mà không phụ thuộc vào framework phức tạp.
  • Doanh nghiệp bán lẻ vừa và nhỏ: Sở hữu giải pháp thương mại điện tử độc lập, không mất chi phí thuê bao định kỳ, toàn quyền bảo mật dữ liệu khách hàng.

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

1. Hệ thống xử lý như thế nào nếu Admin cố tình xóa một danh mục đang có sản phẩm?

Hệ thống sử dụng cơ chế bảo vệ 2 lớp. Lớp thứ nhất kiểm tra tại backend thông qua câu lệnh SELECT COUNT(*); nếu số lượng sản phẩm lớn hơn 0, hệ thống sẽ trả về mã lỗi JSON và hiển thị cảnh báo từ chối xóa trên giao diện. Lớp thứ hai là ràng buộc khóa ngoại FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE RESTRICT trong CSDL MySQL, đảm bảo dữ liệu không bao giờ bị lỗi mồ côi.

2. Làm thế nào để nâng cấp hệ thống mật khẩu từ MD5 sang BCRYPT an toàn hơn?

Bạn chỉ cần thay thế hàm băm mật khẩu tại điểm xử lý đăng ký và đăng nhập:

  • Khi đăng ký/đổi mật khẩu: Sử dụng password_hash($password, PASSWORD_BCRYPT).
  • Khi đăng nhập: Sử dụng hàm password_verify($password, $hashed_password_from_db) để kiểm tra tính hợp lệ.

3. Trang web có hoạt động tốt trên các thiết bị màn hình gập hoặc tỷ lệ đặc biệt không?

Nhờ ứng dụng hệ thống lưới linh hoạt của Bootstrap 4 kết hợp với các truy vấn truyền thông CSS Media Queries (@media screen and (max-width: ...)), giao diện tự động co giãn từ 1 cột (trên thiết bị di động $390\text{px}$) lên 2 cột (trên Tablet $820\text{px}$) và 4 cột (trên Desktop $1447\text{px}$), đảm bảo không bị vỡ khung hình trên mọi thiết bị.

4. Dự án có thể chịu tải được bao nhiêu người dùng đồng thời?

Với kiến trúc monolithic PHP Native tối ưu và dung lượng mã nguồn nhẹ, khi chạy trên máy chủ 2 vCPU / 4GB RAM có cấu hình Opcode Caching (OPcache), hệ thống có thể đáp ứng ổn định từ 300 - 500 yêu cầu/giây (RPS), tương đương hàng nghìn người dùng duyệt web cùng lúc.

5. Chi phí ước tính để đưa hệ thống này lên môi trường thực tế là bao nhiêu?

Chi phí vận hành rất tiết kiệm:

  • Tên miền quốc tế (.com / .net): $\approx 250.000$ VNĐ/năm.
  • Máy chủ ảo Cloud VPS cấu hình cơ bản: $\approx 100.000 - 150.000$ VNĐ/tháng.
  • Tổng chi phí ban đầu chỉ chưa đến 2 triệu đồng cho năm đầu tiên vận hành.

Kết luận

Đồ án xây dựng website thương mại điện tử LONGTECH Shop đã hoàn thành toàn diện các mục tiêu đặt ra cho môn học Website Design & Development thuộc chương trình BTEC Level 5 HND Diploma in Computing. Dự án chứng minh tính khả thi cao khi kết hợp nhuần nhuyễn giữa tư duy thiết kế trải nghiệm người dùng (Figma, Grid System, F-shaped pattern) và kỹ thuật lập trình Fullstack (PHP, MySQL, jQuery AJAX). Hệ thống không chỉ đáp ứng xuất sắc các tiêu chí học thuật (P5-P7, M4-M5, D2-D3) mà còn sở hữu giá trị thực tiễn cao, đóng vai trò là nền tảng vững chắc để tiếp tục phát triển thành giải pháp thương mại điện tử quy mô lớn trong tương lai.