Arama Sistemi: PHP ile Veritabanında Canlı Arama Yapımı

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Klasik arama sistemlerinde kullanıcı kelimeyi yazar, butona tıklar ve sayfanın yenilenmesini bekler. Canlı arama sisteminde ise sayfa yenilenmeden, arka planda PHP ile veritabanı sorgulanır ve sonuçlar anlık olarak kullanıcıya sunulur. Bu işlem için JavaScript (AJAX) köprü görevini üstlenir.

1. Veritabanı Sorgusu: search.php​


İlk olarak, gelen arama terimini veritabanında arayacak ve sonuçları HTML olarak döndürecek PHP dosyamızı oluşturalım. Güvenlik için PDO ve LIKE operatörünü kullanacağız.

PHP:
<?php
require_once 'Database.php'; // Daha önce oluşturduğumuz DB sınıfı

if (isset($_POST['query'])) {
$db = Database::getInstance()->getConnection();
$arama = "%" . $_POST['query'] . "%";

$sorgu = $db-&gt;prepare(&quot;SELECT id, kullanici_adi FROM uyeler WHERE kullanici_adi LIKE :ara LIMIT 5&quot;);
$sorgu-&gt;execute([&#39;ara&#39; =&gt; $arama]);
$sonuclar = $sorgu-&gt;fetchAll();

if ($sonuclar) {
    foreach ($sonuclar as $satir) {
        echo &quot;&lt;div class=&#39;search-item&#39;&gt;&quot; . htmlspecialchars($satir[&#39;kullanici_adi&#39;]) . &quot;&lt;/div&gt;&quot;;
    }
} else {
    echo &quot;&lt;div class=&#39;no-result&#39;&gt;Sonuç bulunamadı.&lt;/div&gt;&quot;;
}

}
?>

2. Ön Yüz: HTML ve CSS​


Kullanıcının veri gireceği bir input alanı ve sonuçların görüneceği bir boş div alanı hazırlayalım.

HTML:
<input type="text" id="aramaKutusu" placeholder="Üye ara..." autocomplete="off">

<div id="sonucAlani"></div>

<style>
#sonucAlani {
border: 1px solid #ddd;
display: none; /* Başlangıçta gizli */
position: absolute;
background: #fff;
width: 200px;
}
.search-item { padding: 10px; cursor: pointer; }
.search-item:hover { background: #f4f4f4; }
</style>

3. Motor: JavaScript (AJAX)​


Kullanıcı klavyeden bir tuşa bastığında PHP dosyasına veriyi gönderen ve gelen yanıtı ekrana basan sihirli kod:

JavaScript:
document.getElementById('aramaKutusu').addEventListener('keyup', function() {
let query = this.value;
let sonucAlani = document.getElementById('sonucAlani');

if (query.length > 2) { // 2 karakterden fazla girilirse ara
    fetch('search.php', {
        method: 'POST',
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
        body: 'query=' + encodeURIComponent(query)
    })
    .then(response => response.text())
    .then(data => {
        sonucAlani.innerHTML = data;
        sonucAlani.style.display = 'block';
    });
} else {
    sonucAlani.style.display = 'none';
}

});

Canlı Arama Sistemi Avantaj Tablosu​


ÖzellikKlasik AramaCanlı Arama (AJAX)
HızYavaş (Sayfa yenilenir)Çok Hızlı (Anlık)
Kullanıcı DeneyimiDüşükÇok Yüksek
Sunucu YüküYüksek (Tüm sayfa yüklenir)Düşük (Sadece veri döner)

4. Profesyonel İpuçları​



  • [] Debouncing (Geciktirme): Her tuşa basıldığında sorgu göndermek yerine, kullanıcı yazmayı bitirdikten 300ms sonra sorgu göndermek sunucu yükünü %70 azaltır.
    [] Karakter Sınırı: Sorgunun en az 2 veya 3 karakterden sonra başlamasını sağlayın (Örn: query.length > 2).
    [] Güvenlik: Gelen veriyi her zaman htmlspecialchars() ile temizleyin, XSS açıklarına karşı korunun.
    [] Limit Kullanımı: Canlı sonuçlarda yüzlerce kayıt göstermeyin; LIMIT 5 veya LIMIT 10 her zaman daha estetiktir.

Sonuç​


Canlı arama sistemi, modern web projelerinin standart bir parçasıdır. PHP'nin veritabanı gücü ile JavaScript'in hızı birleştiğinde, kullanıcıların aradıkları içeriğe ulaşmaları saniyeler sürer. Bu sistemi kurarken veritabanı indekslerini (özellikle aranan sütun için) doğru yapılandırdığınızdan emin olun.
 
Geri
Üst