Dalam aplikasi berbasis data seperti katalog produk, sistem karyawan, atau daftar pelanggan, pengguna sering kali memerlukan fitur pencarian dan filter untuk menemukan data yang spesifik. Tanpa fitur ini, pengguna harus menggulir panjang daftar data — tentu tidak efisien dan tidak ramah pengguna.
Fitur Search dan Filter Data di PHP MySQL memungkinkan pengguna mencari data berdasarkan kata kunci tertentu (misalnya nama produk) dan menyaring hasilnya (misalnya berdasarkan kategori atau harga). Dengan teknik ini, tampilan data menjadi lebih relevan, cepat ditemukan, dan efisien, baik untuk admin maupun user.
Konsep Dasar Search dan Filter
Sederhananya, pencarian dan filter bekerja dengan dua komponen:
-
Form input pencarian & filter (mengambil input dari user).
-
Query MySQL dinamis yang menyesuaikan hasil berdasarkan input tersebut.
Contoh: jika pengguna mengetik “Laptop” dan memilih kategori “Elektronik”, maka query akan mencari semua produk yang nama atau deskripsinya mengandung kata “Laptop” dan kategorinya adalah “Elektronik”.
Struktur Folder
project/ │ ├─ koneksi.php ├─ index.php ← Form pencarian & tampilan data └─ css/ └─ bootstrap.min.css
File: koneksi.php
<?php
$koneksi = new mysqli("localhost", "root", "", "db_toko");
if ($koneksi->connect_error) {
die("Koneksi gagal: " . $koneksi->connect_error);
}
?>
File: index.php
<?php include 'koneksi.php'; ?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Search dan Filter Data di PHP MySQL</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
</head>
<body class="p-4 bg-light">
<div class="container">
<h3 class="mb-3 text-center">Search dan Filter Data Produk</h3>
<!-- Form Pencarian & Filter -->
<form method="GET" class="row g-3 mb-4">
<div class="col-md-4">
<input type="text" name="keyword" class="form-control" placeholder="Cari nama produk..." value="<?= isset($_GET['keyword']) ? htmlspecialchars($_GET['keyword']) : '' ?>">
</div>
<div class="col-md-3">
<select name="kategori" class="form-select">
<option value="">Semua Kategori</option>
<option value="Elektronik" <?= (isset($_GET['kategori']) && $_GET['kategori']=='Elektronik')?'selected':'' ?>>Elektronik</option>
<option value="Pakaian" <?= (isset($_GET['kategori']) && $_GET['kategori']=='Pakaian')?'selected':'' ?>>Pakaian</option>
<option value="Aksesoris" <?= (isset($_GET['kategori']) && $_GET['kategori']=='Aksesoris')?'selected':'' ?>>Aksesoris</option>
</select>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary w-100">Cari</button>
</div>
<div class="col-md-2">
<a href="index.php" class="btn btn-secondary w-100">Reset</a>
</div>
</form>
<?php
// Ambil input
$keyword = isset($_GET['keyword']) ? $koneksi->real_escape_string($_GET['keyword']) : '';
$kategori = isset($_GET['kategori']) ? $koneksi->real_escape_string($_GET['kategori']) : '';
// Query dasar
$query = "SELECT * FROM produk WHERE 1";
// Filter berdasarkan keyword
if ($keyword != '') {
$query .= " AND (nama_produk LIKE '%$keyword%' OR deskripsi LIKE '%$keyword%')";
}
// Filter berdasarkan kategori
if ($kategori != '') {
$query .= " AND kategori = '$kategori'";
}
// Jalankan query
$result = $koneksi->query($query);
?>
<!-- Tabel Data -->
<table class="table table-bordered table-striped">
<thead class="table-dark">
<tr>
<th>No</th>
<th>Nama Produk</th>
<th>Kategori</th>
<th>Harga</th>
</tr>
</thead>
<tbody>
<?php
if ($result->num_rows > 0) {
$no = 1;
while ($row = $result->fetch_assoc()) {
echo "<tr>
<td>{$no}</td>
<td>{$row['nama_produk']}</td>
<td>{$row['kategori']}</td>
<td>Rp" . number_format($row['harga']) . "</td>
</tr>";
$no++;
}
} else {
echo "<tr><td colspan='4' class='text-center'>Data tidak ditemukan</td></tr>";
}
?>
</tbody>
</table>
</div>
</body>
</html>
Penjelasan Kode
-
Form Input Search & Filter
-
Input
keyworddigunakan untuk mencari nama atau deskripsi produk. -
Dropdown
kategoriuntuk menyaring hasil berdasarkan kategori. -
Tombol “Reset” untuk menampilkan semua data kembali.
-
-
Query Dinamis
-
Awalnya query adalah
SELECT * FROM produk WHERE 1, kemudian ditambahkan kondisiANDjika keyword atau kategori diisi. -
Teknik ini sederhana tapi efektif untuk membangun filter data dinamis.
-
-
Tabel Hasil
-
Data ditampilkan dengan format Bootstrap agar rapi dan responsif.
-
Pesan “Data tidak ditemukan” muncul jika hasil kosong.
-
Tips Keamanan
✅ Gunakan Prepared Statement ($stmt = $koneksi->prepare(...)) untuk mencegah SQL Injection.
✅ Terapkan htmlspecialchars() pada output agar aman dari XSS.
✅ Jika jumlah data besar, kombinasikan dengan Pagination AJAX agar hasil lebih cepat.
Contoh Query dengan Prepared Statement
$stmt = $koneksi->prepare("SELECT * FROM produk WHERE nama_produk LIKE ? AND kategori LIKE ?");
$search = "%{$keyword}%";
$filter = ($kategori != '') ? $kategori : '%';
$stmt->bind_param("ss", $search, $filter);
$stmt->execute();
$result = $stmt->get_result();
Kesimpulan
Dengan menerapkan Search dan Filter Data di PHP MySQL, pengguna dapat dengan mudah menemukan data relevan tanpa harus memuat seluruh daftar. Fitur ini meningkatkan pengalaman pengguna, mempercepat proses pencarian, dan menghemat sumber daya server.
Teknik ini sangat bermanfaat untuk proyek seperti toko online, sistem informasi sekolah, aplikasi stok barang, dan dashboard administrasi.