Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tạo hệ thống tìm kiếm nâng cao trong PHP + MySQL
Hướng Dẫn Đồ ÁnLập Trình Web

Tạo hệ thống tìm kiếm nâng cao trong PHP + MySQL

Chia sẻ
Chia sẻ

Một trong những tính năng quan trọng của bất kỳ website hiện đại nào là khả năng tìm kiếm thông tin một cách nhanh chóng và chính xác. Dù bạn đang xây dựng blog, trang thương mại điện tử, hay hệ thống quản lý dữ liệu nội bộ, việc tạo một hệ thống tìm kiếm nâng cao sẽ giúp người dùng dễ dàng tiếp cận nội dung họ cần.

Trong bài viết này, bạn sẽ được hướng dẫn cách xây dựng một hệ thống tìm kiếm nâng cao bằng PHP và MySQL, từ cơ bản đến nâng cao. Chúng ta sẽ xử lý dữ liệu đầu vào, tối ưu truy vấn SQL, xây dựng giao diện lọc theo nhiều tiêu chí và cả cách phân trang kết quả. Nếu bạn chưa biết cách kết nối CSDL hoặc xử lý form nhập, hãy xem lại bài hướng dẫn kết nối MySQL bằng PDO trong PHPtạo form đăng nhập có validate trong PHP thuần để có nền tảng tốt hơn.

Tổng quan về chức năng tìm kiếm nâng cao

Tìm kiếm nâng cao là gì?

Tìm kiếm nâng cao (advanced search) là một hệ thống cho phép người dùng lọc kết quả theo nhiều tiêu chí cụ thể như: từ khóa, danh mục, ngày tạo, trạng thái, hoặc bất kỳ thuộc tính nào có trong CSDL. Khác với tìm kiếm đơn giản chỉ dùng một input, tìm kiếm nâng cao thường bao gồm nhiều trường lọc khác nhau.

Lợi ích khi tích hợp tìm kiếm nâng cao

  • Trải nghiệm người dùng tốt hơn: Người dùng tìm thấy đúng thông tin họ cần mà không phải cuộn qua hàng trăm kết quả không liên quan.

  • Tối ưu tốc độ truy vấn: Giảm tải cho server vì kết quả trả về chính xác hơn.

  • Tăng tính chuyên nghiệp của hệ thống: Giao diện hiện đại, dễ sử dụng.

Thiết kế cơ sở dữ liệu mẫu để tìm kiếm

Mô hình dữ liệu ví dụ: danh sách sản phẩm

Để minh họa hệ thống tìm kiếm, chúng ta sẽ tạo bảng products với các trường thông dụng như id, name, category, price, status, created_at.

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    category VARCHAR(50) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    status ENUM('active', 'inactive') DEFAULT 'active',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Thêm dữ liệu mẫu để kiểm thử

Sau khi tạo bảng, bạn nên thêm vài dòng dữ liệu để test hệ thống tìm kiếm:

INSERT INTO products (name, category, price, status) VALUES
('iPhone 14', 'Điện thoại', 22000000, 'active'),
('Macbook Air', 'Laptop', 28000000, 'active'),
('Dell XPS 13', 'Laptop', 25000000, 'inactive'),
('Samsung Galaxy S22', 'Điện thoại', 18000000, 'active');

Tạo form tìm kiếm nâng cao bằng HTML

Giao diện người dùng gồm nhiều tiêu chí

Form tìm kiếm sẽ bao gồm các trường: từ khóa, danh mục, khoảng giá, trạng thái sản phẩm. Người dùng có thể nhập hoặc chọn một hoặc nhiều tiêu chí để lọc dữ liệu.

Code form HTML

<!-- search_form.php -->
<form action="search_result.php" method="GET">
    <input type="text" name="keyword" placeholder="Tìm theo tên sản phẩm"><br>

    <select name="category">
        <option value="">-- Chọn danh mục --</option>
        <option value="Điện thoại">Điện thoại</option>
        <option value="Laptop">Laptop</option>
    </select><br>

    <label>Giá từ:</label>
    <input type="number" name="price_min" min="0"><br>

    <label>Giá đến:</label>
    <input type="number" name="price_max" min="0"><br>

    <label>Trạng thái:</label>
    <select name="status">
        <option value="">-- Tất cả --</option>
        <option value="active">Hiển thị</option>
        <option value="inactive">Ẩn</option>
    </select><br>

    <button type="submit">Tìm kiếm</button>
</form>

Xử lý dữ liệu tìm kiếm và tạo truy vấn động

Thu thập dữ liệu từ form và kiểm tra tính hợp lệ

