Cara Membuat Fitur Pencarian dan Filter Data dengan PHP dan MySQL

Fitur pencarian membantu pengguna menemukan data dengan cepat di antara ratusan baris. Artikel ini membahas cara membuat fitur pencarian dan filter data dengan PHP dan MySQL secara aman.

Langkah 1: Form Pencarian

Buat form sederhana yang mengirim kata kunci lewat metode GET (agar bisa di-bookmark):

<form method="get">
    <input type="text" name="cari" placeholder="Cari produk..."
           value="<?= htmlspecialchars($_GET['cari'] ?? '') ?>">
    <button type="submit">Cari</button>
</form>

Langkah 2: Query Pencarian dengan LIKE

Gunakan LIKE dengan % agar cocok sebagian kata, dan prepared statement agar aman dari SQL injection:

<?php
require "koneksi.php";
$cari = trim($_GET["cari"] ?? "");

$keyword = "%" . $cari . "%";
$stmt = $koneksi->prepare("SELECT * FROM produk WHERE nama LIKE ? ORDER BY nama");
$stmt->bind_param("s", $keyword);
$stmt->execute();
$hasil = $stmt->get_result();

while ($row = $hasil->fetch_assoc()) {
    echo htmlspecialchars($row["nama"]) . "<br>";
}
?>

Tanda % berarti “karakter apa saja”, sehingga mencari “kop” akan menemukan “Kopi” dan “Kopiah”.

Langkah 3: Menambahkan Filter Kategori

Filter memungkinkan mempersempit hasil. Bangun query secara dinamis dengan aman:

<?php
$cari = trim($_GET["cari"] ?? "");
$kategori = $_GET["kategori"] ?? "";

$sql = "SELECT * FROM produk WHERE nama LIKE ?";
$params = ["%$cari%"];
$tipe = "s";

if ($kategori !== "") {
    $sql .= " AND kategori_id = ?";
    $params[] = (int) $kategori;
    $tipe .= "i";
}

$stmt = $koneksi->prepare($sql);
$stmt->bind_param($tipe, ...$params);
$stmt->execute();
$hasil = $stmt->get_result();
?>

Teknik “bangun query + array parameter” ini membuat filter fleksibel namun tetap aman lewat prepared statement.

Langkah 4: Menggabung dengan Pagination

Untuk hasil pencarian yang banyak, gabungkan dengan pagination. Kuncinya: sertakan parameter cari pada tautan halaman agar pencarian tidak hilang saat pindah halaman:

<a href="?cari=<?= urlencode($cari) ?>&hal=2">Halaman 2</a>

Kesalahan Umum

  • Menyisipkan $_GET langsung ke query — rawan SQL injection. Selalu prepared statement, bahkan untuk pencarian.
  • Pencarian hilang saat pindah halaman — sertakan kata kunci di URL pagination.
  • Lupa htmlspecialchars() pada value input dan hasil.

Kesimpulan

Anda telah membuat fitur pencarian dan filter data PHP dan MySQL yang aman memakai LIKE dan prepared statement, serta filter kategori dinamis. Fitur ini wajib untuk aplikasi dengan banyak data agar pengguna nyaman. Kombinasikan dengan pagination untuk hasil yang rapi.

Referensi: untuk pendalaman, kunjungi dokumentasi resmi PHP (php.net).

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *