Asp.Net ile Site İçi Arama Motoru Yapmak
Forumlarda bu konuyla ilgili çoğu kişi konu açmış veya açılmış olanlardan örnek vs. istemişler.Bana göre bu konu önemli bir konu ve bununla ilgili döküman, makale diğer konulara nazaran okadar sıklıkta değil.Aslında benimde fazla bir bilgim yok ama bende bu site içi arama nasıl olur onun mantığını göstermeye çalışacağım.
Öncelikle yeni bir web projesi oluşturuyoruz ve Default.aspx sayfamıza sol taraftaki toolbox dan 1 adet TextBox ve bir adet Button yerleştiriyoruz.
Daha sonra projemize yeni bir web form ekliyoruz ve bununda adını arama.aspx olarak kaydediyoruz.
Şimdi Default.aspx sayfamıza dönelim ve buttonumuza çift tıklayıp Button1_Click event ını açıyoruz. ve aşağıdaki kodu yazıyoruz.
Response.Redirect("arama.aspx?kelime=" + TextBox1.Text + "");
Burada arama.aspx sayfasına kelime adında bir parametre gönderdik ve bu parametrenin bir değeri var oda TextBox daki yazılan değer.
Tekrar arama.aspx sayfamızı açalım ve Page_Load ımıza aşağıdaki kodlarımızı sırasıyla teker teker yazalım.Açıklamasını kodların altına yazacağım.
string gelen = guv(Request.QueryString["kelime"].ToString());
QueryString ile gelen veriyi gelen adında bir stringe atıyoruz ve bunu "guv" adında bir süzgeçten geçiriyoruz.Guv nerden geldi demeyin aşağıda açıklıcam.
OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.jet.oledb.4.0; Data source=" + Server.MapPath("App_Data\\database.mdb"));
baglanti.Open();
baglanti nesnemizi oluşturuyoruz ve bağlantımızı açıyoruz.
OleDbDataAdapter adapter = new OleDbDataAdapter("Select * From makale WHERE kategoriadi and baslik and aciklama LIKE '%" + gelen.Replace("'", "'") + "%'", baglanti);
DataAdapter imizi oluşturduk ve sorgumuzu yazdık.Gördüğünüz gibi bütün incelik sorguda bitiyor.Siz isterseniz bu sorguyu dahada geliştirebilirsiniz ben bunu kullanıyorum .
DataSet Ds = new DataSet();
adapter.Fill(Ds, "Tablo");
Repeater1.DataSource = Ds;
Repeater1.DataBind();
Daha sonra yukarıdaki işlemleri yapıyoruz ve arama.aspx sayfamıza bir tane Repeater sürükleyip bırakıyoruz.
Şimdi size bu "guv" adını verdiğim süzgeçten bahsedeceğim.
public string guv(string cevir)
{
cevir = Regex.Replace(cevir, ",", "");
cevir = Regex.Replace(cevir, "/", "");
cevir = Regex.Replace(cevir, "\n", "");
cevir = Regex.Replace(cevir, "/?", "");
cevir = Regex.Replace(cevir, "/*", "");
cevir = Regex.Replace(cevir, "'", "");
cevir = Regex.Replace(cevir, "&", "");
cevir = Regex.Replace(cevir, "<", "");
cevir = Regex.Replace(cevir, ">", "");
cevir = Regex.Replace(cevir, "=", "");
return cevir;
}
Buradaki Replace 'ler tamamiyle güvenlik için yazılmıştır.Bunlarda neyin nesi diyebilirsiniz.Bknz. Sql Injection
Şimdi arama.aspx sayfanıza eklediğiniz Repeater kontrolune ekleyeceğiniz kodlardan bahsedeyim.Aslında bildiğiniz şeyler ama yinede yazalım yarım kalmasın.
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<%#Eval("baslik")%></ br>
</ItemTemplate>
<SeparatorTemplate>
<hr style="border-style: dotted none none none; border-color: #C0C0C0; border-top-width: 2px;" />
</SeparatorTemplate>
</asp:Repeater>
siz isterseniz daha fazla şeylerde listeleyebilirsiniz.
Takıldığınız bir yer olursa burdan yardımcı olmaya çalışırım başka bir makalede görüşmek dileğiyle...