Advanced PHP & MySQL Product Management System project with features such
as:
✅ Admin Login
✅ Category Management
✅ Product Management (Add, Edit, Delete, Search, Statistics)
✅ Product Image Upload
1. Database Structure (MySQL)
Run the following SQL to create the database and tables:
CREATE DATABASE product_management;
USE product_management;
CREATE TABLE admin (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
CREATE TABLE category (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE product (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
image VARCHAR(255),
category_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE
);
-- Create a default admin account (password: 123456)
INSERT INTO admin (username, password) VALUES ('admin', MD5('123456'));
2. Project Folder Structure
product_management/
│── db.php
│── index.php
│── login.php
│── logout.php
│── admin/
│
├── dashboard.php
│
├── category.php
│
├── product.php
│
├── upload.php
│── assets/
│
├── images/
│── css/
│── js/
3. Database Connection (db.php)
Create a db.php file to connect to the database:
<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "product_management";
$conn = mysqli_connect($host, $user, $pass, $dbname);
mysqli_set_charset($conn, "utf8");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
?>
4. Admin Login (login.php)
<?php
session_start();
include("db.php");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$password = md5($_POST["password"]);
$sql = "SELECT * FROM admin WHERE username='$username' AND
password='$password'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) == 1) {
$_SESSION["admin"] = $username;
header("Location: admin/dashboard.php");
exit();
} else {
$error = "Invalid username or password!";
}
}
?>
<form method="POST">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
5. Admin Dashboard (admin/dashboard.php)
<?php
session_start();
if (!isset($_SESSION["admin"])) {
header("Location: ../login.php");
exit();
}
?>
<h2>Welcome to Admin Dashboard</h2>
<a href="category.php">Manage Categories</a> | <a href="product.php">Manage
Products</a> | <a href="../logout.php">Logout</a>
6. Category Management (admin/category.php)
<?php
session_start();
include("../db.php");
if (isset($_POST["add"])) {
$name = $_POST["name"];
mysqli_query($conn, "INSERT INTO category (name) VALUES ('$name')");
}
$categories = mysqli_query($conn, "SELECT * FROM category");
?>
<h2>Categories</h2>
<form method="POST">
<input type="text" name="name" required>
<button type="submit" name="add">Add Category</button>
</form>
<ul>
<?php while ($row = mysqli_fetch_assoc($categories)) { ?>
<li><?= $row["name"] ?> <a href="delete_category.php?id=<?=
$row['id'] ?>">Delete</a></li>
<?php } ?>
</ul>
7. Product Management (admin/product.php)
<?php
session_start();
include("../db.php");
$categories = mysqli_query($conn, "SELECT * FROM category");
if (isset($_POST["add"])) {
$name = $_POST["name"];
$price = $_POST["price"];
$category_id = $_POST["category_id"];
$image = $_FILES["image"]["name"];
move_uploaded_file($_FILES["image"]["tmp_name"], "../assets/images/" .
$image);
mysqli_query($conn, "INSERT INTO product (name, price, image,
category_id) VALUES ('$name', '$price', '$image', '$category_id')");
}
$products = mysqli_query($conn, "SELECT product.*, category.name as
category_name FROM product JOIN category ON product.category_id =
category.id");
?>
<h2>Products</h2>
<form method="POST" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Product Name" required>
<input type="number" name="price" placeholder="Price" required>
<select name="category_id" required>
<?php while ($cat = mysqli_fetch_assoc($categories)) { ?>
<option value="<?= $cat['id'] ?>"><?= $cat['name'] ?></option>
<?php } ?>
</select>
<input type="file" name="image" required>
<button type="submit" name="add">Add Product</button>
</form>
<table border="1">
<tr><th>Name</th><th>Price</th><th>Category</th><th>Image</th></tr>
<?php while ($row = mysqli_fetch_assoc($products)) { ?>
<tr>
<td><?= $row["name"] ?></td>
<td><?= $row["price"] ?></td>
<td><?= $row["category_name"] ?></td>
<td><img src="../assets/images/<?= $row["image"] ?>"
width="50"></td>
</tr>
<?php } ?>
</table>
8. Product Search (admin/product.php)
<form method="GET">
<input type="text" name="search" placeholder="Search product">
<button type="submit">Search</button>
</form>
<?php
$search = isset($_GET["search"]) ? $_GET["search"] : "";
$products = mysqli_query($conn, "SELECT product.*, category.name as
category_name FROM product
JOIN category ON product.category_id = category.id
WHERE product.name LIKE '%$search%'");
?>
9. Logout (logout.php)
<?php
session_start();
session_destroy();
header("Location: login.php");
exit();
?>
10. Product Statistics
<?php
$count = mysqli_fetch_assoc(mysqli_query($conn, "SELECT COUNT(*) as total
FROM product"));
echo "Total products: " . $count["total"];
?>
🎯 Conclusion
This is a complete product management system with login, search, image upload,
and statistics.
It can be expanded with user roles, product editing, AJAX...
You can use Bootstrap to improve the UI.
===========================================
Xây dựng hệ thống quản lý sản phẩm bằng PHP và MySQL với các chức năng nâng
cao như:
✅ Đăng nhập quản trị
✅ Quản lý danh mục (Category)
✅ Quản lý sản phẩm (Product) (Thêm, Sửa, Xóa, Tìm kiếm, Thống kê)
✅ Upload ảnh sản phẩm
1. Cấu trúc CSDL (MySQL)
Chạy đoạn SQL sau để tạo database và các bảng:
CREATE DATABASE product_management;
USE product_management;
CREATE TABLE admin (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
CREATE TABLE category (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE product (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
image VARCHAR(255),
category_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE
);
-- Tạo tài khoản admin mặc định (mật khẩu: 123456)
INSERT INTO admin (username, password) VALUES ('admin', MD5('123456'));
2. Cấu trúc thư mục dự án
product_management/
│── db.php
│── index.php
│── login.php
│── logout.php
│── admin/
│
├── dashboard.php
│
├── category.php
│
├── product.php
│
├── upload.php
│── assets/
│
├── images/
│── css/
│── js/
3. Kết nối Database (db.php)
Tạo một file db.php để kết nối CSDL:
<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "product_management";
$conn = mysqli_connect($host, $user, $pass, $dbname);
mysqli_set_charset($conn, "utf8");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
?>
4. Đăng nhập Admin (login.php)
<?php
session_start();
include("db.php");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$password = md5($_POST["password"]);
$sql = "SELECT * FROM admin WHERE username='$username' AND
password='$password'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) == 1) {
$_SESSION["admin"] = $username;
header("Location: admin/dashboard.php");
exit();
} else {
$error = "Invalid username or password!";
}
}
?>
<form method="POST">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
5. Trang quản trị (admin/dashboard.php)
<?php
session_start();
if (!isset($_SESSION["admin"])) {
header("Location: ../login.php");
exit();
}
?>
<h2>Welcome to Admin Dashboard</h2>
<a href="category.php">Manage Categories</a> | <a href="product.php">Manage
Products</a> | <a href="../logout.php">Logout</a>
6. Quản lý danh mục (admin/category.php)
<?php
session_start();
include("../db.php");
if (isset($_POST["add"])) {
$name = $_POST["name"];
mysqli_query($conn, "INSERT INTO category (name) VALUES ('$name')");
}
$categories = mysqli_query($conn, "SELECT * FROM category");
?>
<h2>Categories</h2>
<form method="POST">
<input type="text" name="name" required>
<button type="submit" name="add">Add Category</button>
</form>
<ul>
<?php while ($row = mysqli_fetch_assoc($categories)) { ?>
<li><?= $row["name"] ?> <a href="delete_category.php?id=<?=
$row['id'] ?>">Delete</a></li>
<?php } ?>
</ul>
7. Quản lý sản phẩm (admin/product.php)
<?php
session_start();
include("../db.php");
$categories = mysqli_query($conn, "SELECT * FROM category");
if (isset($_POST["add"])) {
$name = $_POST["name"];
$price = $_POST["price"];
$category_id = $_POST["category_id"];
$image = $_FILES["image"]["name"];
move_uploaded_file($_FILES["image"]["tmp_name"], "../assets/images/" .
$image);
mysqli_query($conn, "INSERT INTO product (name, price, image,
category_id) VALUES ('$name', '$price', '$image', '$category_id')");
}
$products = mysqli_query($conn, "SELECT product.*, category.name as
category_name FROM product JOIN category ON product.category_id =
category.id");
?>
<h2>Products</h2>
<form method="POST" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Product Name" required>
<input type="number" name="price" placeholder="Price" required>
<select name="category_id" required>
<?php while ($cat = mysqli_fetch_assoc($categories)) { ?>
<option value="<?= $cat['id'] ?>"><?= $cat['name'] ?></option>
<?php } ?>
</select>
<input type="file" name="image" required>
<button type="submit" name="add">Add Product</button>
</form>
<table border="1">
<tr><th>Name</th><th>Price</th><th>Category</th><th>Image</th></tr>
<?php while ($row = mysqli_fetch_assoc($products)) { ?>
<tr>
<td><?= $row["name"] ?></td>
<td><?= $row["price"] ?></td>
<td><?= $row["category_name"] ?></td>
<td><img src="../assets/images/<?= $row["image"] ?>"
width="50"></td>
</tr>
<?php } ?>
</table>
8. Tìm kiếm sản phẩm (admin/product.php)
<form method="GET">
<input type="text" name="search" placeholder="Search product">
<button type="submit">Search</button>
</form>
<?php
$search = isset($_GET["search"]) ? $_GET["search"] : "";
$products = mysqli_query($conn, "SELECT product.*, category.name as
category_name FROM product
JOIN category ON product.category_id = category.id
WHERE product.name LIKE '%$search%'");
?>
9. Đăng xuất (logout.php)
<?php
session_start();
session_destroy();
header("Location: login.php");
exit();
?>
10. Thống kê số lượng sản phẩm
<?php
$count = mysqli_fetch_assoc(mysqli_query($conn, "SELECT COUNT(*) as total
FROM product"));
echo "Total products: " . $count["total"];
?>
🎯 Kết luận
Đây là hệ thống quản lý sản phẩm hoàn chỉnh với đăng nhập, tìm kiếm, tải ảnh,
thống kê.
Có thể mở rộng thêm phân quyền, sửa sản phẩm, AJAX...
Bạn có thể dùng Bootstrap để làm giao diện đẹp hơn.