ASP'de veritabanında gelişmiş arama sayfası mantığı

ASP'de veritabanında gelişmiş arama sayfası mantığı
ASP'de veritabanında gelişmiş arama sayfası mantığı

Merhaba arkadaşlar, şidmi veritabanında, farklı kriterlere göre farklı alanlarda arama yapma örneği yapacağız.

Veritabanında kayıt sayısının artmasıyla, istediğimiz kaydı bulmak için arama yapmamız gerekebilir, veya web sitemize/uygulamamıza arama sayfası eklememiz gerekebilir. Bir emlak scripti yazdığınızı düşünün, olmazsa olmazlarınızdan hatta bence en önemli sayfalarınızdan biri olacaktır arama sayfası.

Sitemizde arama hizmeti sunarken,

  • Başlığında "E-Posta" kelimesi geçen kodlar
  • Sadece "Asp" kategorisindeki içerikler
  • Son 15 gün içinde eklenen kayıtlar

gibi arama seçenekleri sunabiliriz.

Kodları inceledikten sonra, bu tür seçenekleri sitenizi yapısına göre dilediğiniz kadar arttırabilirsiniz.

Örneğimizde kategorilere göre haber kaydı tutan bir veritabanı üzerinde arama işlemini göreceğiz.

Öncelikle veritabanımızı hazırlayalım.

Kategoriler tablosu alanları

Kategori_ID (Otomatik Sayı)
Kategori Metin (255)

Haberler tablosu alanları

Haber_ID (Otomatik Sayı)
Kategori_ID (Sayı)
Baslik Metin (255)
Ozet (Not)
Haber_Metni (Not)

Bu örnekte Access ile tasarlanmış bir veritabanı kullanıyoruz, Mysql kullanan arkadaşlar kendilerine göre düzenleyebilirler.

Gerekli alanları ve tabloları oluşturup veritabani.mdb olarak kaydedelim.

arama_form.asp

Öncelikle arama yapılacak formu hazırlıyoruz.

Arama sayfamıza ziyaretçi, anahtar kelime girecek, bu kelime isterse sadece başlıkta, isterse sadece özet metinde, isterse sadece haber metninde, isterse her üç bölümde de aranacak. Ayrıca istediği kategorideki haberler içinde arama gibi bir seçeneği de olacak.

<%

Set Bag = Server.CreateObject("Adodb.Connection")

Bag.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source="& Server.MapPath("veritabani.mdb") &";"

Set rs = Server.CreateObject("Adodb.Recordset")

%>

<form method="get" action="ara.asp">

<table>

<tr>

<td>Anahtar Kelime</td>

<td><input type="text" name="kelime" /></td></tr>

<tr>

<td>Aranacak Yer</td>

<td><select name="yer">

<option value="hepsi">-Hepsi-</option>

<option value="baslik">Başlıklar</option>

<option value="ozet">Özetler</option>

<option value="haber">Haber Metni</option>

</select></td></tr>

<tr>

<td>Kategori</td>

<td><select name="kategori">

<option value="0">-Hepsi-</option><%

rs.Open "SELECT * FROM Kategoriler ORDER BY Kategori ASC", Bag, 1, 3

If Not rs.Eof Then

Do While Not rs.Eof %>

<option value="<%=rs("Kategori_ID")%>"><%=rs("Kategori")%></option><%

rs.Movenext

Loop

End If

rs.Close %>

</select></td></tr>

<tr>

<td>&nbsp;</td>

<td><input type="submit" value="Ara" /></td></tr>

</table>

</form>

<%

Set rs = Nothing

Bag.Close

Set Bag = Nothing

%>

Arama formumuz hazır. Bu kodları, arama_form.asp adıyla kaydedin.

Dikkat ederseniz, form yollama metodunu get yaptık. Çünkü arama sonucunun gösterildiği sayfada, sayfalama sistemi gerekebilir. Ve diğer sayfalara geçerken, arama kriterlerini de diğer sayfaya aktarmak için bunları QueryString ile taşımamız gerekir. Bunun için de gerekli olan metot get metodudur'tir. Sayfalama yapmayacağınızı düşünüyorsanız post ile de verileri alabilirsiniz. Daha temiz bir görüntü olacaktır. Ama tavsiyem her zaman get 'tir.

ara.asp

Şimdi de arama sonucunun gösterildiği sayfayı hazırlayalım.

<%

Set Bag = Server.CreateObject("Adodb.Connection")

Bag.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source="& Server.MapPath("veritabani.mdb") &";"

Set rs = Server.CreateObject("Adodb.Recordset")

strKelime = Request.Querystring("kelime")

strYer = Request.Querystring("yer")

intKategori = Request.Querystring("kategori")

SQL = "SELECT * FROM Haberler WHERE Haber_ID >0 "

'Eğer anahtar kelime yazılmışsa, ilgili yerde arama yapalım

If strKelime <>"" Then

If strYer = "baslik" Then SQL = SQL & "AND Baslik LIKE '%"& strKelime &"%' "

If strYer = "ozet" Then SQL = SQL & "AND Ozet LIKE '%"& strKelime &"%' "

If strYer = "haber" Then SQL = SQL & "AND Haber LIKE '%"& strKelime &"%' "

If strYer = "hepsi" Then SQL = SQL & "AND (Baslik LIKE '%"& strKelime &"%' OR Ozet LIKE '%"& strKelime &"%' OR Haber LIKE '%"& strKelime &"%')"

End If

'Eğer bir kategori seçilmişse, sadece o kategorideki haberlerde arama yapalım

If intKategori <>"" AND IsNumeric(intKategori) Then

SQL = SQL & "AND Kategori_ID = "& CInt(intKategori) &" "

End If

Rs.Open SQL, Bag, 1, 3

If rs.Eof Then

' Bir sonuç bulunmadıysa, sayfaya uygun bir mesaj yazalım

Response.Write "Aradığınız kriterlere uygun sonuç bulunamadı."

Else

Do While Not rs.Eof %>

<%=rs("Baslik")%>

<%=rs("Ozet")%>

<%

rs.Movenext

Loop

End If

Rs.Close

Set rs = Nothing

Bag.Close

Set Bag = Nothing

%>

Bu sayfayı ise ara.asp olarak kaydedin.

Özellikle SQL değişkeninin oluşturulduğu satırlara dikkat ederseniz, bu tür arama sayfalarının nasıl oluşturulduğunu kolayca anlayabilir, kendi sitelerinizde kendinize özgü olarak uygulayabilirsiniz.

Bugün bir iyilik yap, mesela bu yazıyı paylaş :

SİZİN İÇİN ÖNERİLEN YAZILAR

YORUMLAR

    Bu yazıya daha önce hiç yorum yapılmamış.
    İlk yorumu sen yap!

Yorum yap

Geçersiz bir mail adresi girdiniz. Lütfen tüm zorunlu alanları doldurun. *