PHP ile site içi arama sonuçlarını filtreleme

PHP ile site içi arama sonuçlarını filtreleme

Merhaba arkadaşlar, çoğumuz php arama yapar fakat önümüze gereksiz sonuçlar gelir bu yüzden arama sonuçları ile birlikte filtreleyebileceğiz veya arama yapmadan sadece filtreleri kullanabileceğiz.

Veri tabanında tablomuzun adı “mail_sayfa” dır.

php arama Mysql verileri
Veri tabanımızdaki veriler ve sütun isimleri

arama veya filtreleme sonuçlarını GET method ile yapacağız.

<form method="GET">
    <!-- text search -->
    <div>
        <input type="text" name="q" >
    </div>
    <!-- //text search -->
    <!-- stats search -->
    <div>
        <select name="d">
            <option select value="">Durum</option>
            <option value="1">Aktif</option>
            <option value="0">Pasif</option>
        </select>
    </div>
    <!-- //stats search -->
    <!-- category search -->
    <div>
        <select name="k">
            <option value="">Kategori</option>
            <option value="E-mail">E-mail</option>
            <option value="Yatırım">Yatırım</option>
            <option value="Haber & İçerik">Haber & İçerik</option>
            <option value="Mühendislik">Mühendislik</option>
            <option value="Seo">Seo</option>
            <option value="Mobil">Mobil</option>
            <option value="Pazarlama">Pazarlama</option>
            <option value="Teknoloji">Teknoloji</option>
            <option value="Grafik">Grafik</option>
            <option value="Video">Video</option>
            <option value="Girişim">Girişim</option>
            <option value="Yazılım">Yazılım</option>
        </select>
    </div>
    <!-- //category search -->
    <!-- date search -->
    <div>
        <select name="t">
            <option select value="">Tarih</option>
            <option value="1hafta">Son 1 Hafta</option>
            <option value="3ay">Son 3 Ay</option>
            <option value="6ay">Son 6 Ay</option>
            <option value="1sene">Son 1 Sene</option>
            <option value="3sene">Son 3 Sene</option>
        </select>
    </div>
    <!-- //date search -->
    <!-- submit and reset -->
    <div>
        <input type="submit" value="filtrele">
    </div>
</form>
sayfa.php?q=liste&d=1&k=E-mail&t=1sene
// arama yapıldığında URL kısmı bu şekilde olacak

Filtreleme formunu oluşturduktan SQL verileri çekiyoruz.

$query = "SELECT * FROM mail_sayfa"; // mail_sayfa veri tablomuz çekiyoruz
$select = array(); // formdan gelen filtre verilerini diziye aktarıyoruz

Gelen verilerimizin Durumunu kontrol etmek için önce GET’den gelen veriyi $select değişkenine aktarıyoruz.

/* aktif pasif durum kontrol */
if (isset($_GET['d'])) {
    if($_GET['d'] != NULL) {
        $select[] = " AND sayfa_durum=".$_GET['d'];
    }else {
        $select[] = "";
    }
}

Burada 7, 92, 120, 365, 1095 gün önceki tarihleri değişkenlere atadık.

/* SQL için tarihler*/
$bugun=date('Y-m-d'); //bugün
$son7= date('Y-m-d', strtotime('-7 days')); // bugünden -7 gün sonraki tarih
$son90= date('Y-m-d', strtotime('-92 days'));
$son120= date('Y-m-d', strtotime('-120 days'));
$son365= date('Y-m-d', strtotime('-365 days'));
$son1095= date('Y-m-d', strtotime('-1095 days'));
/* SQL için tarihler*/

Burada Formdan gelen tarih verilerini if else kontrolü ile $select değişkenine SQL Between yukarıda yapmış olduğumuz tarih ile bugün ki tarih arasındaki verileri sıralama işlemini yaptık.


