1. 11:59 06/08/2026
Chào cả nhà! Mình mở loạt bài hướng dẫn làm website thương mại điện tử (bán hàng online) bằng PHP 8.x thuần (không framework) + MySQL 9.x, viết cho người MỚI BẮT ĐẦU, đi từ con số 0 đến khi có một website chạy được thật sự, có đầy đủ mã nguồn để anh em copy-dán vào dự án của mình.
Dự án demo có tên là "ShopVN" — một website bán hàng đơn giản nhưng đầy đủ chức năng cốt lõi: trang chủ, danh mục, chi tiết sản phẩm, giỏ hàng, đặt hàng, đăng ký/đăng nhập thành viên, và trang quản trị (admin) quản lý sản phẩm/đơn hàng.
LOẠT BÀI GỒM 10 PHẦN:
Phần 1 (bài này): Tổng quan dự án, yêu cầu môi trường, cấu trúc thư mục
Phần 2: Thiết kế cơ sở dữ liệu (database) đầy đủ
Phần 3: Dựng khung ứng dụng - kết nối PDO, hàm dùng chung, giao diện chung
Phần 4: Trang chủ, danh mục sản phẩm, chi tiết sản phẩm
Phần 5: Giỏ hàng (cart) bằng session
Phần 6: Đăng ký / đăng nhập / đăng xuất thành viên
Phần 7: Đặt hàng, thanh toán COD, lịch sử đơn hàng
Phần 8: Trang quản trị (admin) - quản lý danh mục, sản phẩm, đơn hàng
Phần 9: Bảo mật website (CSRF, XSS, SQL Injection, upload file an toàn)
Phần 10 (kết): Tối ưu hiệu năng + triển khai (deploy) lên hosting thật
Các phần sẽ được đăng nối tiếp nhau trong chuyên mục này, cuối mỗi bài mình sẽ để link "Phần trước / Phần sau" để anh em theo dõi cho tiện. Code ở mỗi phần đều nối tiếp phần trước, dán đủ 10 phần là có ngay 1 website hoàn chỉnh.
LƯU Ý VỀ ĐỊNH DẠNG CODE: khung soạn bài của diễn đàn là văn bản thuần (không có khối code riêng), nên khi dán code có thể bị mất bớt khoảng trắng thụt đầu dòng. Không sao cả, PHP không bắt buộc thụt lề để chạy đúng - các bạn cứ dán vào, sau đó bấm tổ hợp phím tự format lại code của trình soạn thảo (VD: Shift+Alt+F trong VS Code, Ctrl+Alt+L trong PhpStorm) là code sẽ đẹp lại ngay.
==============================
1. YÊU CẦU MÔI TRƯỜNG
==============================
- PHP 8.1 trở lên (khuyến nghị 8.4). Extension cần bật: pdo_mysql, mysqli, fileinfo, gd (để xử lý ảnh, tuỳ chọn).
- MySQL 8.0+/9.x (hoặc MariaDB 10.6+).
- Web server: XAMPP/Laragon (Windows) khi học và test ở máy cá nhân, hoặc Apache/Nginx/IIS khi lên hosting thật.
- Trình soạn code: VS Code (miễn phí, khuyến nghị) hoặc PhpStorm.
- Công cụ quản lý MySQL: phpMyAdmin (có sẵn trong XAMPP/Laragon) hoặc HeidiSQL/DBeaver.
Nếu chưa có môi trường, cách nhanh nhất cho người mới là cài Laragon (laragon.org) hoặc XAMPP (apachefriends.org) - cài xong là có sẵn PHP + MySQL + Apache chạy chung, không cần cài riêng lẻ từng thứ.
==============================
2. TẠO DỰ ÁN VÀ CẤU TRÚC THƯ MỤC
==============================
Tạo 1 thư mục tên "shopvn" trong thư mục chứa web (VD: C:\laragon\www\shopvn hoặc C:\xampp\htdocs\shopvn). Toàn bộ các phần sau sẽ đổ code vào đúng cấu trúc thư mục này, các bạn cứ tạo trước cho đủ (file rỗng cũng được, phần sau sẽ đổ code vào):
shopvn/
├── config/
│ └── database.php (kết nối PDO tới MySQL)
├── includes/
│ ├── functions.php (các hàm dùng chung: escape, format tiền, slug, session...)
│ ├── header.php (phần đầu giao diện: menu, logo)
│ └── footer.php (phần chân giao diện)
├── admin/
│ ├── includes/
│ │ ├── admin_header.php
│ │ └── admin_footer.php
│ ├── login.php
│ ├── logout.php
│ ├── index.php (dashboard thống kê)
│ ├── categories.php (danh sách + xoá danh mục)
│ ├── category_form.php (thêm/sửa danh mục)
│ ├── products.php (danh sách + xoá sản phẩm)
│ ├── product_form.php (thêm/sửa sản phẩm)
│ ├── orders.php (danh sách đơn hàng)
│ └── order_detail.php (chi tiết + đổi trạng thái đơn hàng)
├── assets/
│ ├── css/
│ │ └── style.css
│ └── uploads/
│ └── products/ (ảnh sản phẩm upload từ trang admin)
├── database/
│ └── shopvn.sql (toàn bộ cấu trúc + dữ liệu mẫu)
├── index.php (trang chủ)
├── category.php (sản phẩm theo danh mục)
├── product.php (chi tiết 1 sản phẩm)
├── search.php (tìm kiếm sản phẩm)
├── cart.php (xem giỏ hàng)
├── cart_add.php (thêm vào giỏ)
├── cart_update.php (cập nhật số lượng)
├── cart_remove.php (xoá khỏi giỏ)
├── checkout.php (trang đặt hàng)
├── order_success.php (đặt hàng thành công)
├── register.php (đăng ký)
├── login.php (đăng nhập)
├── logout.php (đăng xuất)
└── account.php (thông tin tài khoản + lịch sử đơn hàng)
Mình cố tình KHÔNG dùng framework (Laravel, CodeIgniter...) và KHÔNG dùng router/MVC phức tạp, mỗi trang là 1 file .php độc lập truy cập trực tiếp qua URL (VD: shopvn/product.php?slug=ao-thun-nam). Mục đích là để người mới hiểu rõ luồng chạy của PHP từ đầu đến cuối, không bị "ảo thuật" bởi framework. Khi đã vững rồi, các bạn hoàn toàn có thể nâng cấp lên MVC hoặc dùng Laravel sau.
==============================
3. TƯ DUY THIẾT KẾ TỔNG THỂ
==============================
- Toàn bộ truy vấn CSDL dùng PDO + prepared statement (không nối chuỗi SQL trực tiếp) để chống SQL Injection ngay từ đầu.
- Toàn bộ dữ liệu hiển thị ra HTML đều đi qua hàm e() (htmlspecialchars) để chống XSS.
- Giỏ hàng lưu trong session (không cần bảng cart riêng) - đơn giản, đủ dùng cho website vừa và nhỏ.
- Phân quyền: bảng users có cột role ENUM('customer','admin') - admin đăng nhập chung 1 bảng users, chỉ khác quyền truy cập khu vực /admin.
- Giá tiền lưu kiểu DECIMAL (không dùng FLOAT) để tránh sai số làm tròn khi tính toán tiền.
Ở Phần 2 mình sẽ đưa nguyên file database/shopvn.sql đầy đủ (users, categories, products, orders, order_items) kèm dữ liệu mẫu để các bạn import vào phpMyAdmin là chạy được ngay. Anh em theo dõi tiếp nhé!
--- Hết Phần 1 ---
----------------------------------------
MỤC LỤC LOẠT BÀI:
>> 1. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 1: Tổng Quan Dự Án, Yêu Cầu Môi Trường & Cấu Trúc Thư Mục - https://diendan.anyvlogs.info/chu-de/457-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-1-tong-quan-du-an-yeu-cau-moi-truong-cau-truc-thu-muc
2. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 2: Thiết Kế Cơ Sở Dữ Liệu (Database) Đầy Đủ Cho Website Bán Hàng - https://diendan.anyvlogs.info/chu-de/458-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-2-thiet-ke-co-so-du-lieu-database-day-du-cho-website-ban-hang
3. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 3: Dựng Khung Ứng Dụng - Kết Nối PDO, Hàm Dùng Chung, Giao Diện Chung - https://diendan.anyvlogs.info/chu-de/459-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-3-dung-khung-ung-dung-ket-noi-pdo-ham-dung-chung-giao-dien-chung
4. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 4: Trang Chủ, Danh Mục Sản Phẩm & Chi Tiết Sản Phẩm - https://diendan.anyvlogs.info/chu-de/460-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-4-trang-chu-danh-muc-san-pham-chi-tiet-san-pham
5. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 5: Xây Dựng Giỏ Hàng (Cart) Bằng Session - https://diendan.anyvlogs.info/chu-de/461-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-5-xay-dung-gio-hang-cart-bang-session
6. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 6: Đăng Ký, Đăng Nhập, Đăng Xuất Thành Viên - https://diendan.anyvlogs.info/chu-de/462-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-6-dang-ky-dang-nhap-dang-xuat-thanh-vien
7. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 7: Đặt Hàng, Thanh Toán COD & Lịch Sử Đơn Hàng - https://diendan.anyvlogs.info/chu-de/463-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-7-dat-hang-thanh-toan-cod-lich-su-don-hang
8. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 8: Trang Quản Trị (Admin) - Quản Lý Danh Mục, Sản Phẩm, Đơn Hàng - https://diendan.anyvlogs.info/chu-de/464-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-8-trang-quan-tri-admin-quan-ly-danh-muc-san-pham-don-hang
9. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 9: Bảo Mật Website (CSRF, XSS, SQL Injection, Upload An Toàn) - https://diendan.anyvlogs.info/chu-de/465-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-9-bao-mat-website-csrf-xss-sql-injection-upload-an-toan
10. [Series PHP+MySQL] Làm Website Bán Hàng Từ A-Z - Phần 10 (Kết Thúc): Tối Ưu Hiệu Năng & Triển Khai Lên Hosting Thật - https://diendan.anyvlogs.info/chu-de/466-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-10-ket-thuc-toi-uu-hieu-nang-trien-khai-len-hosting-that
Phần sau: https://diendan.anyvlogs.info/chu-de/458-series-php-mysql-lam-website-ban-hang-tu-a-z-phan-2-thiet-ke-co-so-du-lieu-database-day-du-cho-website-ban-hang