Khi người dùng submit form, bạn cần lấy các giá trị GET và kiểm tra xem chúng có tồn tại không. Dựa vào đó, bạn sẽ xây dựng truy vấn SQL phù hợp.

Tạo câu lệnh SQL linh hoạt theo từng bộ lọc

// search_result.php
require_once 'db.php';
$pdo = getPDO();

$conditions = [];
$params = [];

if (!empty($_GET['keyword'])) {
    $conditions[] = "name LIKE ?";
    $params[] = "%" . $_GET['keyword'] . "%";
}

if (!empty($_GET['category'])) {
    $conditions[] = "category = ?";
    $params[] = $_GET['category'];
}

if (!empty($_GET['price_min'])) {
    $conditions[] = "price >= ?";
    $params[] = $_GET['price_min'];
}

if (!empty($_GET['price_max'])) {
    $conditions[] = "price <= ?";
    $params[] = $_GET['price_max'];
}

if (!empty($_GET['status'])) {
    $conditions[] = "status = ?";
    $params[] = $_GET['status'];
}

$sql = "SELECT * FROM products";
if ($conditions) {
    $sql .= " WHERE " . implode(" AND ", $conditions);
}

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$results = $stmt->fetchAll();

Hiển thị kết quả tìm kiếm

Tùy biến giao diện kết quả

Kết quả tìm kiếm nên được hiển thị ở dạng bảng hoặc danh sách rõ ràng. Mỗi sản phẩm nên hiển thị thông tin cơ bản như tên, giá, trạng thái và thời gian tạo.

Mã HTML hiển thị danh sách

<?php if ($results): ?>
    <h3>Kết quả tìm được: <?php echo count($results); ?> sản phẩm</h3>
    <ul>
    <?php foreach ($results as $product): ?>
        <li>
            <?php echo htmlspecialchars($product['name']); ?> -
            <?php echo number_format($product['price']); ?> đ -
            <?php echo $product['status']; ?>
        </li>
    <?php endforeach; ?>
    </ul>
<?php else: ?>
    <p>Không tìm thấy sản phẩm phù hợp.</p>
<?php endif; ?>

Thêm chức năng phân trang cho kết quả

Tại sao cần phân trang?

Nếu dữ liệu quá nhiều, hệ thống nên chia kết quả thành các trang nhỏ giúp tăng tốc độ tải trang và dễ theo dõi.

Thêm phân trang vào tìm kiếm

// Bổ sung phân trang vào $sql
$limit = 10;
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
$offset = ($page - 1) * $limit;

$sql .= " LIMIT $limit OFFSET $offset";

Hiển thị link chuyển trang:

<?php if (count($results) === $limit): ?>
    <a href="?<?php echo http_build_query(array_merge($_GET, ['page' => $page + 1])); ?>">Trang sau</a>
<?php endif; ?>
<?php if ($page > 1): ?>
    <a href="?<?php echo http_build_query(array_merge($_GET, ['page' => $page - 1])); ?>">Trang trước</a>
<?php endif; ?>

Bảo mật và tối ưu truy vấn tìm kiếm

Tránh SQL Injection bằng Prepared Statement

Chúng ta đã dùng prepareexecute để tránh SQL Injection. Tuy nhiên bạn cũng nên đảm bảo không in trực tiếp giá trị từ $_GET nếu chưa htmlspecialchars() để tránh XSS.

Tạo chỉ mục cho cột tìm kiếm

Để tăng tốc độ tìm kiếm, nên tạo index cho các cột thường dùng như name, category, price:

CREATE INDEX idx_name ON products(name);
CREATE INDEX idx_category ON products(category);
CREATE INDEX idx_price ON products(price);

Kết luận

Xây dựng hệ thống tìm kiếm nâng cao trong PHP và MySQL không chỉ giúp cải thiện trải nghiệm người dùng mà còn tối ưu hóa hiệu suất truy vấn cho hệ thống. Với việc cho phép lọc theo nhiều tiêu chí như từ khóa, danh mục, giá cả và trạng thái, người dùng có thể nhanh chóng tiếp cận đúng thông tin cần thiết một cách hiệu quả.

Hy vọng qua bài viết này, bạn đã nắm được toàn bộ quy trình xây dựng chức năng tìm kiếm nâng cao – từ thiết kế cơ sở dữ liệu đến xử lý truy vấn động và hiển thị kết quả. Hãy áp dụng linh hoạt những kiến thức này vào dự án thực tế và tiếp tục mở rộng các tiêu chí tìm kiếm tùy theo nhu cầu hệ thống.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!