/* burada formdaki seçilen tarih neyse $select[] değişkenine SQL sorgusu olarak aktarılıyor */
if (isset($_GET['t'])) {
  if($_GET['t'] != NULL) {
    if($_GET['t'] == "1hafta") {
      $select[] = " AND sayfa_tarih BETWEEN '$son7' AND '$bugun'  ";
    }elseif ($_GET['t'] == "3ay") {
      $select[] = " AND sayfa_tarih BETWEEN '$son90' AND '$bugun'  ";
    }elseif ($_GET['t'] == "6ay") {
      $select[] = " AND sayfa_tarih BETWEEN '$son120' AND '$bugun'  ";
    }elseif ($_GET['t'] == "1sene") {
      $select[] = " AND sayfa_tarih BETWEEN '$son365' AND '$bugun'  ";
    }elseif ($_GET['t'] == "3sene") {
      $select[] = " AND sayfa_tarih BETWEEN '$son1095' AND '$bugun'  ";
    }else {
      $select[] = NULL;
    }
  }else {
    $select[] = NULL;
  }
}

Formda input text yazılan değeri if kontrolü ile $select değişkenine SQL Like “Sayfa_baslik” ve “sayfa_aciklama” kısmında eşleşen değerleri bize verir. (sadece bu kod Kullanılarak PHP’de basit arama yapılabilir.)

/* arama kutucuğuna yazılan verileri sayfa_baslik ve sayfa_aciklama sütunlarında like sorgusu olup olmadığını kontrol ediyoruz*/
if (isset($_GET['q'])) {
  if($_GET['q'] != NULL) {
    $select[] = " AND sayfa_baslik LIKE '%".$_GET['q']."%' OR sayfa_aciklama LIKE '%".$_GET['q']."%'";
  }else {
    $select[] = NULL;
  }
}

Aşağıdaki kodumuz ise kategori filtrelemesi yapar. Fakat burada önemli olan nokta şudur; name=”q” input’dan gelen bir veri varsa yukarıdaki yazı ile yapılan aramdaki SQL hemen arkasında SQL Or ekleyerek devam eder. eğer yoksa SQL And ile devam eder. Burada ki dikkat edelim.

/* kategori verileri listeleme */
if(isset($_GET['k'])) {
  if($_GET['q'] != NULL) {
    if($_GET['k'] != NULL) {
      $select[] = " OR sayfa_kategori LIKE '%".$_GET['k']."%'"; // $_GET['q'] varsa 
    }else {
      $select[] = NULL;
    }
  }else {
    if($_GET['k'] != NULL) {
      $select[] = " AND sayfa_kategori LIKE '%".$_GET['k']."%'"; // $_GET['q'] yoksa
    }else {
      $select[] = NULL;
    }
  }
}

Aşağıdaki ise artık SQL Sorgusunu $sql değişkenine atamış olduk.

$sql = $query; 
if (count($select) > 0) {
  $sql .= " WHERE ".implode(' ', $select)." ORDER BY sayfa_id DESC ";
}else {
  $sql .= " WHERE  ORDER BY sayfa_id DESC ";
}

PHP PDO verileri çekmek

$conn değişkeni veri tabanı bağlantı değişkenidir lütfen kendinizde göre değiştirmeyi unutmayın.

$mail_liste = $conn->prepare($sql);  
$mail_liste->execute();

Son olarak ise artık verilerimizi listeleyebiliriz.

if ($mail_liste->rowCount()) {
    foreach ($mail_liste as $mail_listele ) {
        echo $mail_liste['sayfa_baslik']."<br>";
        echo $mail_liste['sayfa_aciklama']."<br>";
    }
}

Php Arama görüntüleri

Php arama ve filtreleme sonuçları 1

Durumu aktif olanlar ve kategorisi e-mail olanları listledik.

Tavsiye Yazı:  PHP ile belli bir döngüde işlem yaptırma

Php arama ve filtreleme sonuçları 2

Son 3 ay içerisindeki ve sayfa başlığında veya sayfa açıklamasında “dene” kelimesi geçen veriler listeledik.

arkadaşlar yazımızda hata veya önerileriniz olursa lütfen yorum yapmayı unutmayın.

Unutmayın! Paylaşmak; kazanmanın en hızlı ve kolay yoludur. Bir sonraki blog’ta görüşmek dileğiyle esen kalın.

2 thoughts on “PHP ile site içi arama sonuçlarını filtreleme

Bir Cevap Yazın