Php ile Kritere Göre Arama

 bcakir
 12 Ocak 2012

Merhaba arkadaşlar, bu aralar yoğunluğumdan dolayı yazmaya fırsat zor buluyorum. Şimdi yazacağım konuyu sizlerden gelen istek üzerine not defterimde planladığım zamandan biraz daha önce yazıyorum. Bu yazımızın konusu veritabanında bulunan kolonlara göre arama yapmak. Yani veritabanındaki başlık, konu, yazar gibi sütunlardan kullanıcının seçtiğine göre arama yapmak. Bu uygulamayı daha önce yaptığımız veritabanına bağlanma, veritabanında kategoriye göre arama yapma ve css ile arama kutusu tasarımı yapma yazılarını birleştirerek geliştireceğim. Uygulamayı iyice anlamak için bu yazılara göz atmanızda fayda var. Bu sitede bulunan birkaç yazıyı birleştirerek sizlerle yeni bir uygulama yapacağız. İhtiyacınız olacak olan veritabanı sql dosyasını ve bunun yanında da bütün betiğin olduğu içeriği yazının sonundan indirebileceksiniz. Uygulamamıza bağlantı betiğini yaparak başlayalım.

<?php
//baglanti.php olarak kaydedin
//veritabanınızın ismini girin
$vt_name='bcakir';
//şifreniz varsa girin
$şifre='';

//mysql veritabanı bağlantsı
$baglan = mysql_connect('localhost','root',$şifre) or die(mysql_error());
if($baglan){
    $db = mysql_select_db($vt_name,$baglan) or die (mysql_error());
    mysql_query('Set character set latin5');
}
?>

Yukarıda veritabanımıza bağlandık. Şimdi de kullanıcılarımızın arama kriterini ve arayacakları içeriği gireceği form elemanlarını yapalım. Buna ek olarak, form elemanlarına css ile tasarım giydirmeyi de unutmayalım.

<?php
//veritabanı bağlantı betiği
include "baglanti.php";
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-9" />
<title>Php ile Kritere Göre Arama</title>
<style type="text/css">
#kapsayici{
    width: 355px;
    background: url(arama.png) no-repeat
}
#aramaKutusu{
    width: 238px;
    height: 34px;
    overflow: hidden;
    display: inline-block;
}
#aramaKutusu input{
    width: 193px;
    height: 19px;
    margin: 7px 0 0 7px;
    padding: 0 0 0 2px;
    float: left;
    border: none;
    background: #eee;
    font: normal 12px Arial
}
#aramaKutusu button{
    width: 25px;
    height: 25px;
    margin: 4px 9px 0 2px;
    float: right;
    text-indent: -9999px;
    border: none;
    background: url(btn.png) no-repeat;
    cursor: pointer
}
#kategori{
   background: transparent;
   width: 105px;
   margin: 6px 0 0 10px;
   padding: 0;
   float: left;
   font-size: 14px;
   border: 1px solid #eee;
   height: 21px;
   background: #eee;
}
</style>
</head>
<body>
<div id="kapsayici">
<form action="index.php" method="post">
<select name="kategori" id="kategori">
    <option value="baslik">Başlık</option>
    <option value="icerik">İçerik</option>
    <option value="yazar">Yazar</option>
</select>
<div id="aramaKutusu">
<input type="text" name="kelime" placeholder="Aranacak Kelime..." />
<button type="submit" name="ara">Ara</button>
</div>
</form>
</div>
</body>
</html>

Uygulamamızın form elemanlarını ve tasarımını tamamladık. Yukarıda bulunan betiği ve son yazacağım veritabanında kritere göre arama yapma işlemini index.php olarak  kaydedin. Eğer siz aramayı başka sayfaya yönlendirerek yapacaksanız ise action kısmına yönlendireceğiniz sayfanın ismini girip bundan sonra yazacağım kodları da o sayfanın içerisine koyarak kaydedin. Unutmadan, yukarıda yer alan veritabanı bağlantı betiğini içeriye aktarma işlemini de yönlendireceğiniz sayfanın en başına taşıyın.

