|
|
|||||||||||||
|
|
- asp teknikleri- ASP ile Web'de Veritabanı
ÜRÜN ARAMA Ürün arama sayfasının en önemli özelliği arama isteğinde, arama türünün belirtilebilmesi. Genel arama yapılabilmesi dışında, marka ve grup adına göre arama isteği gönderilebiliyor. Request koleksiyonuna dahil edebileceğimiz iki değişkenle bunu sağlayabiliyoruz. Yontem ve Deger parametrelerini sayfanın başında değerlendirmek gerekiyor. Yontem parametresi en fazla üç değer alabilir. Aşağıdaki üç değer dışında bir değer verildiğinde geçerli olarak “Ara” değerinin işlenmesi gerekiyor. Yontem = “Ara” Deger parametresi ise Yontem’e bağlı olarak herhangi bir değer alabiliyor. Fakat Yontem‘in varlık amacı bu olduğu için bu boş olduğunda diğerinin işlenmesinin bir anlamı olmayacaktır. Önce aşağıdaki kod bloğunu inceleyin. dim yontem, deger Koddaki Dim deyimi değişken tanımlama görevi yapar. Değişkenlerin yazımında hata yapma riskini azaltmak için sayfanın başında Option Explicit ifadesi kullandıysanız değişken kullanmadan önce Dim ile tanımlama yapmak gereklidir. Option Explicit ifadesi kullanmayacaksanız üstteki kodun başında Dim ile başlayan satırı yazmanıza gerek yok. Doğrudan değişkeni kullanmaya geçin. Bu sayfada Request koleksiyonundaki “yontem” ve “deger” parametrelerini kabul edebileceğimize göre sayfayı açmak için çalıştırılan şu tür bir adres kabul görecek demektir: default.asp?yontem=grup°er=televizyon Bu adresin devamında başka parametre uzantıları da olabilir. Sonuçta bunların hiçbirini kullanmak zorunda değilsiniz. Ama ne kadar parametre gelirse gelsin, bunlara Request koleksiyonundan ulaşabiliyorsunuz.
Yeri gelmişken Request koleksiyonuna eklenen tüm paramerelere nasıl ulaşacağınızı söyleyeyim. Request’in 5 alt koleksiyonu vardır ve bunlar belli bir öncelik sırasındadırlar. - QueryString Bir form ve kalabalık metin kutularının olduğu bir sayfadan Submit işleviyle yöneldiğiniz ikinci sayfadaki (Action sayfası) Request.Form koleksiyonuna önceki sayfadaki formdan elde edilen değerler yerleştirilir. Fakat default.asp?yontem=grup°er=televizyon gibi komut satırında belirtilen parametreler varsa bunlar Request.QueryString’e dahil edilirler. Biraz önceki kodda yaptığımız gibi doğrudan Request(deyim) şeklinde kullandığımızda Request nesnesi önce QueryString alt koleksiyonunu araştırır ve sonra Form koleksiyonuna bakar. Üstte yazdığım beş alt koleksiyonu aynı sırayla araştırıp değeri bulmaya çalışır. O yüzden parametrelerin komut satırından mı, yoksa form nesnesinden mi geldiğini bilmemize gerek kalmaz. Bunu küçük bir deney yaparak görebilirsiniz. Kabul.asp dosyası oluşturup Request.Form ve Request.QueryString alt koleksiyonlarındaki parametreleri listeleyin. Form nesnesinin olduğu Form.htm dosyasını oluşturup Kabul.asp dosyasına ulaşmayı deneyin. Daha sonra Kabul.asp dosyasını komut satırında parametre göndererek açmaya çalışın. Kabul.asp dosyasında olması gereken basit kod aşağıda. <% Dim gelen %>
Aşağıda kabul.asp dosyasının resimlerine bakın. Formdan bilgi gönderildiğinde Gönder düğmesinin değeri de Form kayıtlarına dahil edilir. Buradan aynı hedef sayfasına ulaşan birden fazla komut düğmesinin bulunduğu formlar oluşturabileceğinizi çıkarabilirsiniz. Evet-Hayır-İptal komutları içeren düğmeler koyabilirsiniz örneğin.
Default.asp dosyasında iken gerekli parametreleri komut satırında yani link (bağlantı) olarak göndermiştim. Bu yüzden bu sayfada Request yerine Request.QueryString koleksiyonunu kullanmam sorun değildi. Tahmin ettiğiniz gibi Request.Form kullanmamalıyım. Request ve alt koleksiyonları hakkında daha ayrıntılı bilgileri sonraki yazılarımda bulabilirsiniz. Koddaki Response.Write deyiminin sonunda sayfaya “<br>” yazdırmaya çalıştığıma dikkat edin. Bunu asp bloğundan çıkarıp doğrudan HTML bölgesinde yazmak mümkündü. Bu arada bunun HTML dilinde alt satıra geçmek için kullanıldığını bilmeyen kalmamıştır, değil mi? Zira HTML kodunda ne kadar satır koymaya çalışsanız da, bunu ya da başka bir paragraf belirtecini kullanmadan alt satıra geçilemiyor.
Default.asp dosyasında veri tablosundaki bütün kayıtları nasıl listelediğimizi hatırlıyor musunuz? Okumaya devam etmeden önce oraya bir bakın ve ürünler tablosu için aynı yöntemi kafanızda oluşturmaya çalışın. - Connection nesnesi oluştur. <% RST.Open deyiminde doğrudan tablo ya da sorgu nesnesinin adını kullanmak yerine SQL kodu yazdığımı farkettiniz mi? Çoğu zaman sizin de bu şekilde kullanmayı tercih edeceğinize eminim. Bu yüzden en basit de olsa SQL kodu yazmayı biraz
bilmeniz gerekiyor. Bu yazının konusu bu olmasa da bazı ayrıntıları bilmenizde
fayda var. SORGULAMA SEÇENEKLERİ Üstteki kodu kullandığınızda veri tablonuzdaki bütün kayıtlar listelenecektir. Buna bir sınır getirmek için arama süzgeci koyabilirsiniz, ilk baştaki belli sayıda kaydı listeleyebilirsiniz ya da bütün kayıtları sayfalar halinde listeleyebilirsiniz. Arama süzgeci koymak için birkaç yol mevcut. SQL kodunda SELECT ve FROM deyimlerinden sonra WHERE ile koşul belirtebiliyorsunuz. SELECT * FROM Urunler WHERE Grup= ‘Televizyon’ Bunu ASP kodunda nasıl yazacağınızı hatırlıyor musunuz? Rst.Open “SELECT * FROM Urunler WHERE Grup= ‘” & Deger & “’” Burada Grup adlı alan metin türünde olduğu için tırnak işareti kullanılmalı. Sayı alanlarında ise buna gerek yok. Rst.Open “SELECT * FROM Urunler WHERE ID=” & Deger Rst.Open “SELECT * FROM Urunler WHERE ID=16” Ek olarak TOP deyimi ile kayıt kümesinin başından itibaren belli sayıdaki kaydı listelersiniz. İlk 50 kayıt için şu şekilde kullanın: SELECT TOP 50 * FROM Urunler WHERE Grup= “Televizyon” TOP deyimini kullanmaya başladıktan sonra birçok kişinin soracağı soruyu tahmin edebiliyorum. “İlk baştaki kayıtları buluyor ama istenen sırada gelmiyor ki!”. Öyleyse ORDER BY deyiminden sonra sıralamak istediğiniz alanları yazın. SELECT TOP 50 * FROM Urunler WHERE Grup= “Televizyon” ORDER BY Marka, UrunAdi Ters sıralama yapmak için ORDER BY deyiminden sonraki istediğiniz alan adının sonuna DESC deyimini ekleyin. (Descending) ... ORDER BY Marka DESC, UrunAdi Ana sayfada ürünlerin grup ve marka bilgilerini
gruplandırarak adetlerini göstermiştim. Bu tür bir sorguyu yapmak için SQL’de
GROUP BY deyimi devreye giriyor. Resimdeki qMarka_Adet ve qGrup_Adet sorgularını
inceleyin. Normalde sorgu tasarımında Total (Toplamlar) adlı satır geçerli
olarak görüntülenmez. Bunun için View\Totals (Görünüm\Toplamlar) menüsünü
çalıştırın. KRİTERLERİ BELİRTİN Ürün Arama konusunda arama sayfasının Yontem ve Deger adlı parametreleri kabul ettiğini söylemiştim. Bunun için gereken SQL bilgisini de verdikten sonra arama işini yapmak için gerekli kodları yazmaya sıra geldi. - Yöntem= “marka” ise değer sadece marka alanında
aranacak. dim yontem, deger, sqlwhere KAYITLARI SAYFA SAYFA LİSTELEME Özellikle arama sitelerinde, bulunan kayıtlar yirmişer sayfalık listeler halinde gelir. Bu, bilgileri incelerken ziyaretçinin fazla vakit harcamamasını sağlar. Ayrıca tüm kayıtları göstermek genelde gereksizdir. ADO’daki RecordSet nesnesinin kayıtları sayfa halinde göstermek için gerekli özellikleri mevcut. PageSize özelliği ile her sayfada kaç kayıt gösterileceği ayarlanır. AbsolutePage özelliği ile de konumlanmak istenen sayfa numarası belirtilir. Toplam sayfa sayısı ise PageCount özelliği ile öğreniliyor. rst.open "Urunler", conn, 1, 3 Bu özelliği kullanırken Open deyiminin sonundaki 1 ve 3 parametrelerini şimdilik sürekli bulundurun. ASP sayfasında bunun işe yaraması için hangi sayfaya geçileceğine dair bir parametrenin sağlanması gerekiyor. Bu parametre, komut satırında gönderilebilir ya da Form nesnesi içinde Hidden olarak belirtilmiş bir değer olabilir. Altavista’daki gibi 1’den 10’a kadar yazılı sayfa numaralarının üzeri tıklatıldığında ilgili sayfaya gidilebilmeli. PageCount değerini öğrendikten sonra, ekrana o kadar sayfa numarası yazdırmalı ve bunların herbirinin bağlantı dizesine ilgili sayfa numarasını ve diğer parametreleri eklenmeli. AbsolutePage değeri ayarlandıktan sonra her zamanki gibi Do-Loop döngüsü ile bu sayfaya dahil tüm kayıtları listemek gerekiyor. Aslında AbsolutePage özelliğinin asıl yaptığı şey
sayfayı oluşturmak değil, sayfanın başına tekabül eden kayda gitmektir. Bu
durumda, oluşturacağınız Do-Loop döngüsünde kaydın sonunu kontrol etmekle
beraber PageSize değerinden daha fazla sayıda kayıt okunmamasını da
sağlamalısınız. Döngü içinde bir sayaç tutmak yeterli. <% Call SayfalariYaz %> ifadesini yazmanız yeterli. Gelecek sayıda Ürün sitesini geliştireceğiz. Bu arada gizli bilgilerimin güvenli olup olmadığını test etmek için http://www.eskdiefterler.com/asp/_private/urunler.mdb adresine ulaşmayı deneyin.
Sayfa 1 Sayfa2
Serkan Şahinoğlu |