ASP.Net SQL Veri Arama Hakkında

Kodla Büyü

offchu

Üye
Mesajlar
29
Merhaba arkadaşlar , Aranızda yeniyim yardımlarınızı esirgemezseniz memnun olacağım ,

ASP.NET de yazdığım ve Sql veri tabanına sahip bir projem bulunmakta , web sitemin ana sayfasında şu şekilde bir İlan Ara tablosu yapmayı düşünüyorum,



Her ilanımın bir ilanID tanımlaması mevcut , müşteri ilanID yi ilgili ilanın sayfasından görüp istediği zaman bu ilana erişim için ilan no numarası girdiğinde hızlı bir şekilde o ilana erişimi sağlanacak Bunu şu kodla sağlayabiliyorum ,

Buton Event,
PHP:
   Response.Redirect("ilanara.aspx?ilanara="+ilanno_txt.Text.Trim());

İlan Ara.aspx sorgusu,

PHP:
string aranan = Request.QueryString["ilanara"].ToString();


              SqlCommand cmdilanara = new SqlCommand("Select * from Ilan WHERE ilanID LIKE '%"+aranan+"%'", baglan.baglan());
               
              SqlDataReader drilanara = cmdilanara.ExecuteReader();

              dl_ilanara.DataSource = drilanara;
              dl_ilanara.DataBind();

Öncelikle ilk sorum şu olacak , buraya kadar her şey normal mi ? Güvenlik açısından bir problem yaşar mıyım ?.

Asıl sormak istediğim sorum ise şu , müşteri Kategori kısmından Daire, Konut tipi Kısmından Satılık veya Kiralık seçeceği zaman (Yani veri tabanından 2 seçeneğe göre veri çekilecek) sorgum nasıl olmalı ? KategoriID ve IslemID , SqL veri tabanımda tutuluyor ve her ilan için Ilan tablomda saklanıyor. Bunları buton event ine ve ilanara.aspx sorgusuna nasıl eklerim.

Yardımcı olursanız çok memnun olacağım.

İyi Forumlar dilerim.
 

Ekli dosyalar

  • 2018-02-26_100605.png
    2018-02-26_100605.png
    3.3 KB · Görüntüleme: 22
Son düzenleme:
Bu haliyle güvenli değil, kullanıcıdan alınan değeri bir filtreden geçirmelisiniz. SQL cümlesinin sonuna AND diyerek yeni kriterler ekleyebilirsiniz
 
hocam "Select * from Ilan WHERE ilanID LIKE '%"+aranan+"%'" AND ile sütun isimleriniz="şartınız" şeklinde ekleyebilirsiniz diğer kriterleri
 
hocam "Select * from Ilan WHERE ilanID LIKE '%"+aranan+"%'" AND ile sütun isimleriniz="şartınız" şeklinde ekleyebilirsiniz diğer kriterleri

Hocam yardımcı olduğunuz için teşekkürler ,

ancak sütun isimlerini=şartınız alanını anlamadım , sütunlarım ilanID,KategoriID,IslemID mesela ne yazmam gerekiyor şartınız alanına ?
Buton event 'i şöyle
PHP:
 Response.Redirect("ilanara.aspx?ilanara=" + ddl_kategori.SelectedValue.Trim() + ilanno_txt.Text.Trim() + ddl_konuttipi.SelectedValue.Trim());

Bu kod doğru mu ?

Sorgu da ise şurada kaldım

PHP:
      string gelenilan = Request.QueryString["ilanara"].ToString();

           SqlCommand cmdilanara = new SqlCommand("Select * from Ilan WHERE ilanID LIKE '%" + gelenilan + "%' AND KategoriID LIKE '%" + gelenilan + "%' AND IslemID LIKE '%" + gelenilan + "%' ,ilanID,KategoriID,IslemID=""", baglan.baglan());
            
           SqlDataReader drilanara = cmdilanara.ExecuteReader();

           dl_ilanara.DataSource = drilanara;
           dl_ilanara.DataBind();
 
hocam azıcık konuyu dağıtacağım ama bende eskiden böyle yazıyordum sql kodlarımı fakat hazır bileşenlerle daha kolay yapılabileceğini okumuştum ondan sonra kafam karışmıştı. oysaki bu şekilde sizin yazdığınız şekilde yazmak bana daha kolay geliyordu.

böyle yazmak daha verimli değil mi hocalarım?

ek olarak bootstrap mi hocam arayüz?
 
Son düzenleme:
Sorguyu parametre kullanarak yazınız. Artı ile değişkenleri toplayarak yaparsanız güvenlik açığıdır. Kullanıcı aramak istediği değer yerine bir sql kodu yazıp gönderirse sizin sorgunuzla beraber birleşip istemediğiniz sonuçlar oluşabilir.
 
hocam azıcık konuyu dağıtacağım ama bende eskiden böyle yazıyordum sql kodlarımı fakat hazır bileşenlerle daha kolay yapılabileceğini okumuştum ondan sonra kafam karışmıştı. oysaki bu şekilde sizin yazdığınız şekilde yazmak bana daha kolay geliyordu.

böyle yazmak daha verimli değil mi hocalarım?

ek olarak bootstrap mi hocam arayüz?

Visual studio da yapıyorum , kendi yorumum olarak daha verimli bulduğumu söyleyebilirim, hazır bileşenler mecut .
 
Sorguyu parametre kullanarak yazınız. Artı ile değişkenleri toplayarak yaparsanız güvenlik açığıdır. Kullanıcı aramak istediği değer yerine bir sql kodu yazıp gönderirse sizin sorgunuzla beraber birleşip istemediğiniz sonuçlar oluşabilir.

Cevabınız için teşekkür ederim , şu şekilde değiştirdim bakabilir misiniz rica etsem ,
PHP:
 DataTable dt = new DataTable();
            string gelenilan = Request.QueryString["ilanara"].ToString().Trim();;

            string sorgu = "Select * from Ilan WHERE ilanID  like '%" + gelenilan + "%'";

           SqlCommand cmdilanara = new SqlCommand(sorgu, baglan.baglan());

           cmdilanara.Parameters.AddWithValue("@ilanID",gelenilan);

           SqlDataReader drilanara = cmdilanara.ExecuteReader();

           dl_ilanara.DataSource = drilanara;
           dl_ilanara.DataBind();

bu şekilde ilan no yazdığımda istediğim bilgileri veriyor , tüm bu işlemleri diğer kriterler içinde yapacak mıyım Örnek olarak Kategori olarak Daire Konut Tipi olarak Satılık seçtiğinde ilgili ilan gelsin istiyorum bunun için yapmam gerekenler nedir ?
 
string aranan = Request.QueryString["ilanara"].ToString();


SqlCommand cmdilanara = new SqlCommand("Select * from Ilan WHERE ilanID LIKE '%"+@x+"%'", baglan.baglan());

cmdilanara.parameters.addwithvalue("x",aranan);

gibi parametreli yaparsanız sanırım açık konusunda işinizi görecektir. Tam hatırlayamadım kullanımını ama parametreli kullanım bu mantıkta oluyor.
 
Merhaba Arkadaşlar uzun süredir uğraşıyorum ama beceremedim , Problemim tam ID filtrelemesi yapmaması, mesela KategoriID si Daire olan bir ilan seçtiğimde ilan açıklamalarında,başlıkta her hangi bir yerde daire yazısı geçse dahi bunları listeliyor bu güvenlik açığını kapatmayı beceremedim. Ben, kullanıcının, KategoriID si 1, yani Daire olan ilanları seçtiğinde ve IslemID den satılık ilanları seçtiğinde bunları filtrelesin istiyorum yardımcı olabilirseniz çok sevinirim.
 
Merhaba Arkadaşlar uzun süredir uğraşıyorum ama beceremedim , Problemim tam ID filtrelemesi yapmaması, mesela KategoriID si Daire olan bir ilan seçtiğimde ilan açıklamalarında,başlıkta her hangi bir yerde daire yazısı geçse dahi bunları listeliyor bu güvenlik açığını kapatmayı beceremedim. Ben, kullanıcının, KategoriID si 1, yani Daire olan ilanları seçtiğinde ve IslemID den satılık ilanları seçtiğinde bunları filtrelesin istiyorum yardımcı olabilirseniz çok sevinirim.

Hocam Like ile sorgu oluşturduğunuz için benzer ifadeleri içeren verilerde geliyor. LIKE Daire dediğinizde içinde daire olan satılık daire de kiralık daire de sonuç olarak çevrilir. Veritabanınız nasıl bilemiyorum ama direk eşitlik deneseniz ya da satılık daire ile kiralık daireyi temsil eden bir sayınız yok mu? Mesela satılıklar 101 kiralıklar 102 gibi. bu sayıları LIKE olarak değil de direk eşitlik olarak sorgularsanız istemediğiniz kayıtlar gelmeyecektir.
 
Hocam Like ile sorgu oluşturduğunuz için benzer ifadeleri içeren verilerde geliyor. LIKE Daire dediğinizde içinde daire olan satılık daire de kiralık daire de sonuç olarak çevrilir. Veritabanınız nasıl bilemiyorum ama direk eşitlik deneseniz ya da satılık daire ile kiralık daireyi temsil eden bir sayınız yok mu? Mesela satılıklar 101 kiralıklar 102 gibi. bu sayıları LIKE olarak değil de direk eşitlik olarak sorgularsanız istemediğiniz kayıtlar gelmeyecektir.


Hocam öncelikle uyarın için çok teşekkür ederim sağolun , uzun süredir boşa çabalıyormuşum ,

Sorunuma gelince çok küçük bir ayrıntı kaldı ,tüm girdileri tek tek yazdığımda sonuca artık erişiyorum. Örnek olarak ilanID ye bir veri girdiğimde o ilanı getiriyor , Kategori seçtiğimde o kategorideki ilanları getiriyor Konut tipi satılık kiralık tek tek seçtiğimde satılık ve kiralık daireleri getiriyor . ancak Hem kategori hemde konut tipini seçince işler değişiyor her hangi bir ilan göstermiyor . Örnek olarak tarayıcı adres çubuğunun görüntüsünü de aktarıyorum istenen doğru ancak bilgi çekilmiyor.KategoriID =1 IslemID=2 olduğunda Kiralık Daire getirmesi gerekirken Satılık daireyi de getiriyor başka bir örnekle 1 tane işyeri ilanım var Kategorisi İş yeri Tipi de Satılık olsun bunu aramak istediğimde bilgi gelmiyor, yani hem kategori hemde Konut tipini seçtiğimde sapıtıyor. Sorguda sanırım küçük bir ekleme yapılması gerekiyor.

Ayrı ayrı olarak veri gönderirsem çalışan kodlar şu şekilde ,

PHP:
       string ilanno = Request.QueryString["ilanID"].ToString();
            string kategorino = Request.QueryString["KategoriID"].ToString();
            string islemno = Request.QueryString["IslemID"].ToString();

          SqlCommand cmdsonuc = new SqlCommand("SELECT * FROM Ilan where ilanID='" +ilanno + "' OR KategoriID='" +kategorino+ "' OR IslemID='" +islemno+ "'", baglan.baglan());

          SqlDataReader drsonuc = cmdsonuc.ExecuteReader();

          dl_ilanara.DataSource = drsonuc;
          dl_ilanara.DataBind();
 

Ekli dosyalar

  • 2018-03-06_095830.png
    2018-03-06_095830.png
    20 KB · Görüntüleme: 15
  • 2018-03-06_103159.png
    2018-03-06_103159.png
    25.6 KB · Görüntüleme: 15
  • 2018-03-06_103216.png
    2018-03-06_103216.png
    159.5 KB · Görüntüleme: 13
Son düzenleme:
Hocam Like ile sorgu oluşturduğunuz için benzer ifadeleri içeren verilerde geliyor. LIKE Daire dediğinizde içinde daire olan satılık daire de kiralık daire de sonuç olarak çevrilir. Veritabanınız nasıl bilemiyorum ama direk eşitlik deneseniz ya da satılık daire ile kiralık daireyi temsil eden bir sayınız yok mu? Mesela satılıklar 101 kiralıklar 102 gibi. bu sayıları LIKE olarak değil de direk eşitlik olarak sorgularsanız istemediğiniz kayıtlar gelmeyecektir.

Hocam sonunda oldu , where ortak paranteze alıp AND ile bağladım çözüldü. Çok teşekkür ederim ilginiz için arkadaşlar.

Küçük bir sorum olacak Where parantezinde and ile kaç veri bağlayabiliyorum ? Oda Sayısı İl,İlçe filtrelemesini de eklemek istiyorum
 
Son düzenleme:
Hocam sonunda oldu , where ortak paranteze alıp AND ile bağladım çözüldü. Çok teşekkür ederim ilginiz için arkadaşlar.

Küçük bir sorum olacak Where parantezinde and ile kaç veri bağlayabiliyorum ? Oda Sayısı İl,İlçe filtrelemesini de eklemek istiyorum
And ile ilgili bir sınırlama yok hocam. veritabanı yapınız şartları karşılıyorsa istediğiniz kadar AND leyebilirsiniz.
 
paylaştığınız tablolarda oda sayısı ile ilgili bir veri göremedim hocam. o yüzden birşey diyemiyorum.
 
Geri
Üst