<?php
if(isset($_POST['kelime'])){
    //formdan gönderilen verileri alma
    $a_kelime=addslashes(strip_tags(trim($_POST['kelime'])));
    $a_kategori=$_POST['kategori'];

    //boş bırakılmamışsa
    if($a_kelime!=NULL){
        //aranılmak istenilen kolona göre verilerin listelenmesi
        $sec = mysql_query("Select * From arama Where $a_kategori Like '%{$a_kelime}%' AND onay='1'");
        while ($row = mysql_fetch_array($sec)){
            extract($row);
            echo 'Kategori: '.$kategori."<br />";
            echo 'Başlık: '.$baslik."<br />";
            echo 'İçerik : '.$icerik."<br />";
            echo 'Yazar : '.$yazar;
            echo "<hr/>";
        }
    }else{
        echo 'Arama kısmını boş bırakmayın...';
    }
}

//veritabanı bağlantısı sonlandırma
mysql_close();
?>

Son olarak veritabanımızdaki sütünlara göre arama işlemimizi de tamamladık. Siz yaptığımız bu uygulamayı kendi veritabanınıza göre kolayca uyarlayabilir ya da farklı tasarımlar giydirebilirsiniz. Uygulamamızın bütün içeriğinin olduğu dosyayı buradan indirebilirsiniz. Böylece bir uygulamamızın daha sonuna geldik. Yararlı olması dileğiyle.

 2.639 Okunma

Bu yazıya 8 yorum yapılmış.

  1. Merhabalar, çok önceleri sizden ricam database bağlantısı idi, belki hatırlarsınız. Bunun için teşekkür ederim. Scripti ben çalıştıramadım. Veritabanı bağlantısı tamam olsa bile, sonuç göstermiyor. Boş sayfa döndürüyor. Örnek deneme sayfam.

    • Sitede bulunan uygulamaları ilk önce deneyip sonra yazdığım için kolay kolay hata ile karşılaşmazsınız (bazen server ve local arasında farklılıklar olabiliyor). Bu uygulamada da bir hata olmaması gerekiyor. Veritabanı dosyasının ismi, tablo ismi ve verileri bir kontrol edin. Belki siz, faklı bir veritabanının içerisine falan aktarmış olabilirsiniz.
      Bu arada unutmadan, indirme bağlantısında verdiğim sql dosyasını MySQL’de bcakir adlı veritabanının içerisine aktarmış olman lazım.

  2. çok başarılı bir uygulama, teşekkür ederim. velakin bazı kelimeler içerik aramasında bulunamıyor. örneğin; “alanından”, “işlemlerini”, “Yapacağımız” kelimeleri gibi böyle birkaç tane kelime aramada gözükmüyor. sebebi nedir acaba?

  3. index.php deki meta karakteri olarak girdim. baglanti.php deki 12.ci satırı Set character set utf8 olarak değiştirdim, sorun çözüldü.

  4. bcakir arkadaşım lütfen bana bu konuda yardımcı olablirmisin bir türlü çalıştıramıyorum ben bunu

  5. Merhaba, yaklaşık bir yıldır bu kodlarla arama yaptırıyordum, ancak şimdi veritabanıma yeni sütunlar ekledim
    Tablom
    baslik, baslik_alternatif, icerik, icerik_alternatif, yazar

    gibi diyelim, sorum şu baslik a göre ararken baslik ve baslik_alternatif ve içerik e göre ararken içerik ve içerik_alternatif te arama yaptırmak istiyorum acaba bu mümkünmü?

    emeğiniz için teşekürler

    • if ile başlık mı içerik mi diye kontrol ettirip faklı tablolarda arama yaptıracaksın sadece.

      • Cevabınız için teşekkürler, aslında denedim ama hep hata verdi.

Yazı hakkında görüşlerinizi belirtmek istermisiniz?

Daha fazla Css, MySQL, Php
Kapat