ASP NİN MANA VE EHEMMİYETİ

ASP NİN MANA VE EHEMMİYETİ

Yetenekler yavaş yavaş yeryüzüne çıkıyor arkadaşlar. Artık internet herkesin, hepimizin oluyor farkında mısınız? Her client(istemci) aynı düzeyde erişim ve gezinim hakkına sahip. Söz ve düşünce özgürlüğü var. Kendinizi sınıf arkadaşınıza bile ifade etmekte güçlük çekerken, karşımıza dev gibi dikilen bu zahiri alemde en kolay şeyin bir “kendimi ifade edeyim” alanı (homepage derler) yaratmak olduğunu görünce şaşırmıştık.

İnsanlar HTML kullanıyorlardı eski çağlarda. Yapılan webolojik çalışmalar ve derin darbeler, Frig medeniyetinde “hypertext markup language” teriminin bilindiğini, Urartu taraflarında da HTML adlı bir canavarın varlığından şüphe edildiği gerçeklerini ortaya çıkarmıştır.

Meşhurluğu eski çağlara kadar dayanan HTML neydi peki? Sadece insanlara yazdıklarımızı, çizdiklerimizi ve beğendiğimiz site köprülerini yerleştirdiğimiz, envai çeşit editörü bulunan, utanılmasa “Nesneye Yönelik Programlama Dili” gurubuna alınacak bir çeşit kod akaidi. Excel’in içinden çıkan, Word’de tek tuşla cızılıveren tablolar HTML’de de var. Form öğeleri koyabiliyorsunuz. Yazı yazabiliyorsunuz (pes yani).

“Bu aşk fazla sana”

Aşkımız evrim geçirecek. İnsanlar daha doğrusu webmimarlar, HTML yi tek taraflı metin ve grafik öğesi olmaktan çıkarmak için çabaladılar. Microsoft’un evliyaları devreye girdiler. NT4 işletim sistemi mimarisine dayanan, Internet Information Server ‘ de çalışıp, yeni bir ekmek kapısı olacak olan ASP yi geliştirdiler.

ASP artık Türkiye’nin yeni yüzü olacak!
Herkes ASP kullanacak, herkes rahatlayacak
İŞTE SİZE ASP

Neden hep ASP diyoruz. Bunu bir açmak gerek. ASP İngilizce “Active Server Pages” tümcesinin kısaltmasıdır. İngilizce bilenler bunun “Aktif Sunucu Sayfaları” manasına geldiğini anlamıştır. Aslında Türkçesi de mantıklı geliyor insana. Sunucu tarafında işlenen sayfalar demek oluyor ASP.

Sunucu ne peki? İnternette bilgi alışverişi bakkalla müşterisi arasındaki alışverişten çok da farklı değil. İstemci (Client) talip olandır; sunucu (Server) arz edendir. Genelde internete bağlı bilgisayarlar (sizinki de muhtemelen bu genellemeye dahildir) istemci konumundadır. Bilgisayarınızın diğer insanlara, yani dünyaya sunduğu, arz ettiği bir meta yoktur. Sunucuların arz ettiği web sitelerini gezersiniz. Kendi web sitenizi oluşturursunuz, ancak kendi sitenize yine istemci olarak girersiniz. Sunan kimdir? (Hypermart, Xoom… ama asla siz değil!)

Bu sunucu-istemci ayrıntısından sonra şunu belirtelim: ASP sunucularda çalışır. Oluşturduğunuz HTML dosyalarını üzerine tıklayarak browserle görüntüleyebiliyordunuz. Çünki HTML belgeleri sadece browser tarafından yorumlanmakta. Ancak HTML nin içine yeni kodlar yazmaya başlayacağız bundan sonra. Bu kodlar ise öyle babadan kalma üzerine tıklama yöntemiyle çalışamayacak maalesef.

Şimdi gerekleri sıralayalım:

Bilgisayarınızda ASP ile çalışmak istiyorsanız bilgisayarınızda ASP yi destekleyen web server programı yüklü olmalıdır. (yani bilgisayarınız server davranışı gösterebilmelidir.) Şöyle güzel bir web-browser gerekli . (mümkünse IE tedarik edin) Metin Editörü veya herhangi bir HTML editörü bulunsun. Şimdi bu maddeleri irdeleyelim :

Birinci maddede bahsedilen server programını sizi düşündürmesin, temin edilmesi çok kolay.

Alternatifleri denenebilir yalnız ben işletim sistemi olarak Win98 ve web server olarak da Microsoft Personal Web Server (PWS) üzerinde çalışmanızı istiyorum. Amacımız ASP öğrenmek ise böylesi yeter de artar bile. Peki nerde bu PWS. Win98 CD niz var değil mi? Orada işte. CD nin ana dizinindeki addons/pws klasöründen setup.exe ile PWS yi bilgisayarınıza kurabilirsiniz. (Tabi bu işlem win98 yüklendikten sonra yapılıyor.) Artık program kura kura setup kurdu olduğuzdan size kurulumu anlatmaya gerek yok. Normal kurulum işinizi görecektir.

İkinci madde çok açık. Internet Explorer 4-5 tavsiyemdir. (“Microsoft’un dilinden ancak yine bir Microsoft anlar” mantığı…) Üçüncü maddeye ekleyeceğim bir şey var. Her ne kadar basit bir text editörü ile HTML veya ASP kodları yazılabilse de, güzel ve kullanışlı programlar kullanmak bizim de hakkımız. Ben HTML inşasında Allaire Homesite 4 (http://www.allaire.com) ve ASP kodu yazarken de EditPlus 2 (http://www.editplus.com) kullanıyorum. Homesite HTML hamallığımı en aza indiriyor ama onda ASP yazmak çok zevksiz geliyor bana. EditPlus 2 de bana göre çok güzel ve anlaşılır bir renklendirme var. Bazı yetenekleri de çok kullandığınız kod parçalarını tekrarlamaktan kurtarıyor.

Evet. Artık alet edevat hazır olduğuna göre başlayabiliriz demektir. Unutmayın, ASP ile çalışmak için sadece Personal Web Server yeterli olacaktır. Biz extradan kod yazacağımız editör tavsiye ettik.
Bir sonraki makalede PWS yi inceleyeceğiz.
PERSONAL WEB SERVER NE Kİ?

PWS Yİ KURDUN MU ?

Bu makalede Microsoft Windows 98 CD si içinde gelen Personal Web Server’dan bahsedeceğiz. Öncelikle bu programı sisteminize kurmanız gerekiyor. Basit bir kuruluma sahip. Normal kurulum bize yeterli olacaktır. Kurulumu tamamladığınızı varsayıp başlıyoruz.

GENEL MANZARA
Başlat > Programlar > Donatılar > İnternet Araçları > Personal Web Server > Personal Web Manager
ile veya C:\WINDOWS\SYSTEM\INETSRV\pws.exe ile Personal Web Manager programını açalım bakalım.

Bu program bizim Web sunucumuzu yönetmekte kulllanacağımız “manager” dir diyeceğiz. Neler yapabiliyoruz peki bununla?
Önce programın açıldıktan sonraki manzarası ve endamını görelim. İlgili resim aşağıdadır.
Yukarıdaki ekran görüntüsünde “dur” yazan butonun ne işe yaradığını açıklayalım:
Bu buton serverinizin çalışması veya durdurulması durumları arasında size geçiş yaptırıyor. Şu anda butonda dur yazıyor. Demek ki düğmeye tıklayınca serverin işleyişi duracak; bilgisayarınız sadece client olacak. Butonun üzerindeki metin ise “başlat” (bildiğimiz başlat) a dönüşecek. Bu durumda butona tekrar tıklanırsa server aktif hale gelecek. İstemci bilgisayarınız, fukara bir server haline gelecek tekrar. Butonda “dur” yazısı belirecek. Hayat bu şekilde devam edecek.

“http://mucit” ifadesi sunucunuzun aktif ana dizinidir. Web sitenizin giriş sayfası bu dizinde olmalıdır. “mucit” benim sunucumun adıdır. Buraya tıklarsanız browser açılır ve http://mucit adresini bulmaya çalışır. Sunucunuz aktif ise bulacaktır olağan olarak. Ve giriş sayfasına bakacaktır. Eğer giriş sayfanız varsa (örneğin default.asp) onu açacaktır. Burada “mucit” yerine localhost yazarsanız aynı sonuçla karşılaşırsınız.

“E:\inetpub” ifadesi, sunucunuzun aktif dizininin “fiziksel yol” udur. Yani http://localhost adresi aslında “e:\inetpub” a işaret etmektedir ve buradaki giriş sayfasını açmaktadır. Web server kurulurken c:\inetpub\wwwroot yolunu sizin ana dizininiz yapar. Bunu “gelişmiş” seçeneğiyle kolayca değiştirebilirsiniz.
GELİŞMİŞ’TEKİ SIRLAR

  1. Sanal Dizinler : Burada gördüğünüz sanal dizin ağacıdır. Sanal dizinler, bilgisayarınızın fiziksel dizinlerinden farklıdır. Adı üstünde sanal dizinlerdir. Burada birbirinden çok uzakta bulunan iki fiziksel klasörü, “home” anadizini altında sanal dizin olarak belirleyebilirsiniz. “home” ifadesi sunucunuzun ismine tekabül eder. Benim sunucumun ismi “mucit” olduğuna göre buradaki sanal dizinler, browserden http://mucit/sanal_dizin_adi şeklinde yazılarak çağrılabilir. (veya http://localhost/sanal_dizin_adi)

    Buradaki sanal dizin ağacına istediğiniz kadar sanal dizin ekleyebilirsiniz. İsterseniz ekleme işine bir göz atalım.

  2. EKLE tuşuyla yandaki pencereye ulaşırsınız. Ve buradan yeni bir sanal dizin ekleme fırsatına kavuşursunuz. Ben burada örnek olarak bilgisayarımdaki “C:\Belgelerim\cahitzarifoglu” klasörümü, “zarifoglu” adında bir sanal dizin olarak atıyorum. Erişim bölümündeki izinlere hiç dokunmuyorum. Bizim için bunlar yeterli. Tamam a tıklayıp ekle işlemini bitiriyorum. Yeni eklediğimiz klasörün, sanal dizin ağacında görünmesi lazım.
    Şu notu eklemek lazım. Sanal dizin olarak atadığınız bir fiziksel klasörün alt klasörleri, otomatik olarak sanal dizin olacaktır. Adları mı? Kendi adlarıyla aynı olacaktır. Örneğin yukarıda eklediğimiz klasörün alt dizini olan “C:\Belgelerim\cahitzarifoglu\resimler” klasörü, otomatik olarak kendini sanal dizin hissedecektir ve sanal adresi de “http://mucit/zarifoglu/resimler” olacaktır.
    Özellikler tuşu ile seçtiğiniz sanal dizinin özelliklerini değiştirmek, Kaldır tuşuyla da seçili sanal dizini kaldırmak mümkündür.
  1. Varsayılan Belgeyi Etkinleştirmek : Varsayılan belge ne demek? Browserden siteniz (http://mucit/) veya bir alt dizini (http://mucit/zarifoglu) çağrıldığında sunucu o dizinde belirli isme sahip belgeler aramaya başlar. Eğer bulursa onu browsere gönderir. İşte sunucunun otomatik olarak açmak istediği dosyalara PWS, “varsayılan belge” diyor. Yüzyıllardan beri kullanılan “varsayılan belge” lerden en meşhurları: “index.html, index.asp, default.asp, default.html, main.asp, main.html” vs… “Varsayılan belgeyi etkinleştir” seçeneği tıklanmış ise sunucu, belirtilen isimdeki dosyaları otomatik açmaya çalışır. Eğer tıklanmamış ise, böyle bir arayış içinde olmayacaktır sunucu. Biz tıklıyoruz. Altta da bir metin kutusu gözünüze çarptı değil mi?
    İşte bu metin kutusuna, canınızın istediği, yazmak isteyip de yazamadığınız varsayılan belge türlerini yazabilirsiniz. Tabi kurala uyarak: Örneğin Default.htm; Default.asp; Main.asp; anasayfa.html; babasayfa.html; paramparca.asp gibi bir varsayılan belge silsilesi yazabilirsiniz.

    4. Dizinde Göz atma : Bu seçenek tıklanırsa, ziyaretçiler web sitenizin klasörlerinin içeriklerini gözlemleme imkanına kavuşur. Tabi o klasörde varsayılan belgenin yokluğu veya varsayılan belgenin etkin omadığı durumdan bahsediyoruz. Diğer seçenek ise sunucunun günlük kaydetmesini denetliyor. (lazım olmacak yani)

SONUÇ
Nihayet PWS yi tanıdık. Kabaca PWS nin bilgisayarınızı bir WWW sunucusu haline getirdiğini tekrarlayalım.
Bizim amacımız ASP öğrenmek ve uygulamak. Tercihimizi bu yüzden ASP den anlayan bir web server programından yana yaptık. ASP Microsoft’un özgün web programlama teknolojisi, PWS ise yine Microsoft’un Win98 için geliştirdiği bir server programı (NT deki IIS’in bir beden küçüğü).

Artık bilgisayarımız ASP’den anlayan ve web dokümanlarımızı dünyaya sunan minik bir sunucu haline geldi. Bunu gözlerinizle görmek isterseniz…
İnternet’e bağlandığınız zaman IP numaranızı tespit edin. Örneğin IP niz 212.64.197.51 olsun.
Browsere 212.64.197.51 yazdığınız zaman, kendi sunucunuza konuk olursunuz. Ve varsa ana sayfanız gelir. Bunu o anda internete bağlı tüm insanlar denediğinde aynı sonucu alırlar. Yani sizin sunucunuza konuk olurlar ve ana sayfanıza ulaşırlar. Ne kadar global düşündüğümüzün farkına varın.

Bunu kullanarak, bilgisayarınızda oluşturduğunuz ama henüz web e yerleştirmediğiniz bir sitenizi, arkadaşınıza gösterip onun fikrini alabilirsiniz. Veya arkadaşınızın, sizin bilgisayarınızdan bir dosyayı (mesela bir mp3), download etmesini sağlayabilirsiniz.

PWS muhabbeti yeterli sanıyorum. Sorularınız için sitenin ASP-DIALOG bölümünü kullanabilirsiniz.

DEĞİŞKENLERİMİ KİMSEYLE DEĞİŞMEM

 

ASP Yİ YAZMAYA BAŞLAYALIM

HTML bildiğiniz varsayılıyor. Tablolama tasarım konusunda ayrı bir öneme sahiptir. Bir de ileride veritabanı ile ilişkilerimizde arayüz olarak kullanacağımız için formları ve nesnelerini iyi bilmeniz lazım.

HTML belgelerinde, HTML taglari < ile > simgeleri arasına yazılmaktaydı. Bu şekilde diğer metinlerden ayırt edilmekteydi. Yazacağımız ASP kodları ise benzer formda <% ile %> ayraçları arasına yazılacak. Sunucu bu iki ayraç arasındaki ifadelerin ASP kodu olduğunu bildiğinden bunları yürütecek ve klullanıcıya salt, ASP den arınmış HTML belgesi gönderilecek. Örneği inceleyterek bunu daha iyi anlayacağız. Aşağıdaki kodu boş bir metin belgesine kopyalayıp “ilk.asp” diye kaydedin.

  1.şekil: ilk.asp nin ham kaynak kodu
<html>
<body>
<p>Aşağıda şimdinin zamanı görüntülenecek

<%
Dim simdi ‘ değişken tanımladık
simdi = now ‘ değişkene şimdi nin zaman değerini atadık.
Response.Write <p><font color=“”red“”> & simdi & </font>
‘ ve belgeye formatlayarak yazıyoz
%>

</body>
</html>

 

ASP kodlarını ayırt etmişsinizdir. Dim ile “simdi” diye bir değişkeni deklare ediyoruz. “simdi” değişkenine now hazır zaman fonksiyonunun değerini atıyoruz (VB SCRIPT). “Response.Write” komutuyla küçük bir formatlama yapıp simdi yi belgeye yazdırıyoruz. Tek tırnak işaretinden satır sonuna kadar yazılan ifadeler, artık olmazsa olmaz olan comment (yorum) lardır. Yani sunucu buradaki deyimleri anlamaya uğraşmak yerine kaale bile almayacaktır; gülüp geçecektir. Öte yandan buradaki yorumlar istemci bilgisayara da ulaşmayacağına göre webmimarın tapulu malı olarak kabul edilebilir. Webmimar içinden geçen her şeyi satır aralarına commentler şeklinde serpiştirebilir. Kime ne? Değil mi… ASP nin bir avantajlar dünyası olduğu öyle belli ki…

Sunucu tarafında bu şekilde görünen “ilk.asp” dosyasını kaydettiğiniz sanal dizinden browser ile çağırın bakalım. Browserle çağırdığınız “ilk.asp” nin kaynağını görüntülediğinizde aşağıdaki kodu göreceksiniz. (Burada tarih ve saat olarak sizin bu sayfayı sunucudan istediğiniz “ân” ın değeri görünecektir )

  2.şekil: ilk.asp nin browserden çağrıldıktan sonraki (yorumlanmış) kaynak kodu
<html>
<body>
<p>Aşağıda şimdinin zamanı görüntülenecek

<p><font color=red>08.07.2000 16:47:19</font>

</body>
</html>

 

Gördüğünüz gibi istemci bilgisayara yazdığımız hiç bir ASP kodu gitmedi. Sadece sunucu tarafından üretilen zaman değeri geldi. Sanki biz, bu sayfa sunucudan istendiğinde belgeyi açıp elimizle o anki zamanı yazdık ve de kaydetti, kullanıcı da bunu yedi:))) Hayır.. İşte ASP teknolojisi webmimara böyle kolaylıklar getiriyor. Bir çok işi sunucuya yüklemiş oluyorsunuz. Alet işler, el övünür dostlar yalan mı?

Örnek olarak daha yukarıda verdiğim “ilk.asp” nin kaynak kodundaki sintaks renklendirmesi dikkatinizi çekmiştir. Sizce ben bunları teker teker elimle kırmızı, yeşil renklere mi boyadım? Asla! Bırakın sunucu yapsın arkadaşlar. İşi ne? Ancak öyle “yap” deyince yapılan şey değil tabi. Sizin her koşulu ve istisnayı göz önüne alıp bir plan yapmanız lazım. Ve bu planı, sunucuya anlayacağı şekilde anlatmanız lazım. İşte onun için ASP ye başvuruyoruz. İleride deyim yerindeyse sunucuyu “köle” gibi kullanmayı da öğrenecez. Helal dostlar, helal…

FORM’UNDA SAYFALAR YAZMAK

 

Form lar veritabanı ile olan ilişkilerimizde aramızdaki çöpçatan gibi bir şey olacak. (ne benzetme!) Kimi zaman veritabanından aldığımız verileri düz metin haline dökmekten başka, formdaki alanlara da dökmek isteyeceğiz. En önemlisi veritabanına web den veri basarken, formları kullanacağız. Elimiz mahkum.

Bütün bilgi girişleri formlar üzerinden gerçekleşiyor desek yalan omaz değil mi? Anketler, ziyaret defterleri, forumlar, arama sorguları… Hepsini oluşturacağımız form nesneleriyle teker teker halledeceğiz.

Bu makalede HTML formlarını ASP de nasıl amacımıza yönelik kullanırız; onu inceleyeleceğiz. Bunu için HTML nin form unsurlarını bilmeniz gerekiyor. Aşağı yukarı her HTML editöründe bu unsurlar listelenerek hazır şekilde size sunuluyor.

FORMDAN İÇERİK TALEBİ

İlk önce formlardaki elemanların içeriğini talep etmeyi öğrenelim. Bir formda çeşitli elementler bulunabilir. Bunlardan bilgi girişleri için metin kutuları (input text), metin alanları (text area), seçme kutuları (checkbox, input radio), seçim menüleri (select option) vs.. kullanılabilir. Kullanıcı karşısına dikilen bir formdaki gerekli alanlara bilgi girişi yapar ve “submit” tuşuyla formu tüm unsurlarıyla “action” özelliğinde belirtilen URL ye gönderir. “Action” özelliğine girilen bu URL bir ASP dosyası olabilir. Çünkü ASP ile gönderilen form unsurlarındaki bilgilere ulaşabiliriz. İşte burada, bir asp dosyasında form elemanlarındaki içeriğin nasıl talep edileceğini göreceğiz. Bunun için bir form barındıran HTML dokümanı oluşturalım ve “form.html” olarak kaydedelim.

  Şekil1. Form.html kaynak kodu
<html>
<body bgcolor=#FFFFFF>

<form method=post action=getform.asp>

<input type=hidden name=FormAdi value=Müşteri Anketi>
Adınız : <input type=text name=ad>
<br><br>
Cinsiyetiniz : <input type=radio name=cinsiyet value=bay> Bay
<input type=radio name=cinsiyet value=bayan> Bayan
<br><br>
İlgi Alanlarınız : <input type=checkbox name=ilgi value=muzik> Müzik
<input type=checkbox name=ilgi value=spor> Spor<br>
<input type=checkbox name=ilgi value=siyaset> Siyaset
<input type=checkbox name=ilgi value=edebiyat> Edebiyat
<br><br>
Yaş Aralığınız :
<Select name=yas>
<option value=çocuk>01-15 </option>
<option value=genç selected>16-25</option>
<option value=orta>26-46</option>
<option value=yaşlı>47-85</option>
</select>
<br><br>
Yorumunuz : <textarea name=yorum rows=6 cols=20></textarea>>>

<br><br>
<input type=submit>

</form>

</body></html>

 

Sıra form.html belgesindeki formdan bilgi talep etmeye geldim. Bu işi bir ASP dosyasıyla yapacağız. Formdan bilgi talep etmeden önce, formdaki elemanların kimliklerini (name) bilmemiz gerekir ki istediğimiz şekilde kullanalım. Bu isimleri bilmesek bile topyekün listeleyebiliriz. Ama biz şu anda bildiğimiz bir formdan bilgi çekeceğiz. Ve elemanların “name” kimliklerini bildiğimiz varsayıyoruz ki kullanıcının girdiği bilgileri (value) leri alalım.

Bir önceki sayfada verdiğimiz form.html nin kaynak kodunda, her bir form elemanın anlamlı bir adı olduğuna dikkat edin. Sırayla elemanların isimleri ve tipleri : FormAdi (hidden input), ad (text input), cinsiyet (radio input), ilgi (checkbox input), yas (option select), yorum (textarea).

Bu isimleri bildikten sonra yapacağımız şey, teker teker bu elemanların içeriğini talep etmek. Ama nasıl? Şu ifadeyle:

Request.Form(“eleman_ismi”)

Örneğin forma bilgi giren kişinin adını yazdığı “ad” kimlikli elemanın değerini Request.Form(“ad”) şeklinde isteriz. Tabi bu ifade bize bir değer getirecek, biz de bu değeri bir değişkene atayarak sayfalarda (veya oturumda, çerezde..) kullanabiliriz.

Şimdi form.html deki formdan elemanları değerlerini alan, formun “action” unda belirttiğimiz “getform.asp” nin kaynak kodunu verelim. Bu asp belgesi form.html ile aynı dizinde olsun.

  Şekil2. Getform.asp kaynak kodu
<%
‘ Değişkenler resmi geçidi
Dim FormAdi
Dim Ad
Dim Cinsiyet
Dim Ilgi
Dim Yas
Dim Yorum

‘ Form dan taleplerimiz var sırada
‘ Aldığımız değeri ilgili değişkene aktarıyoruz
FormAdi = Request.form(FormAdi)
Ad = Request.form(ad)
Cinsiyet = Request.form(cinsiyet)
Ilgi = Request.form(ilgi)
Yas = Request.form(yas)
Yorum = Request.form(yorum)

‘ İşte bu kadar. Şu anda formdaki tüm değerleri sayfamıza dahil ettik.
‘ istediğimiz yerde kullanabiliriz.
‘ Örneğin bu bilgileri bir text dosyasına yazdırabiliriz,
‘bir veritabanına ekleyebiliriz,
‘bir mail adresine gönderebiliriz
‘ biz yine bu sayfa hudutları içinde bir örnek yapalım
%>

<%
Dim Ek ‘ Kişinin adının sonuna cinsiyetine uygun bir hitap eki ilave edelim
If Cinsiyet=bay Then
Ek = Bey
Else
Ek = Hanım
End If
%>

<p><%= FormAdi%>
<p>Sayın <%= Ad%> <%= Ek%><br>
İlgi alanlarınız : <%= Ilgi%><br>
Yaş Aralığınız : <% = Yas%><br>
Yorumunuz : <%= Yorum%>

 

Yukarıda kaynak kodu verilen getform.asp dosyası ile formdaki elemanların içerdiği bilgileri kimliklerinin kullanarak (name) istedik ve de yien aynı sayfa içinde bir doğrulama (confirmation) örneğinde kullandık. Eğer bir kullanıcı form.html deki formu doldurup, gönder tuşuna bastığında forma girdiği bilgilerin görüntülendiği sayfayla karşılacaktır. Örnek:

Müşteri Anketi

Sayın Hande Ataizi Hanım
İlgi alanlarınız : edebiyat
Yaş Aralığınız : orta
Yorumunuz : Bayıldım

SORGU CÜMLECİKLERİ KULLANMAK

 

b>SORGU CÜMLECİĞİ : QueryString

ASP sayfaları kodlarken, bir sayfadan diğer bir sayfaya bilgi aktarmanın değişik yolları vardır. Bunlardan biri olan Form kullanarak bilgi geçirmeyi görmüştük. Bir diğer yol ise sorgu cümleciği kullanmaktır. Sorgu cümleciği, link vereceğimiz sayfanın URL sinin sonuna eklenen çeşitli string (katar) tipteki ifadelerdir.

Örnek : http://www.x.com/deneme.asp?telefon_numarasi=4121254

Yukarıdaki URL de belirtilen deneme.asp sayfasına “telefon_numarasi” kimliğiyle bir değer yolluyoruz. Burada değer olarak sayısal ifade yazdık gibi görünüyor. Ancak hayır! Buraya istediğiniz kadar rakam eşitleyin, yazdığınız bir string dir, yani matematiksel olarak bir anlamı yok. Bildiğimiz düz metin.

Evet, hernagi bir sayfanın URL sinin sonuna bu şekilde sorgu stringleri ekleyebiliriz. Birden fazla eklemek istersek aralara “&” işareti koyarız.

Örnek: http://www.x.com/siparis.asp?musteri_no=15&siparis_no=52 gibi.

Böylece bir sayfaya sorgu stringi yoluyla bilgi geçirme ifadesinin ne kadar kolay hazırlandığını görüyoruz. Bir de madalyanonu öteki tarafına geçelim. Yani sorgu cümlesiyle yollanan bilgileri talep edecek bir asp dosyasına ihtiyacımız olacak. Bu asp dosyasında sorgu stringini talep etmek için aşağıdaki kod kullanılır.

Request.QueryString(“eleman_adi”)

Örneğin yukarıda verdiğimiz, URL deki sorgu cümlesinden değer çeken siparis.asp dosyasında şu kodlar kullanılabilir.
Dim musteri_no, siparis_no
Musteri_no = Request.QueryString(“musteri_no”)
Siparis_no = Request.QueryString(“siparis_no”)

Bu kodun çalışmasıyla Musteri_no değişkenimize sorgu stringinden aldığımız “15” değeri, Siparis_no değişkenimize ise “52” değeri atanmıştır. Tekrar edersek bu değişkenlerdeki değerler string tiptedir. String ve Sayısal tiplerin farkı için aşağıdaki kullanımı inceleyelim: (yukarıdaki koda devam ediyoruz)
Response.Write (Musteri_no + Siparis_no)

Yukarıdaki ifade sonucu sayfaya 15 + 52 = 67 yazılacak diye beklemeyin. Bunlar string ifade olduklarından aradaki toplama işareti matematiksel toplama işlemi yapmak yerine iki stringi birleştirecektir. Ve sayfaya ‘1552’ yazılacaktır.

Bir asp belgesine sorgu cümleciği yoluyla bilgi geçirmenin yolunu öğrenmiş bulunuyoruz. Peki bu yöntemi nerelerde kullanabiliriz? Tabi ki bu yöntemi de daha çok veritabanlarıyla uğraşırken kullanacağız. Zaten anlatılan bu konularla hep veritabanı kullanımına hazırlık yapıyoruz. Sadede geldiğimizde bu yöntemleri çok kullanacağız. Örneğin veritabanından tekil kayıtlar seçerken sorgu stringi kullanmak en kullanışlı yoldur. Okuduğunuz bu web dokümanındaki yazılar da bir veritabanından çekilmiştir. Ve çekilirken de kolaylıkla görebileceğiniz gibi sorgu stringi kullanılmıştır.
BİR ÖRNEK

Sorgu stringiyle bilgi geçişine bir örnek yaparak bu bahsi kapatalım. İlk olarak basit bir html dosyası yaratacağız. Adı “sorguver.html” olsun. Kaynak kodu aşağıdadır.

  <html>
<body bgcolor=#FFFFFF>

BİR LİNKE TIKLAYINIZ<br><br>

<a href=sorgual.asp?id=01>BİRİNCİ LİNK</a><br>
<a href=sorgual.asp?id=02>İKİNCİ LİNK</a><br>
<a href=sorgual.asp?id=03>ÜÇÜNCÜ LİNK</a><br>

</body>
</html>

 

Şimdi de bu html dosyasının linklendiği sorgual.asp yi oluşturalım.

  <%
id = Request.QueryString(id)

Select Case id

Case 01
Response.Write 1. linke tıklamışsınız. Acaba aklınızdan ne geçti de tıkladınız?

Case 02
Response.Write 2. linke tıklamışsınız. Nerden bildim?

Case 03
Response.Write 4. linke tıklamışsınız. şaka şaka 3. linke tıklamışsınız

Case Else
Response.Write ya sorgu stringi girilmemiş, ya da girilmiş de bizim istediğimiz tipte olmamış.

End Select
%>

 

Çok basit bir sorgu stringi kullanımı gördük. Ancak önemli olan buradaki HTTP başlığı ile bilgiyi gönderme ve başlıktan alma yöntemini kavramaktır.

 

AH VERİTABANI AH!

 

Sıra geldi dilimizden düşmeyen veritabanı kullanmayı öğrenmeye…

Veritabanı: Veritabanlarını verilerin depolandığı tabloları barındıran dosyalar şeklinde düşünebiliriz. Tablolar ise ad, soyad, telefon gibi alanlardan (field) oluşur. Bu alanların tamamı ise bir kayıtı (record) oluşturur. Kayıt kavramı satır kavramıyla hemen hemen aynıdır. Veritabanı tablosundaki satırlara record, sütunlara field diyeceğiz.

Veritabanı dosyaları, farklı programlarla hazırlanabilir. Ancak biz burada yaygın olarak kullanılan Microsoft Access programıyla yaratılmış veritabanlarını inceleyeceğiz. Microsoft’un bu programıyla kolayca kendi spesifik veritabanı dosyanızı hazırlayabilirsiniz. (Excel de tablo hazırlamak kadar kolaydır.) Veritabanı dosyanızın uzantısı .mdb olacaktır.

Yeni bir veritabanı oluştururken yapacağınız en önemli işlem, amacınıza ve kayıtlarınıza uygun tablolar, sonra da tablolar için field (alan) lar oluşturmaktır. Ve de alanların tutacağı verilerin tipini belirlemek gerekecektir.
Örneğin yukarıdaki resimde örnek bir veritabanındaki bir tablonun kayıtları görünüyor. (Access buna verisayfası görünümü demiş). Tablonun adı da önemlidir. Diğer tablolardan adıyla ayrılacaktır. Buradaki tablomuzun adı “OrnekTablo” dur. (Microsoft Access yazısının yanında yazıyor). Ornektablo adlı tablomuzda id, AdSoyad, Adres, Telefon, Mail adlarıyla oluşturulmuş 5 tane field (alan) bulunuyor. Resimde tabloya üç adet kayıt girilmiş. “id” alanı birincil anahtar dır. Tabloya eklenen her yeni kayıtta bu alan otomatik olarak bir sayı yazılır. Diğer tablolarla, veritabanlarıyla ilişkilerde, özellikle bizim kullancağımız ASP sayfalarındaki sorgularda bu kayıt seçmek için bu tür alanları çok kullanacağız. Diğer alanlarda düz metin tipindeki alanlardır. Metin tipindeki alanlarda her kayıt en fazla 255 karakter bilgi tutabilir. Bu okuduğunuz yazı da veritabanından geliyor. Sizce 255 karakteri çoktan geçmedi mi okuduğunuz kısım. Elbette geçti. İşte bu tür uzun metin verilerinde “not” tipi veri tutan fieldlar kullanıyoruz. Eğer yukarıdaki “adres” sütunu yerine “Ozgecmis” diye bir sütun olsaydı (255 karakteri aşar değil mi bir özgeçmiş) ve biz buraya kişilerin özgeçmişlerini girseydik, Ozgecmis alanının tutacağı veri tipini access deki tasarım görünümüne gelip ilgili yerden “not” a çevirecektik. Öte yandan tarih veya saat türünde veriler girilecek bir alanın veritürünü de tarih/saat olarak seçeceğiz. Ve sayısal kayıtlar için sayı veri türü seçilmeli.
Yani oluşturduğumuz alanların veri türlerini (ikinci resimde aşağı-düşer listeyle görünen kısım) amacımıza uygun olarak belirleyeceğiz.

ALANLARDA VARSAYILAN DEĞER MESELESİ

Yeni bir kayıt eklendiğinde bazı alanlara otomatik olarak varsayılan değer atanmasını isteyebiliriz. Bunun için bir tablonun tasarım görünümüne geçin. Varsayılan değer koymak istediğiniz alanı seçin. Aşağıdaki o alanla ilgili özelliklerin ayarlandığı “genel” panelinde “varsayılan değer” yazısının karşısına istediğiniz varsayılan değeri girin. Ancak gireceğiniz değer, o alanın veri türüne uygun olmalıdır.

Örneğin sayı veri türüne sahip bir alanın varsayılan değeri “Sezen Aksu” olamaz her halde değil mi? Bu varsayılan değer özelliği tarih/saat türü alanlarda işimize çok yarayacak. tarih/saat türünde bir alanın varsayılan değerine now() yazarsanız, tabloya yeni bir kayıt eklediğinizde bu alanın değeri yani kaydı eklediğiniz an otomatikmen yazılır. Date() yazarsanız sadece eklenen tarih yazılır. Burada Visual Basic fonksiyonları geçerlidir.

Sıra örnek bir veritabanı dosyası hazırlamaya geldi. Hazırlayacağımız bu veritabanı dosyasını daha sonraki ASP ile veritabanı bağlantılarını öğreneceğimiz makalelerde kullanacağız. Sayfa 2 ye geçin ve örnek Access veritabanımızı oluşturmaya başlayalım.
NEYİN VERİSİNİ TABANLAYACAĞIZ

Bir fikir jimnastiğiyle başlıyrouz. Neyin veri tabanını yapacağız? Bizim nasıl bir veritabanına ihtiyacımız olabilir? Bunun cevabı herkes için farklı olabilir. Golcü bir kardeşimiz, attığı gollerin istatistiklerinin tutulacağı bir vt isteyebilir. Ablamız yemekler, malzemeleri, tarifleri vb., manyak kitap okuyan bir dostumuz kitapların, yazarlarının, yayınevlerinin vb. depolanacağı bir veritabanı isteyebilir. Biz burada genele hitap edecek bir veritabanı örneği hazırlayalım. Hazırlayalım ki siz de “Ahh.. ne de çok ihtiyacım vardı böyle bir veritabanına.. Ne iyi etti şu Mucit..” diyesiniz. Evet… Sürpriz. Bu akşam aldığım karara göre örnek bir arkadaş fihristi oluşturacağız. Hani yanımızda taşırız, hiç aramadığım arkadaşların telefon numaraları durur içinde. Doğum günleri, adresleri, e-kokoreç devrinde olduğumuzdan bir de e-mailleri… Ve eklenebilecek başka alanlarda arkaşdaşlarımızla, yakınlarımızla ilgili personal kayıtları barındıracağımız şahsa özel bir veritabanı. Ne hoş değil mi? Büyük ihtimal bu veritabanının sadece kendi bilgisayarımızda durması pek işimize gelmeyecek. Bunu internete atacağız. Eee.. Attıktan sonra nasıl erişeceğiz? Ama acele etmeye gerek yok. Hepsine sıra gelecek. Biz önce eli yüzü düzgün bir veritabanımızı oluşturalım değil mi? Hadi başlayalım.

BAŞLIYORUZ ÖRNEK VERİTABANINA

Sıfırdan bir veritabanı oluşturacağız. Microsoft Baba’mızdan edindiğimiz Access 2000 programını açıyoruz. Açınca karşımıza adet olduğu üzre bir takım seçenekler sunuluyor. Nazlı gelinler gibi süzülmeden hemen amacımıza uygun olan ilk seçeneği (boş acces veritabanı) işaretleyip tamam diyoruz. Bu işlemin hemen ardından Access bize “yeni veritabanı dosyası” başlığıyla zarif bir pencere çıkartıyor. (ilgili resim aşağıdadır) Amaç yeni veriatabanı dosyamız için bir dizin ve bir de isim seçmek. Dizin olarak PWS nin ana dizini olan “C:\inetpub\wwwroot” a geçelim (pws yüklü değil mi makinanızda? şayet yüklü değilse personal web server ile ilgili yazıya gidin ve yükleyin). Bu dizin içinde yeni bir alt dizin yaratalım, adını da ne verelim? Hemen heyecanlanmayın ad verme hakkı sizde değil, bende! Hayır bende de değil maalesef 🙂 İnternet üzerindeki bulundurma hizmeti veren sunucular yalnızca belirli dizinlere yazma hakkı veriyorlar. Güvenlik için tabi. Sunucun her tarafı bostan gibi ekilebilir bir alan olmuyor. Kendi bilgisayarımızda bütün dizinleri ekilebilir bostanlara çevirebiliriz. Ancak bizim amacımız yaptığımız database ye internet üzerinden erişmek. Kendi bilgisayarımızda zaten üstüne iki tıklayıp açabiliriz dosyayı. Onun için dosyalarımızı internetteki bir alana atarken geçerli “path” problemi yaşamamak için veritabanı dosyalarımızı belirli bir dizinde toplamalıyız. Şu anda okuduğunuz yazı Ewebcity nin sunucusundaki benim oluşturduğum veritabanından geliyor. Bu veritabanı ise /db klasöründe tutulmak zorunda. Biz de ayzma izni verilen klasör için db adını seçelim. Yani oluşturacağımız Access veritabanı için c:\inetpub\wwwroot\db klasörünü yaratalım ve bu dizini açalım. Ve veritabanı için bir isim belirleyelim: “kisiler.mdb” olsun. (Access veritabanı dosyaları uzantısı = mdb) Yarat tuşu bizi amacımıza ulaştıracaktır. Artık fiziksel yolu “c:\inetpub\wwwroot\db\kisiler.mdb” olan boş bir veritabanımız var. Ne mutlu. Ama boş bir veritabanı. Mutlu olmayı biraz ertelememiz daha iyi 🙂

Oluşturduğumuz boş veritabanını doldurmaya sonraki sayfada başlayacağız.
YENİ VERİ TABANIMIZ İÇİN YENİ BİR TABLO VE ALANLARINI BELİRLEYELİM

Bir Access veritabanının tablolar, sorgular, makrolar, formlar, raporlar, sayfalar gibi unsurları var. Ancak veritabanının tutacağı veriler tablolarda saklanıyor. Diğerleri tablolardaki verilerin amaca uygun olarak kullanılması için geliştirilmiş unsurlar. Bizim ilgileneceğimiz bölüm ise tabi ki tablolar. Bir veritabanında birden fazla tablo bulunabilir. Bu tamamen sizin verileri nasıl sınıflandırdığınıza bağlı olarak belirlenecek.

Biz veritabanımız için şimdilik tek tablo yaratacağız. Tabloyu yaratmak için yanda resmi görünen menüden “tasarım görünümünde tablo oluştur” u tıklıyoruz. (diğer seçenekler de kullanılabilir. biz bunu seçtik bakalım.) Karşımıza üç sütundan oluşan bir tablo çıkıyor. (1.sütun: alan adı; 2.sütun: veri türü; 3.sütun: tanım). Sizin de tahmin ettiğiniz gibi bu tablo ile kendi tablomuzda kullanacağımız alanları (field) oluşturup veri türlerini belirleyeceğiz. Tablomuzda id, ad, telefon, adres, email, icq, dogum_gunu olmak üzere 7 alanımız olsun.

Bunlardan id adlı alanı niye oluşturuyoruz diye sorarsanız sabredin derim, onu nasıl kullanacağımızı göreceğiz. Şİmdi bu alan adarını tasarım görünümünde açtığımız tablonun alan adları bölümüne yazalım. Veri türlerini de id için otomatik sayı; ad, telefon, adres, email, icq için metin; dogum_gunu için de tarih/saat olarak belirleyelim. id adlı alanın bulunduğu satıra sağ tıklayalım ve birincil anahtar komutu verelim. (satırın en sağında bir anahtar işareti belirecek) Yaptığımız işlemlerden sonraki görüntü ikinci resimdedir.

Şimdi sorun yoksa Access in araç çubuğundaki kaydet butonuna basınca program bizden yeni oluşturduğumuz tablo için bir isim soracaktır. Gelin biz buna da “kisiler” diyelim. Tama dedikten sonra tablomuz kaydedilecek. Şimdi “kisiler” adlı veritabanımızın nesnelerinin listelendiği menünün tablolar bölümünde yeni oluşturduğumuz “kisiler” tablosunun simgesi görünmekte. Üzerine çift tıklarsak “kisiler” tablomuzu “veri sayfası görünümünde” açacağız ki bu bizim çocukluktan beri bildiğimiz tablo görüntüsüdür. Excel’deki gibi veri gireceğiz. Yalnız tablomuzda hiç kayıt olmadığından sadece tek satır var ve imleç (cursor) da bu satır üzerinde. Vakit kaybetmeden ilk satırdaki alanları doldurun. Tabi id alanı kendi kendine bir numara alacak. Bu ilk kaydımız olduğu için de bu numara “1” olacak. Ben tabloya örnek olması için 4 kayıt ekledim. Resim aşağıda.
Eveeet. Veritabanımızı oluşturduk. Şimdi kaydet tuşuna basıp ortalığı temizleyelim. Artık c:\inetpub\wwwroot\db dizininde kisiler.mdb diye bir Access veritabanı dosyamız var. İlerleyen makalelerde ASP ile bu örnek veritabanını kullanarak çeşitli işlemler yapacağız. Eğer bu örnek veritabanını hazırlamaya üşendiyseniz buraya tıklayarak indirebilirsiniz (8,15 kb).

ASP İLE VERİTABANI BAĞLANTISI

 

BAĞLANMAK…

Artık “yaz aşkımız veritabanlarıyla nasıl temasa geçeceğiz” mes’elesine geldik. Gerçekten olağanüstü basit ve kısa kodlamalarla dev gibi bir veritabanını önümüzde diz çöktürecek güçteyiz. Yaşasın!

Hangi veritabanına bağlanacağız problemimiz yok çünkü önceki makalede örnek bir Access veritabanı dosyası hazırladık (kisiler.mdb). Bu dosyayı zip’ik halini buraya tıklayarak indirebilirsiniz (8,15 kb). Bağlantı muhabbetimiz bu dosya çerçevesinde olacak.

Veritabanı dosyanız “c:\inetpub\wwwroot\db” dizininde olsun. Şimdi “c:\inetpub\wwwroot” dizininde yeni bir asp dosyası yaratacağız. Kullandığınız editörü açın ve aşağıdaki kaynak kodunu kopyalayın. Sonra da vtbaglanti.asp adıyla wwwroot dizinine kaydedin.

  Şekil1. vtbaglanti.asp kaynak kodu
<%
‘ vtbaglanti.asp
‘ bu sayfada db alt dizinindeki kisiler.mdb veritabanı
‘ dosyasıyla bağlantı denemesi yapılıyor.
‘ çevreye verecemiz rahatsızlık
‘ umurumuzda deeeldir.
%>

<%
” BAĞLANTI KISMI BAŞLIYOR *****

‘ bağlanmadan önce bağlantı nesnesi oluşturmamız lazım.
‘ adını da ismail koyalım. elbet bir hatırası var.
Set ismail = Server.CreateObject(ADODB.Connection)
‘ Artık nurtopu gibi bir bağlantımız var. Adı da ismail.

‘ sonra ismail adını verdiğimiz bağlantı nesnemizle kisiler.mdb veritabanı
‘ dosyamızı açalım.
ismail.Open (DRIVER={Microsoft Access Driver (*.mdb)};DBQ= &_
Server.MapPath(db/kisiler.mdb))

‘ kisiler.db de bulunan kisiler tablosundaki tüm kayıtları almak için
‘ bir SQL lafı geliştiriyoruz. Adını da ismailinSQLi yapalım. Hatıra sürüyor.
Dim ismailinSQLi
ismailinSQLi = “Select * FROM kisiler

‘ ismailinSQL i ni kullanarak ismail adlı bağlantımızı
‘ kayitlar adıyla çalıştırıyoruz. kayitlar adını biz salladık.
‘ siz buna hatıranın sürmesi için ismailintablosu da diyebilirdiniz.
Set kayitlar = ismail.Execute (ismailinSQLi)

” BAĞLANTI KISMI BİTTİ *****
%>

<%
‘ ve kayıtları sayfaya dökelim

Dim k
k = 1
Do While Not kayitlar.eof
%>
<p><%= k %>. kişinin<br>
Adı: <%= kayitlar(ad) %><br>
Telefonu : <%= kayitlar(telefon) %><br>
E-maili : <a href=mailto: <%= kayitlar(email)%>”>
<%= kayitlar(email) %></a><br>
ICQ nosu: <%= kayitlar(icq)%><br>
Adresi : <%= kayitlar(adres) %><br>
Doğum Günü : <%= kayitlar(dogum_gunu) %><br>
<%
k = k + 1
kayitlar.movenext
Loop
%>

<%
” VE AYRILIK VAKTİ GELDİ
‘ En son açtığımız nesneyi en önce kapayarak ayrılıyoruz..

kisiler.Close
Set kisiler = Nothing

ismail.Close
Set ismail = Nothing

‘ ve ayrıldık. her şey bitti. sunucu buraya kadar sorunsuz geldiyse
‘ veritabanındaki kayıtlar html formatına dökülüp istemciye
‘ yollanmış demektir.
%>

 

Şimdi sunucu kök dizininize kaydettiğiniz bu asp dosyasını tarayıcı ile çağırın bakalım. (http://localhost/vtbaglanti.asp) Ne çıktı karşınıza?

Gördüğünüz gibi basit bu işler. Bağlantı bölümünde üçü geçmeyen kod emriyle bir veritabanındaki kayıtlara ulaşma imkanına kavuşuyoruz. Ve SQL (structured query language) sorgu lafımızla sepetimize kişiler tablosundaki tüm kayıtları dolduruyoruz.
Sonra da bu kayıtları sepet boşalıncaya kadar çalışacak bir döngüyle sayfamıza HTML taglarinin arasına döküyoruz. Ve sepetten dökme işlemi tamamlanınca sepeti sunucuya iade etmek gerekiyor (racon gereği, yoksa bi şey olmaz da). BUrada kullanılan ASP kodlarıyla ilgili ayrıntılar sonraki sayfada sizi bekliyor.
SORU İŞARETLERİ..

Önceki sayfada bir örnek veritabanı bağlantı sayfası oluşturduk. Ancak bağlantı yaparken karşımıza yeni ifadeler çıktı. Şimdi bunları inceleyelim.

set ismail = Server.CreateObject(“ADODB.Connection”)
Bu standart kod dizimiyle sunucu tarafında yeni bir nesne luşturuyoruz. ismail ifadesi dışındaki her şey standarttır. siz oluşturacağınız bağlantı nesnelerinde ismail yerine başka isimler kullanabilirsiniz. Ancak ASP geliştiriciler böyle bağlantı yaptıkları zaman ObjConn (object connection laflarının kısası) gibi kendilerince anlamlı ifadeler kullanıyorlar. Biz de NsnBag diyebiliriz. Amann. Neyse işte.. İşin geyiğine giriyor bu. Ne isim verirseniz verin (unutmayın ş,ğ,ü,İ,ı,ç,ö vb.. karakterler kullanılmıyor) çalışsın yeter.

ismail.Open (“DRIVER={Microsoft Access Driver (*.mdb)};DBQ=” &_
Server.MapPath(“db/kisiler.mdb”))
ismail adındaki bağlantı nesnemizden bir veritabanı dosyasını bizim için açması emrini veriyoruz. Dosyayı açarken bir veritabanı sürücüsü kullanıyor, o da Access. Ve dosyamızın göreceli adresini de veriyoruz. Data Source Name less (DSN siz) bir bağlantı kurduk. Yani kullandığımız veritabanının ODBC sürücülerinde takma isimle tanınır halde olmasına gerek yok. Yani ek hiç bir ayar yapmadan bu sayfa belirtilen alt dizindeki kisiler.mdb veritabanı dosyasına rahatlıkla ulaşacak. Yolunu kesenin vay haline!

ismailinSQLi = “SELECT * FROM kisiler”
Burada bir ismailinSQLi değişkenimize bir string (karakter dizisi) ataması yapıyoruz. Ancak atadığımız karakter dizisi Ankaralı Turgut’un şarkı sözlerinden farklı olarak bir anlam ifade ediyor. Değişkenimize çok çeşitli cümleler atayabilirken biz gittik “kişilerden ne var ne yok seç” mealinde bir laf dedik. Bu laf spesifik bir laf arkadaşlar. Elalem buna SQL lafı diyor. Peki SQL de ne? Bu konu ayrı bir makale konusu. (bekleyin). Buradaki SQL lafımız bir komut içeriyor: “kisiler tablosundan tüm alanları seç”.

set kayitlar = ismail.Execute (ismailinSQLi)
ismail adlı veritabanı bağlantımızı önceden belirlediğimiz SQL lafımızın direktiifi doğrultusunda çalıştırıyoruz. Biz SQL lafımızla kayıt topluluğu seçtik. Bu kayıtlara ulaşmak için de çalıştırdığımız veritabanı için kayitlar nesnesi oluşturuyoruz.

Artık kisiler.mdb veritabanındaki kisiler tablosundaki tüm kayıtlar elimizin altında. Ve cursor da ilk kaydın üzerinde. kayitlar(“ad”) dediğimiz zaman cursorun bulunduğu kaydın (satırın), ad alanına (field) ait değerini kastetmiş oluyoruz. response.write kayitlar(“email”) derseniz tablomuzdaki ilk kaydın email alanındaki değerini ([email protected]) sayfaya yazdırmış olursunuz.

Peki diğer kayıtların içeriğini nasıl yazdıracağız. Tabi ki kayıtlar arasında hareket ederek. Şu anda cursorumuz ilk kayıt üzerinde deil mi?
kayitlar.movenext komutu cursoru bir sonraki kayda atlatacak. Şu anda ikinci kayıta geldik. Yazdıracağımız alan değerleri ikinci kayıta ait olacak. Ancak böyle tek tek cursor atlatarak kayıt değerlerini yazdırırsanız sizi dokuz köyden kovarlar 😛 Çünkü az sonra gökten elma düşecek ve içinden VB SCRIPT çıkacak. Size bir önden kontrollü döngü yapısı verecek.

Do While <KOŞUL>
<YAPILACAK İŞLER>
Loop

Biz de “saol vb script” diyerek döngümüzü yapılandıracağız. Koşulumuz ne olacak? Kayıt topluluğu sonunda değilsek, yani cursor dosya sonunda değilse. Bunu anlamak için kayitlar.eof özelliğini kullanacağız. Bu özellik, eğer kayıt topluluğu sonuna gelmişsek true değeri verir bize. Aksinde false. Bizim döngümüz ise bu özellik false olduğunda yani kayıt topluluğu sonuna gelinmediğinde çalışacak. O zaman ön kontrolümüz Do While Not kayitlar.eof olacak. Döngü içinde etkin kayda ait bilgilerin yazılması için gerekli ifadeleri yazacağız. (Örn: kayitlar(“ad”)). Etkin kayıttaki içerik yazıldıktan sonra bir sonraki kayda atlamamız lazım. Kaytilar.movenext bu işe yarıyordu. Ve döngü bloğunu da Loop ile nihayetlendireceğiz.

Artık sayfamıza kayıtların içeriğini döktüğümüz için veritabanıyla işimiz kalmadı. Sunucuda açtığımız nesneleri son açtığımızdan başlayarak kapıyoruz. Şöyle ;

kisiler.close
set kisiler = nothing

ismail.close
set ismail = nothing

Nasıl? Kaptık mı bu işi…

HIZLI SQL LAFDANLIĞI

 

Ahmet Savaş’ın tanımı: “SQL (Structured Query Language) veri tabanlarındaki verileri işlemek için kullanılan yapısal sorgulama dilidir.”. Evet doğru söylüyor Ahmet Savaş. SQL dili çok fukara bir dildir. Ancak güzel işler yapan lafları vardır. Hani bazen bir çin atasözünde buluruz kendimizi. SQL da her türlü veritabanı dosyalarıyla evcil’lik oynamamızda birbirinden enfes laflarıyla bize yardımcı olan bir iletişim dilidir. Yani bir veritabanı dosyasına “Ey veritabanı! Hemen bana kisiler tablondan adı “a” ile başlayan adamların listesini uzat bakalım… Hadi ulan. Hemen şimdi. Basarım tokadı vallaa..” derseniz elde geçen tek şey avcunuzu yalamak olur. Ne der atalar? “SQL veritabanını deliğinden çıkarır”. İşte tatlı dilimiz SQL ile veritabanına emirler yağdıracağız.

SQL lafları çeşitli temel komutlardan oluşur. Bunlar SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING, UPDATE, DELETE, INSERT dir. Gördüğünüz gibi ne kadar da fakir bir dil. Biz bunlardan işimize yarayacak olanları inceleyeceğiz.

POPÜLER SQL LAFLARI

TABLODAN TÜM KAYITLARI TÜM ALANLARIYLA SEÇMEK

Yani tablonun tamamını seçmek için kullanacağımız SQL lafı şudur:
sözdizimi:

“SELECT * FROM <tablo_adi>”

TABLODAN KAYITLARI İSTEDİĞİMİZ ALANLARI SEÇMEK

söz dizimi:

“SELECT <alan_adi_1>, <alan_adi_2>, .. , <alan_adi_n> FROM <tablo_adi>”

TABLODAN BELİRLİ KAYITLARI SEÇMEK (SÜZGEÇLEME)

Örneğin tablomuzda kent diye bir alanımız var. Ve mevcut kayıtlar arasından kenti “ankara” olanları seçmek istiyoruz.
SQL lafımız:

“SELECT * FROM tablomuz WHERE kent = ‘ankara’ ”

Birden fazla koşul da süzgeç de koyabiliriz. Tablomuzda yas diye bir alan olsun. Kenti ankara olan ve yaşı 30 dan büyük olanları seçmek için SQL lafı:

“SELECT * FROM tablomuz WHERE kent=’ankara’ AND yas < 37”

Gördüğünüz gibi WHERE ifadesi bize kayıtları süzgeçleme imkanı veriyor. Burada = , > , < , <> gibi mukayese operatörleri kullanılıyor.

TABLODAN KAYITLARI SIRALI HALDE SEÇMEK

Örneğin tablomuz da kenti ‘ankara’ olanları yaş sırasında seçmek istiyoruz. Bunun için ORDER BY alan_adi yazımını kullanırız. Şunun gibi :

“SELECT * FROM tablomuz WHERE kent = ‘ankara’ ORDER BY yas”

Eğer azalan sırada seçeceksek ORDER BY alan_adi DESC yazımını kullanacağız.

SQL hakkında bilgiler sonraki sayfada devam ediyor.
TABLODAN KAYIT SİLMEK

Örneğin tablomuzdan yaşı 18 den küçük olanları silmek için SQL lafı:

“DELETE FROM tablomuz WHERE yas < 18”

LIKE KULLANARAK KAYIT SEÇİMİ YAPMAK

LIKE kullanarak tam karşılaştırma yapamadığımız alanlarla kayıt seçme imkanı elde ederiz. WHERE ifadesinde alan adından sonra kullanılan karşılaştırma operatörü yerine LIKE yazılır. Bu ifadeyle veritabanımızda arama motoru gibi bir şey bile yapabileceğiz ileride. Şimdi örnek kullanımlar görelim.

Tablomuzdan adı “A” ile başlayan müşterileri seçeceğiz.
“SELECT * FROM tablomuz WHERE musteri_adi LIKE ‘A%’ ”

Tablomuzdan yazı alanında “asp” içeren kayıtları seçeceğiz. (bir arama motoru misali)
“SELECT * FROM tablomuz WHERE yazi LIKE ‘%asp%’ ”

Evet bu temel komutlar ile yolumuza devam edeceğiz. Artık bu laflar ile veritabanımızdan istediğimiz rafinelikte kayıt seçebiliriz, silebiliriz, arayabiliriz.

HOST’ES MESELESİ

 

BEN HOST’ES İSTEREM

Evet, yerinde, son derece de makul bir istek. ASP ile geliştirdiğiniz web sayfalarınızı internete taşımak artık her yeni doğan çocuğun olduğu gibi sizin de en doğal hakkınız. Keşke size “alın hepsi sizin olsun” diyebileceğim bostan gibi bir sunucum olsaydı. Ama farkettiğiniz üzre biz de böyle köprü altı sunuculardan ulaşıyoruz size. Beleş etin yahnisine de katlanmak durumunda kalıyoruz.

BELEŞ OLSUN HA!

İnternet gibi sınırsız bir alemde bedava site alanı veren yerler azımsanamayacak kadar çok biliyorsunuz. Hepsi değişik metotlarla sunucusundan bedava alan dağıtıyor. Bir nevi amme hizmeti yapıyor gibi görünüyorlar. En azından önceden böyle söylenebilirdi. Ancak şimdi gitgide azıttılar. Bedava verdikleri sayfaları niye aldınız der gibi bir sürü reklam basıyorlar. Bir kovmadıkları kalıyor. Hatta bazıları kovuyor: DomainDLX.com. Bu arkadaşlar size Microsoft IIS 5 ile koşan (run) sunucularından taze bir yer verdiklerinde güle oynaya FTP nizi açıp belgelerinizi yerleştiriyorsunuz. Ahh… Reklamı da yokmuş derken iki gün sonra FTP niz den “kovuldun!” gibi abuk sabuk iletiler çıkmaya başlıyor. Saygıdeğer ardadaşlar sayfalarınızın yukarısına ve de aşağısına (ortası size kaldı, ne yaparsanız yapın) koyacağınız kodlarla reklamlarını yayınlamanızı istiyorlarmış meğerse. Ve altında da bir yazı : “Failure to do so WILL result in account termination!”. Evet.. Sıkıysa reklamımızı yapmayın demek bu resmen. İşte günümüzdeki bedava sunucuların çoğunluğu bu dingil ve embesil reklam anlayışı içerisinde. Güya reklamlardan para kazanıyorlar. Ancak kulanıcıların nefretini kazanmak, kazandıkları parayı bereketli kılmayacak, eminim! 🙂

Evet, derin host yaralarına fazla girmeden esas meselemiz ASP hosting e gelelim. Artık adımız gibi biliyoruz ki ASP sunucuyu köleleştiren hâkim bir teknoloji. İşte bu nedenle bu yüzden bedava ASP sunumu yapan servis hayli azınlıkta. Çoğu yer HTMLnin yanında, CGI, FRONTPAGE SE destekli bedava alanlar vadediyor. Yalnız ASP gibi bir “bela”ya yanaşmıyorlar. Karamsarlığa kapılmayın. ASP sayfalarınızı yayınlayabileceksiniz mutlaka. Sonuçta bu sitede bedava bir yerden sunuluyor. Ancak ben şunu belirtmek istedim: “Dünyada ASP teknolojisini kullanarak oluşturduğunuz sayfaları sundurabileceğiniz babayiğit servisler çok sınırlı.” Ancak bu babayiğitler tedbiri de elden bırakmamakta ısrar ediyolar. Kısıtlamalar yapıyorlar çeşitli. Ancak bu sizi yıldırmasın. Çünkü beni yıldırmadı. Bakın bu site ayaktaysa ben yıkılmamışım demektir. 🙂
ASP sayfalarımızı dünyada bulunan üç beleş servisle sunabiliriz. Bunlardan ilki, bu sitenin de sunulduğu ewebcity dir. İkincisi DomainDLX! (gıcık herifler). Ve bir de websamba.com var. Bir tane webhostme den bahsediyorlar ancak herifler katılımı durdurmuşlardı en son baktığımda. Neyse değerlendirmelere ilerleyen sayafada başlayalım.
EWEBCITY NASIL BİR VARLIK, ANLATIR MISIN BANA?

Elbette arkadaşım. Bak şimdi Ewebcity ASP scriptleri çalıştırmana izin veren bedava alan sağlayan bir servistir. Ewebcity nin en göze çarpan artısı (benim tercihim olmasına sebep) reklamsız olmasıdır. Evet, gerçekten Ewebcity’den sunduğunuz sayfalarda reklam görünmüyor. Ha. Yukarıdaki banneri soruyorsanız o benim kendi tesis ettiğim değişken banner kuşağı. Yani Ewebcity size sayfaların browserle görünen bütün alanını tahsis ediyor şimdilik. Yani sitenizin façası bozulmasına engel oluyor bu bir nebze de olsa. Reklamsız host’esimiz ewebcity deki özelliklere daha yakından bakalım.

ASP scriptleri: Evet, dedik ya izin veriyor. standart ASP nesnelerini dilediğiniz gibi kullanın.

Database Desteği: Ewebcity sadece MS ACCESS türü veritabanlarıyla işlem yapmanıza izin veriyor. Bizim için yeter de artar bile. Veritabanları kök dizinin /db adlı alt dizininde çalışabiliyor ancak. Ve bir ayrıntı: db klasöründe Access veritanı dosyaları çalışabiliyor ancak ASP scriptleri içeren sayfalara izin verilmiyor. Yani ASP sayfalarınızı “/db” dizini dışında her yerde çalıştırabiliyorsunuz, veritabanı dosyalarınız da sadece “/db” klasörü içinde kullanılabiliyor. Öte yandan asp ile yazdıracağınız text dosyaları da “/db” dizinine yazılmalı. Çünkü tahmin ettiğiniz gibi yazma izni sadece o klasöre verilmiş.

FTP Desteği: Maalesef. Ewebcity nin size en kötü sürprizlerinden biri olsa gerek bu. BU bedava servis size her ne hikmetse alanınıza FTP ile erişim hakkı vermiyor. E peki nasıl yüklenecek sayfalar? Nasıl mı? Ee golaaay! Ewebcity size hızlı mı hızlı çalışan bir file upload (doya bindirme) sayfası takdim ediyor. Bu sayfadan sunucuya bindireceğiniz dosyaları beşli postalar halinde gönderiyorsunuz. Çok dosyanız varsa sizi biraz uğraştıracak ancak hızının da FTP den daha makul olduğunu farkedeceksiniz.

MAIL BİLEŞENİ: Yine size kötü haber. Bu servis reklam koymuyor ama Web’in yaygın nimetlerinden de bizi bayağı mahrum bırakıyor. Ewebcity deki sayfalarınız mail gönderemeyen sayfalar oluyor. ASP sayfalarıyla mail göndermek sunucudaki bileşen yardımıyle oluyor. Ve size verilen bu beleş dünyada, sunucudaki mail bileşenini kullanım hakkı tanınmıyor.

SİZE VERDİĞİ URL: http://wwwX.ewebcity.com/uye_adi/ (buradaki X yerine size o anda müsait olan bir numara geliyor örneğin www4.e….)

Size gören, bakan, duyan ama konuşamayan utangaç bir site sunmak için ideal bir servis olarak tavsiye ediyorum Ewebcity yi. Adresi : http://www.ewebcity.com
DOMAINDLX: BİR NEFRET ABİDESİ

İstemeyerek de olsa bu manyak heriflerden bahsedeceğim. Çünkü “beleş” ASP host ettiklerini iddia ediyorlar. ASP yi free host eden servisler daha fazla olsaydı bu servisi göz ardı edebilirdim.
Domaindlx ana sayfası‘ na konuk olun bakalım. Sizi gayet itici bir tasarım karşılayacak. Microsoft IIS 5 kullandıklarını kocaman yazılarla haber veren bu adamlar çağdaş bir sunucu olduklarını sanıyorlar herhalde. Ancak önce basit bir HTML düzenine getirdikleri çağdışı yorumu güncellemeleri gerekiyor.

DomainDlx size bedava bir alan sunuyor. Bu alan içinde ASP nin yanında PHP de çalıştırabiliyormuşsunuz. Size verilen dizine FTP ile erişebiliyorsunuz. Veritabanı dosyalarınızı /database, sunucu taraflı script içeren sayafalarınızı da /script klasörüne yerleştirmeniz gerekiyor.

DomainDlx sizden para istemiyor ancak vereceği reklam kodlarını (iki tane, biri üste, biri alta konulacak) sayfalarınıza yerleştirmenizi “rica” ediyor. Eğer ricasını yerine getirmezseniz sizi tarlasından kovuyor.

Domaindlx de ASP nin sunucu nesnesi FileSystemObject i kullanamıyorsunuz. Bu text dosyalarıyla işlem yapamayacaksınız anlamına geliyor. Mecburen verilerinizi tabanlayacaksınız.

Domaindlx in şaşırtıcı bir özelliği var. Size sunucusundan e-mail bileşeni (persist) tahsis ediyor. Ve smtp mail göndermeç sunucusunu keyfinizce kullanabiliyorsunuz.

Ve son olarak Domaindlx in size bağışladığı köşenize tarayıcıdan http://media.domaindlx.com/evcilasp/ gibi bir URL ile ulaşıyorsunuz. Eğer arzu edenler olursa bu beleş servis hakkındaki malumatlarımızı genişletebiliriz.

HAYDİ SAMBA’YA!

Websamba da bedava ASP sunumu yapan servislerden. Ancak şu ana kadar inceleme fırsatına erişemedim. Aldığım hesapta bir sorun oluştu FTP ile ulaşamdım. Yeni hesap açtırma müracatıma da henüz yanıt gelmedi. Benim için bir muamma. Ancak sizi bu servis konusunda da aydınlatmak vazifemiz. O yüzden bu servisin kritiğini Bedavamaster‘i hazırlayan arkadaştan rica ettim. Sonraki sayfada arkadaşın Websamba hakkındaki değerlendirmesini bulacaksınız. Beni kırmadığı ve açıklayıcı bir yazı gönderdiği için kendisine çok teşekkür ederim.
WEBSAMBA VE DÜŞÜNDÜRDÜKLERİ

BedavaMaster’dan…

Oncelikle bu isi amatorce yaptiklari belli. Bu nedenle pek de ustlerine gitmek istemiyorum.
Once artilarini soyleyeyim:

+ 30 MB web alani veriyorlar.
+ Hicbir banner koymuyorlar ,
+ Dosyalarinizi FTP ile upload edebiliyorsunuz.
+ Ewebcity gibi database dosyalarini illa su dizine koyacaksin diye sart kosmuyorlar.
+ CDO mail destegi veriyor.
+ XOOM gibi hergun junk mail yollamiyor. Hatta hic mail yollamiyorlar.
+ Hizli bir servere sahipler. Bazen gercekten adi gibi samba yapiyor.

Gelelim bu arkadaslarin eksilerine.
– Tamamen amatorce (yani para kazanma amaciyla degil) bir hizmet.
– Cok kotu servis. Maillerinize cevap verirlerse kendinizi sansli sayin.
– Cogu zaman coken DNS server. “500 internal error” mesajina asina oluyorsunuz.
Diyelimki cumartesi aksami server coktu. Hapi yuttunuz. Bilinki  Pazartesi sabahi oraya biri gelip “aaaa server gumlemis yaw” deyip el atana kadar duzelmeyecektir.
– Duzenli yedek aliyoruz diyorlar, server cokunce 6 ay oncesinin  yedeklerini servere geri yukleyip sizi cildirtiyorlar.
– Yaptigim gorusmede (buyuk basariydi !) istenirse bedava domain hosting hizmetide verdiklerini belirttiler. Ancak bu yuzden 1 hafta offline kalmamiza   ragmen beceremedik.
– Kendi global.asa dosyaniza izin vermiyor.

* Sonucta veri kayiplari sizin icin onemli degilse, “Ben kendi yedegimi kendim alirim” diyorsaniz ve ikidebir coken server sizi delirtmezse Websamba su an en ideal cozumlerden biri. Tabii uye olabilirseniz. Duyduguma gore aylardir
bekleyen arkadaslar varmis. 🙂 ”
Mucit’ten not:

Websamba dan bir hesap aldım arkadaşlar. FTP ile hesaba ulaşmama rağmen boş olan dizinime bön bön bakıyorum. Çünkü permission um yok. Dosya koyamıyorum. Mükemmel! Sahiden de mükemmel…
BİRAZ VBSCRIPT (I)

 

Sevgili arkadaşlarım. ASP kodlarımızı yazarken, ister VBScript, ister Jscript olsun istediğimiz script dilini kullanabileceğimizi biliyoruz. Yani sunucu sistemin desteklediği her türlü dil kullanılabilir. İstemci tarafındaki kardeşimizin kullandığımız dille hiçbir ilgisi olmayacağından onun için hiçbir sorun teşkil etmeyecek bu. Yani kullandığı tarayıcı Netscape olmasına rağmen bizim yazdığımız VBScript ifadeleri çalışacak. Çünkü bu kodlar Netscape’in yüce huzurlarına gitmeden, sunucu tarafındaki görevli memurlar tarafından icra edilecek. Ve bu özgürlük, Netscape’nin “Ben .asp uzantılı dosyaları çağırmayacağım bundan böyle, prensiplerimi çiğneyemem” diyerek cıngar çıkarmasına kadar devam edecek.

Burada ASP sayfaları oluştururken gereksinim duyacağımız temel VBScript konularına değineceğiz. Şunu belirtmek gerekir ki bu konu hakkında söylenecek bir şey bırakmadı Hakkı Öcal Ağabey. Onun yazdığı ve sizin de aldığınızı tahmin ettiğim ASP kitapçığında mükemmel bir VBScript referansı mevcut. Yalnız biz burada bir ASP bahçesinin bahçıvanlığını yapıyorsak elbette VBScript’ten de bahsedeceğiz.

VBSCRIPT NEDİR?

En basit cevap: Microsoft’un “Visual Basic” den türettiği Javascript gibi bir scripting dilidir.
“Microsoft Visual Basic Scripting Edition, the newest member of the Visual Basic family of programming languages, brings active scripting to a wide variety of environments, including Web client scripting in Microsoft Internet Explorer and Web server scripting in Microsoft Internet Information Server.” deniliyor Microsoft’un referansında. Biz burada belirtilen ikinci ortamdaki VBSCRIPT kullanımına değineceğiz. Yani “Web server scripting in Microsoft Internet Information Server”…

1. SCRIPT DİLİ BİLDİRİM SATIRI
ASP sayfalarının en üstünde sunucuya, sayfada kullanılan Script dili hakkında bilgi verilir. VBScript kullanıldığı zaman sayfaların en üstüne
<%@ Language = “VBScript” %> yazılır. Microsoft sunucularında varsayılan script dili olarak VBScript’i kabul eder. O yüzden bu satırı yazmasanız bile PWS veya IIS sayfalarınızda VBScript dilini kullandığınızı varsayar ve buna göre davranır. Ancak JScript kullanıyorsanız <%@ Language = “JScript” %> satırını ekleyin.

2. HARF DURUMLARI
VBScript’in “letter-case” kaprisi yoktur. Yani büyük-küçük harf duyarlığına sahip değildir. “musTaFa” da yazsanız, “MUStafA” da yazsanız VBScript aynı çocuktan bahsettiğinizi anlar. Aşağıdaki ifadeler aynı çıktıyı verir:
<% Response.Write 12 div 3 %>
<% RESPONSE.WRITE 12 dIv 3 %>

3. DEĞİŞKEN BİLDİRİMİ
VBScript’te değişkenler için esneklik had safhadadır. Değişken bildirim zorunluluğu bulunmamaktadır. Ve buna bağlı olarak değişken türü bildirimi de yoktur. Değişkenlerin bildirim zorunluluğu olmaması programcıya ilk başta garip gelecekken, sonraları VBScript’e alıştıkça diğer programalama dillerinde de tanımlama yapma konsunda unutkanlaşacaktır. Yani biraz tembelliğe itmekte bu esneklik bizi. Ben değişkenlerimi tanımlamak istiyorum diyorsanız siz bilirsiniz. VBscript saygı duyacaktır. diyerek değişkeninizi tanımlayabilirsiniz. Ancak hâlâ bir zorunluluk yoktur. Bu zorunluluk, sayfaya language bildiriminden sonra ekleyeceğiniz <% Option Explicit %> satırıyla sağlanır. Artık Dim ile bir değişkeni deklare etmeden kullanmaya yeltenirseniz VBScript kulağınızı çekme hakkı kazanmıştır.

4. DEĞİŞKENLERDE VERİ TÜRLERİ
Temelde kullandığımız değişken türleri sayısal, alfa-sayısal ve mantıksal olmak üzere üçe ayrılır. Ancak her programlama dilinde karşımıza çıkan integer, real, string, boolean vs.. türü temel veri tipi tanımlamalarından yoksun bir dildir VBScript. Peki VBScript bir değişkenin hangi türde olduğunu nasıl anlar? Bunu o değişkene yaptığınız atama ile anlar. Aşağıdaki atamaları inceleyin.
degisken_1 = 15
degisken_2 = “15”
degisken_3 = “Zeytinyağlı yiyemem amaan, basma da fistan giyemem aman…”
degisken_4 = true
degisken_5 = Sen Ali Munzur, dağların kartalı, bir yanım bıçak yarası bir_
yanım sevda ve emanet kalmıştır bir köylü kızında kalbimin yarısı…
Yukarıda degisken_1’e sayısal türde bir veri atandığı için ömrünün sonuna kadar sayısal tipte değişken olacaktır. Sayılara uyguladığınız her türlü muameleye “hay hay” diyecektir. Bu atamada değişkene 15 sayısı atanıyor. Sayının tırnak arasında olmamasına dikkat edin. Durum degisken_2 de ise biraz farklı. Bu sefer yine 15 sayısı çift tırnaklar arasında degişkene atandı. degisken_2 böylece sayısal değil, alfa-sayısal bir tipte değişken oldu. Yani matematiksel işlemlere sırt çevirmiş, string fonksiyonlarıyla işlenebilir bir değişken. degisken_3 ün de aynı karakterde olduğunu kestirebildiniz. degisken_4 e de mantıksal ifadelerden true değeri atandı. (diğeri de false biliyorsunuz). Bundan böyle degisken_4 boolean tipte bir değişken olarak gezecek. Peki degisken_5 de durum ne? Bu vatan evladı, yanlış bir söz dizimi nedeniyle VBScript’in dikkatini çekecektir. Ve geçerli bir atama olmadığı için sayfa hata verecektir. String ifadelerin çift tırnak içinde belirtilmesi gerekir.
Veri türlerine sonraki sayfada devam edelim.
VARIANT VE ALT TİPLERİ
VBScript dili kendince tek veri türüne sahiptir, adı ise Variant! Variant, kullanımına göre değişik bilgi türleri içerebilen özel bir veri türüdür. Önceki sayfada örneklerini ördüğümüz gibi, değişkenin hangi alt veri türünde olduğunu sizin kullanımınız belirleyecektir. Variant’ın alt veri tipleri şunlardır: Empty, Null, Boolean, Byte, Integer, Currency, Long, Single, Double, Date, String, Object, Error. Bir değişkenin türünü öğrenmek istiyorsanız VarType fonksiyonunu kullanabilirsiniz. Bu fonksiyona değişken adını parametre olarak gönderiyorsunuz. Örnek:
<%
degisken_1 = 12
degisken_2 = “Ben sendeyim sen bendesin Rüveyda…”
degisken_3 = #08-12-2000#
response.write vartype(degisken_1) ‘sayfaya 2 yazar
response.write vartype(degisken_2) ‘sayfaya 8 yazar
response.write vartype(degisken_3) ‘sayfaya 7 yazar
%>
Gördüğünüz gibi bu fonksiyon bize anlamlı sayısal değerler veriyor. Bu sayısal değerler ne anlama geliyor? Aşağıda VBScript Variant Tip sabitlerinin listesi var.
vbEmpty 0 Uninitialized (default) ; vbNull 1 Contains no valid data ; vbInteger 2 Integer subtype ; vbLong 3 Long subtype ; vbSingle 4 Single subtype ; vbSingle 5 Double subtype ; vbCurrency 6 Currency subtype ; vbDate 7 Date subtype ; vbString 8 String subtype ; vbObject 9 Object ; vbError 10 Error subtype ; vbBoolean 11 Boolean subtype ; vbVariant 12 Variant (used only for arrays of variants) ; vbDataObject 13 Data access object ; vbDecimal 14 Decimal subtype ; vbByte 17 Byte subtype ; vbArray 8192 Array
Örnek kodumuzda sayfaya yazılan 2,7,8 rakamlarını buraya bakarak anlamlandırabilirsiniz.

ALT TİPLER ARASINDA DÖNÜŞÜMLER
Evet, buna mutlaka ihtiyacımız olacak. Variant’ın alt türleri arasında dönüşüm yapmamız için VBScript bize bir dizi fonksiyon tahsis etti. Bunlar nerede işimize yarayabilir peki? Özellikle String ve Integer tipleri arasında hızır gibi yetişecekler. Örneğin bir sorgu cümlesinden aldığınız (Request.QueryString ile) değeri matematiksel işlemlere sokamazsınız, çünkü string tiptedir. Diyelim ki sorgu cümleciğinden sayfa numarası alıyorsunuz (okuduğunuz bu sayfanın çağrılamsında bunu kullanıyoruz). Aldığınız sayfa numarasıyla da bir takım matematiksel işlemler yapmak zorundasınız. E o zaman Cint gibi bir fonksiyonla aldığınız string tipteki değeri, sayısal bir türe çeviriyorsunuz. İşte size başlıca Conversion (Dönüşüm) fonksiyonları ve kullanım biçimleri.

CInt
Ne iş yapar: Herhangi tipteki geçerli bir ifadeyi integer alt tipine dönüştürür.
Söz dizimi: CInt(ifade)
Örnek:
mystr = “12”
myint = CInt(mystr)/3 ‘myint değişkeninin değeri : 4

CStr
Ne iş yapar: Herhangi tipteki geçerli bir ifadeyi integer alt tipine dönüştürür.
Söz dizimi: CStr(ifade)
Örnek:
myint = 41
mystr = CStr(myint) + ” kere maşallah” ‘mystr değeri : “41 kere maşallah”

CDate
Ne iş yapar: Herhangi tipteki geçerli bir ifadeyi integer alt tipine dönüştürür.
Söz dizimi: CDate(ifade)
Örnek:
mystr = “Ekim 12, 1998” ‘ sunucu sistemin saat/tarihi İngilizce ise değişir.
mydate = CStr(mystr) ‘mydate değeri : 12.10.1998

Bunlarla aynı söz dizimiyle kullanılabilecek Asc, CBool, CByte, CCur, CDbl, Chr, CLng, CSng, Hex, Oct fonksiyonları da elimizin altındadır. Gerekirse aklınızda bulunsun.
BİRAZ VBSCRIPT (II)

 

DURUMLAR VE DAVRANIŞLAR

Programların en temel kabiliyeti karar verme mekanizmasıyla donatılmalarıdır. İnsan kendi kararlarını kendi verebilen bir canlıdır. Ancak bir program tasarlıyorsak, o programın karşılaşacağı durumlarda ondan karar vermesini bekleyemeyiz. Durumları göz önüne alıp, bu durumlara göre programın vereceği kararı, takınacağı tutumu biz belirlemeliyiz. Belirlemeliyiz ki yaptığımız şey program olsun.

İşte programamlara bu işleri akış kontrolleriyle yaptırırız. Akış kontrolleri, programın işaret edilen durum gerçekleştiğinde veya gerçekleşmediğinde herhangi bir davranış sergilemesini temin eder. Bu dilbilgisinde öğrendiğiniz, üniversite giriş sınavında karşınıza çıkan şart-koşul cümle türleri gibi bir şeydir. “Şunlar doğruyken şunları yapadur”, “Şunlar doğru değilken şunları yap”, “şunlar olana kadar şunları yap”, vs..

VBSCRIPT AKIŞ KONTROLLERİ

VBScript’in başlıca akış kontrolleri genel yazımlarıyla şunlardır: Do…Loop, For…Next, For Each…Next, If…Then…Else, Select Case, While…Wend. Şimdi bunları inceleyelim.

IF…THEN…ELSE KONTROLÜ

Bir ifade grubunun, bir durumun mantıksal sonucuna göre yürütülüp yürütülmemesini sağlar.
Söz Dizimi:
If [durum] Then
[İfadeler(if)]
ElseIf [baskadurum] Then
[ifadeler(elseif)]
Else
[ifadeler(else)]
End If

Örnek kullanım:
If Request.Form(“Parola”) = “Ben Parolayım” Then
Response.Write “Evet.. Parolayı Bildiniz.. ”
Else
Response.Write “Bilinemedi. Heyhât!”
End If
Örneğimizde formdan “parola” kimlikli elemanın değerinin “Ben Parolayım” string ifadesine eşit olup olmadığı kontrol ediliyor. Eğer eşitse parolanın bilindiğini, eşit değilse bilinemediğini anlatan mesajlar yazdırılıyor.

SELECT CASE KONTROLÜ

Bir ifadenin kontrol edilecek durumu ikiden fazla olduğu vakit bu kontrolün kullanılması kolaylık sağlar. Yaptığı iş IF..THEN..ELSE ile aynıdır.
Söz Dizimi:
Select Case [kontrol_edilecek_ifade]
Case [durum1]
[ifadeler1]
Case [durum2]
[ifadeler2]
Case [durumn]
[ifadelern]
Case Else
[ifadeler(else)]
End Select

Örnek kullanım:
select case hour(now)
case 8,9,10,11,12
Response.Write “Hoş Geldiniz, sitemiz emrinizdedir.”
case 13
Response.Write “Kapalıyız. Öğle yemeğine çıktık. 2 den sonra gelin”
case 14,15,16,17
Response.Write “Hoşgeldiniz, downloadlar sabah 9-10 arası yapılabilir”
case else
Response.Write “Sitemiz kapalıdır. Gece mesaisi yoktur. 8 de gelin.”
end select
Örneğimizde kendine mesai saatleri dışında çalışmama kararı almış bir web sitesinde kullanılabilecek SELECT CASE kontrolü yapılıyor. Saatin durumuna göre gelen ziyaretçiye bir şeyler söyleniyor. Örnek geliştirilip, saatin durmuna göre farklı sayfalara yünlendirilmesi sağlanabilir. (response.redirect “sayfa_ismi.html” metoduyla)
DO…LOOP DÖNGÜ YAPISI

Bir koşul doğruyken veya doğru olana dek belli bir kod bloğunun tekrarlanarak yürütülmesini sağlar. “Durum kontrollü döngü” de denilebilir.
Söz Dizimi:
Do While|Until [kontrol_edilecek_durum]
[yapılacak_işler]
Loop
Döngü içindeki ifadeler, “Do” ifadesi “While” ile kullanılırsa koşul doğruyken, “Until” ile kullanılırsa koşul doğru olana dek yürütülür.

Örnek kullanım:
Do While Not KayitKumesi.EOF
Response.write “<p>” & KayitKumesi(“email”) & “</p>”
KayitKumesi.Movenext
Loop
Veritabanından seçtiğimiz kayıtlarla oluşturduğumuz kayıtkümesinin “email” adlı alanındaki tüm kayıtlara ait değerleri bu döngü yapısıyla sayfaya yazdırabiliriz. Burada koyduğumuz koşul: “KayıtKümesi sonunda olunmaması” (Not KayitKUmesi.EOF). Bu koşul doğru olduğu sürece döngü işleyecektir. Ancak döngü içindeki ifadede KayitKumesi.Movenext metodu gözünüze çarpacak. Bu kayitkümesinde bir sonraki kayda geçmemizi sağlayan metoddur. Eğer bunu yazmazsanız döngü sayfaya hep aynı kaydın “email” alanındaki değeri yazacak, yani sonsuz döngüye girilecektir. Çünkü kayitkümesi hiç bir zaman dosya sonuna gelmeyecektir. Döngülerde bu tür durumlara dikkat etmeliyiz.

İsterseniz bir de “Until” ile örnek yapalım.
Do Until a>=10
Response.Write a & “<br>”
a = a +1
Loop
UNTIL deki tek fark, döngünün girişte değil çıkışta kontrol yapmasıdır. Yani burada “a” değişkenindeki değer 10’a büyük-eşit olsa bile programın akışı döngüye bir kez girer girer. Yani ifadeler bir kez işlenir, döngü çıkışında kontrol yapılır.

FOR..NEXT DÖNGÜ YAPISI

Bu döngü yapısı DO..LOOP un özel bir şeklidir. Bir ifade bloğunun, belirlenen sayı kadar yürütülmesini sağlar. Durum kontrolü yoktur. Bu döngüyle yapılan her şey, DO..LOOP ile de yapılabilir.
Söz Dizimi:
For [sayaç_değişkeni] = [ilk_değer] To [son_değer] Step [adım_sayısı]
[yapılacak_işler]
Next
“Step” den döngümüzde sayacın artış adımını belirliyoruz. Eğer sayaç birer birer artacaksa buraya “Step 1” yazmaya gerek yoktur.

Örnek kullanım:(Örneği Hakkı Ağabey’den aldım)
Dim Gunler
Gunler = Array(“Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cuma”, “Cumartesi”, “Pazar”)
For sayac = 0 to 6
Response.Write Gunler(sayac)
Response.Write “<BR>”
Next
Bir dizi tanımlayıp, FOR..NEXT döngüsüyle, dizinin elemanlarını yazdırıyoruz. Yazdırma işleminde sayaç olarak belirledğiniz “sayac” değişkenini Gunler dizisinin elemanlarına ulaşmak için indis olarak kullanıyoruz.
FOR EACH…NEXT DÖNGÜ YAPISI

Bir ifade bloğunu, belli bir dizi veya kolleksiyondaki herbir eleman için tekrar eder.
Söz Dizimi:
For Each [eleman_değişkeni] In [topluluk]
[yapılacak_işler]
Next
Eleman değişkenini siz belirlersiniz. Topluluk yerine bir dizi veya kolleksiyon adı gelir.

Örnek kullanım (Önceki sayfadaki For..Next örneğinden uyarlandı ):
Dim Gunler
Gunler = Array(“Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cuma”, “Cumartesi”, “Pazar”)
For Each gun In Gunler
Response.Write gun
Response.Write “<BR>”
Next
Bu döngü, FOR..NEXT örneğindeki kullanımla aynı sonucu verecektir. Sayfaya yine dizideki elemanlar sırayla yazdırılacaktır.

Dizilerden sonra kolleksiyonlarla kullanımına örnek yapalım.
For Each eleman in Request.form
Response.Write eleman & ” : ”
Response.Write Request.Form(eleman) & “<br>”
Next
Bir HTML formunun yönlendiği sayfada kullanılabilecek bir kullanım. ASP nin Request.Form kolleksiyonundaki her elemanın adını ve değerini sayfaya yazıyor.

WHILE…WEND DÖNGÜ YAPISI

Bu döngü yapısı da DO..LOOP un özel ve basit şeklidir.
Söz Dizimi:
While [durum]
[yapılacak_işler]
Wend

SİTEDE OTURANLARIN SAYISI

 

EY ORADAKİLER! KAÇ KİŞİSİNİZ… TEKER TEKER GELİN

Evet, sitenizin ASP ile akıl küpü haline geldiğine en güzel örneklerden birisi sitede gezinen insanları saymaktır. Bunu saymak ASP için çok basit bir iştir. ASP adeta sunucunun nazlı gelini olduğundan istediği her türlü ayrıcalığı elde etmektedir.

ASP nin yerleşik nesneleri arasında iki tane yakışıklı nesne vardır: Application ve Session. ASP nin öyle bir gözü vardır ki bizim gördüklerimizi o farklı görmeye çalışır. Örneğin biz bir web sitesine “web sitesi” gözüyle bakarken, ASP onun bir uygulama (application) – yani bir program – olduğunu savunur. Ve siteye girenler de ona göre söz edilen uygulamayı kullananlardır. Öte yandan ASP, siteyi giren her kişi için ayrı bir “oturum” (session) başlatır. Ve çıkarken de bu oturumu sonlandırır. Ve kullanıcının bu oturum boyunca yaptığı her işten haberi olur. Adeta onun arkasında dolaşıp “Ne yapıyor bu çocuk, öğrenmezsem çatlarım ayy” diyen bir Meraklı Melahat profili çizer. ASP nin bu yeneteği, onu çok çekici kılar. Site tasarımcısının yüreğinde yangınlar çıkarır bu ASP…

“Application” nesnesi bir uygulamadaki “oturum”lar arasında bilgi paylaşımı yapabilir. “Session” nesnesi ise bir oturum boyunca bilgi tutabilir. ASP nin bu iki yerleşik nesnesi ile yapılabilecek bir çok güzellik mevcuttur. Biz bu yazıda “sitedekileri saymak”tan bahsedelim.

Sitedeki adamları saymak için “Application” la muhabbet etmemiz lazım. Bu muhabbeti de global.asa yerleşik dosyasında yapmamız lazım.

GLOBAL.ASA

Microsoft der ki:
” Global.asa dosyası, içinde olay komut dosyalarını belirtebileceğiniz ve oturum veya uygulama kapsamı içeren nesneleri bildirebileceğiniz, seçime bağlı bir dosyadır. Bu dosya kullanıcılara görüntülenen bir içerik dosyası değildir; uygulama tarafından genel olarak kullanılan olay bilgilerini ve nesneleri saklar. Dosyanın Global.asa olarak adlandırılması ve uygulamanın kök dizininde saklanması gerekir. Bir uygulamanın tek bir Global.asa dosyası olabilir. ”

Bu dosya, sitenize giren “oturum” cu için oturum başlamadan önce çalıştırılan uygulamadır. (Active Server Application). PWS ile oluşturulan C:\inetpub\wwwroot dizinine baktığınızda bu dosya size göz kırpacaktır. PWS sisteminiz global.asa kullanımını destekler. Ancak her yer insanın evi gibi değildir. Gittiğiniz bedava hizmet veren bir sunucu size global‘ini bırak da gel derse şaşırmayın. Nitekim bu yazıyı okuduğunuz sitenin ev ve yurt sahibi Ewebcity, global.asa kullanımını desteklememektedir. Ancak ücretli ASP bulundurması yapan yerlerde bu kullanıma izin vardır. Bu işi sitenizde denemeden önce sunucunuzun global.asa ile barışık olduğundan emin olun.

Dedik ya global.asa lazım bize diye. C:\inetpub\wwwroot\global.asa dosyasını düzenlemek için açtığınızda karşınızda (eğer daha önce değiştirmediyseniz) aşağıdaki içerik gelecek.

  Orijinal global.asa kaynak kodu
<OBJECT RUNAT=Server SCOPE=Session ID=MyInfo PROGID=MSWC.MyInfo>

</OBJECT>

 

Şimdi bu dosyaya yeni bir koıd grubu ekleyeceğiz. Dosyanın son hali aşağıdaki gibi olacak. Ve kaydedeceğiz. (Bu işlemleri kendi kişisel sunucunuzda denediğinizi varsayıyorum.)

  Değişmiş global.asa kaynak kodu
<OBJECT RUNAT=Server SCOPE=Session ID=MyInfo PROGID=MSWC.MyInfo>

</OBJECT>

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Application_OnStart
‘Oturum başlarken sayaç 0 olsun.
Application(aktif_oturan_sayisi) = 0
End Sub

Sub Session_OnStart ‘ bir oturum başlarken
‘ Oturum bitme süresi belirle.. ihtiyaç varsa
Session.Timeout = 20
‘ Oturum başladığı an başlasın… (ne cümle oldu ama)
Session(Start) = Now
‘ Uygulamadki aktif adam sayısını artır
Application.Lock ‘kontrolü ele al, istemciler için uygulamayı kilitle
Application(aktif_oturan_sayisi) = Application(aktif_oturan_sayisi) + 1
Application.UnLock
End Sub

Sub Session_OnEnd ‘ bir oturum biterken
‘ Ugulamadaki aktif adam sayısını düşür
Application.Lock
Application(aktif_oturan_sayisi) = Application(aktif_oturan_sayisi) – 1
Application.UnLock
End Sub

</SCRIPT>

 

Evet.. Yapacağımız en önemli ve en büyük iş buydu. Artık global.asa sayesinde siteye oturmak için diz çöken biri görülürse uygulamada tutulan sayaç bir artırılacak. Siteden ayrılan bir vatandaş farkedilirse sayaç bir azaltılacak. Bu şekilde sitede oturanların sayısı dinamik olarak tespit edilecek. Dikkat ederseniz sayaç değişkenimizi Application nesnesi içinde tutuyoruz.
Sayaç değişkenimiz: Application(“sitede_oturan_sayisi”) . Böylelikle bu değişkendeki değer, o sitedeki tüm oturumlarda kullanılabilir hale getirilmiş oluyor. Yani oturumlar üstü bir değişken oluyor bu. Şimdi sitedeki herhangi bir sayfada (ki bu genelde ana sayfadır) bu değişkenin değerini görüntülemek gerekecek. İşte test.asp. Bu dosyayı herhangi bir konuma kaydedin.

  Test.asp kaynak kodu
<HTML>
<HEAD>
<TITLE>Active Sessions</TITLE>
</HEAD>
<BODY>

<B>Şu anda sitemizde <FONT COLOR=#CC0000>
<%= Application(aktif_oturan_sayisi) %></FONT> kişi oturuyor.</B>

</BODY>
</HTML>

 

Şimdi bu sayfayı tarayıcınız ile çağırın. (Örnek: http://localhost/test.asp). Karşınıza şu metin çıkacak:
“Şu anda sitemizde 1 kişi oturuyor.” .
Ve bu kişi de sizsiniz. Durumu internete bağlı olduğunuz zaman hatta olan bir arkadaşınızın da bu sayfaya girmesini sağlayarak tekrar deneyebilirsiniz. (Bir not. global.asa desteği veren sunucunuzda denemek istiyorsanız: global.asa yı sitenizin ilk açılan sayfasının olduğu dizine atın.)

İncir çekirdeğini doldurmayan bir kaç işlemle sitedeki adamları sayabilir konuma geldik. Ziyaretçilerini şaşırtmayı seven webmimarlar için… ASP hepimize yeter.

FORMDAN VERİTABANI İSTİKAMETİNE GİDEN KAYITLAR

 

Evet, bugüne değin bir çok konu hakkında söylemler yansıttık. Daha önce veritabanındaki kayıtları sayfamıza nasıl dökeceğimizi görmüştük. Şimdi bu işin daha ileri kısmı olan, veritabanına kayıt geçirmeye bakalım. Önce bize kayıt ekleyeceğimiz bir veritabanı dosyası gerekecek. Tahmin ettiğiniz gibi (ve her yemek tarifi programında olduğu gibi), vakit ve emek kazanmak açısından bu dosyamız hazır bir şekilde bizi bekliyor. Bu Access dosyasını daha önceki “Ah veritabanı..Ah.. ” başlıklı makale boyunca hazırlamıştık (kisiler.mdb). Bu dosyayı zip’ik halini buraya tıklayarak indirebilirsiniz (8,15 kb). (bu dosyayı wwwroot/db/ konumuna yerleştirin.) Bu bir örnek olacaktır. Buradaki kayıt ekleme mantığını kendi oluşturduğunuz veritabanı dosyalarına kolaylıkla taşıyabilirsiniz.

VERİTABANINDAKİ TABLO VE ALANLARIN DURUMU

Veritabanına kayıt ekleyeceğimize göre, veritabanımızdaki tablo(lar) ve alanları hakkında bigi sahibi olmamız gerekir. Yoksa veriyi nereye göndereceğimizden habersiz bir kişi oluruz. Elinizde bulunan kisiler.mdb dosyasında bir adet tablo var. Adı: “kisiler”. Kisiler tablosundaki alanlar ise şunlar: id, ad, telefon, adres, email, icq, dogum_gunu. Kayıt eklerken bu alanlardan hepsini doldurmak zorunda olmayabiliriz. Yalnız “id” kısmı birincil anahtardır. Buraya veri giremeyiz. Çünkü bu haylaz bölümdeki sayılar kendi kendine başına buyruk olarak artacaktır. Yeni bir kayıt eklendiğinde, bu alana mevcut kayıt için otomatik sayı atanacak ve başka hiç bir kayıt bu sayıyı alamayacaktır. Yani bu kayıtların benzersiz olmasını sağlayacaktır. Biz suçluları kulağından tutarken, kayıtları da ‘id’ sinden tutup kaldıracağız. Karşımıza bir kayıt çıkarsa: “Önce id ni söyle, sonra konuş… yoksa seni dinleyemem” diye ağırlığımızı da koyacağız. Neticede “id” alanı dışında tüm alanlara veri ekleyebiliriz.

Evet.. Artık ön muhabbeti tamamladığımızı sanıyorum. Şimdi kolları sıvayın bakalım. Doğuştan edindiğiniz HTML bilgilerinizle form barındıran bir doküman üretin. Uzantısı şimdilik .html olsun. İleride içinde ASP kodu kullanmak isterseniz .asp yaparsınız. HTML formunu oluştururken, seçtiğiniz elemanlar, tablodaki kayıtların veri türüne uygun olsun. Örneğin metin, sayı, tarih türündeki alanlar için text input, not türündeki alanlar için textarea, evet-hayır tipindeki alanlar için de checkbox form elemanlarını kullanabilirsiniz. Örneğimizde tüm alanlar için text input kullanmak uygun. Bakalım şu form.html ye. (dosya konumu: wwwroot/form.html olsun)

  Form.html kaynak kodu
<html>
<head>
<title> FORM.HTML </title>
</head>

<body bgcolor=#FFFFFF>

<h2>YENİ KAYIT EKLEME FORMU</h2>

<form method=post action=kayit_ekle.asp>

Ad : <input type=text name=ad><br><br>
Telefon : <input type=text name=telefon><br><br>
Adres : <input type=text name=adres><br><br>
ICQ : <input type=text name=icq><br><br>
Email : <input type=text name=email><br><br>
Doğum Günü (gg/aa/yyyy) : <input type=text name=dgunu><br><br>
<br>
<input type=submit value=EKLE>

</form>

</body>
</html>

 

Form sayfamızı oluşturduk. Dikkat ederseniz formumuzdaki elemanların hepsi text input (metin kutusu) ve kimlikleri de (name) tablomuzdaki alanlarla eş isimler. Böyle olmak zorunda değil elbette. Siz ilk metin kutusunun kimliğini “ad” yerine “ey_sevdigim_bir_gun_bana_yar_demedin” derseniz sizin bileceğiniz iş. Kolaylık, kolaylıktır.

Formun “action” özelliğinde “kayit_ekle.asp” ye işaret ediliyor. Oysa böyle bir dosya yok ki. Birazadan olacak. Sayfayı çevirin.
KAYIT EKLEYEN ASP DOSYASI

Formdaki bilgilerin teslim edileceği kayit_ekle.asp yi inşa edeceğiz. Buı dosya içinde ne gibi işlemler yapacağız sizce? İşimiz formdan kimlikleriyle elemanların içerdiği bilgileri isteyeceğiz. Bu bilgileri sayfa içindeki değişkenlerimizde tutacağız tabi ki. Sonra eğer gerekli görülüyorsa bir takım değer kontorlleri yapacağız. Örneğin ad kısmına mutlaka bir şey girilmesini istiyorsak veya geçerli bir email adresi girilsin şartı varsa… Tüm bunları scriptimiz içinde kontrol işini tamamladıktan sonra asıl önemli kısma geleceğiz. Veritabanı bağlantısı yapılıp bir kayıt kümesi oluşturulacak. Yeni kayıt eklenip alanlara formdan alınan uygun veriler doldurulacak ve de tablo güncellenecek. Her şey bu kadar. Sonuçta veritabanına formdan alınan bilgiler eklenmiş olacak. Ki bu da işimizi hallettiğimiz anlamına gelecek.

  kayit_ekle.asp
<%
‘ Eğer bu sayfaya birisi direk URL yi yazarak ulaşmaya çalıştıysa
‘ bunu form dan bilgi gönderilip gönderilmediğine bakarak anlayabiliriz.
Dim metod
metod = Request.ServerVariables(REQUEST_METHOD)
If strcomp(metod, POST, vbtextcompare) <> 0 Then
mesaj = Hayır.. Bu dosya formundan başkasına iş yapmaz.
Vatandasi_Uyar mesaj ‘ uyarı mesajı ver.
Response.end ‘yanıtı kes
End If

‘ değişkenlerimiz kundakta…
Dim ad, adres, telefon, icq, email, dgunu

‘ formdaki elemanların değerleri değişkenlerimize atanıyor
ad = trim(Request.form(ad))
icq = trim(Request.form(icq))
adres = trim(Request.form(adres))
telefon = trim(Request.form(telefon))
email = trim(Request.form(email))
dgunu = trim(Request.form(dgunu))

‘ bir kontrol yapalım ha.. ne dersiniz?
‘ vatandaş bazı alanları doldurmazsa biz de devam etmeyiz yolumuza
‘ eğer ad, adres veya doğum günü belirtilmemişse..
If Len( ad)=0 Or Len( dgunu)=0 Or Len( adres)=0 Or Not isdate(dgunu) Then
Dim mesaj
mesaj = Lütfen ad, adres ve doğum günü kutularını adam gibi doldurun
mesaj = mesaj & <br>Zorluk çıkartmayın lütfen. Bakın ciddiyim!
Vatandasi_Uyar mesaj ‘ uyarı mesajı ver.
Response.end ‘ işleyişi durdur. (veya sunucundan gelen yanıtı kes)
End If

‘ diğer üç form alanına bilgi girişi yapılmamış olabilir.
‘ tablodaki alanlara sıfır uzunluk izni verilmediğinden (varsayılan budur)
‘ sıfır uzunluktaki değişkenlerimize boş değer (null) atayacağız.
If Len( icq)=0 Then
icq = null
ElseIf Len( telefon)=0 Then
telefon = null
ElseIf Len( email)=0 Then
email = null
End If

‘ veri tabanı yolu ve bağlantı cümlesi bildirimleri
Dim Veri_yolu, bag_cumle
Veri_yolu = Server.MapPath(db/kisiler.mdb)
bag_cumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu

‘ ADO bağlantı nesnesi yarat, nesneyi bağlantı cümlesiyle aç
Set bag = Server.CreateObject(ADODB.Connection)
Bag.Open (bag_cumle)

‘ bir kayıt seti yarat, mevut tablodan sorgu yap, kayit setini aç
Set kayitseti = Server.CreateObject(ADODB.Recordset)
kayitseti.Open “Select * from kisiler, bag, 1, 3

‘ kayit setine gıcır bir kayıt ekle
kayitseti.addnew

‘ alanlara formdan aldığın verileri tıka
kayitseti(ad) = ad
kayitseti(telefon) = telefon
kayitseti(icq) = icq
kayitseti(email) = email
kayitseti(adres) = adres
kayitseti(dogum_gunu) = dgunu

‘ kayit setini güncelle
kayitseti.update

‘ dayının sözünü dinle, nesneleri kapat
kayitseti.Close
Set kayitseti = Nothing
bag.Close
Set bag = Nothing

‘ iş bitmiştir. ufak bir bilgilendirme yapsak hoş olmaz mı?
Basariyi_kutla()

%>

<% ‘******** %>
<% Sub Vatandasi_Uyar (mesaj) %>
<h1>EY VATANDAŞ, HATA!</h1>
<font color=red><b><%= mesaj %></b></font>
<p><a href=“” onclick=history.back(1)>GERİ</a>
<p>© Benim Hata Denetim Mekanizmam versiyon bir
<br>Soran olursa 2000 yılında yaptım 🙂
<% End Sub %>
<% ‘******** %>

<% ‘******** %>
<% Sub Basariyi_kutla %>
<h1>TEBRİKLER</h1>
Veritabanına kayıt eklem işlemi gayet başarılı bir şekilde tamamlandı.
<% End Sub %>
<% ‘******** %>

 

Yukarıdaki kulanılan kodlarla ilgili ayrıntılar sonraki sayfada.
SORU İŞARETLERİ

Sayfamızın başında bir kontrol yapısı göze çarpıyor. Hani olur ya.. Akıllının biri tarayıcıyı açar, kayit_ekle.asp nin yolunu yazar. Bu durumda kayit_ekle.asp ye formdan bilgi gitmemiştir. Ve kayit_ekle.asp nin de işi gücü olduğundan böyle amaçsız istemlere anında yanıt vermesini sağlıyoruz. Diyoruz ki istem metodunu içeren ifadede “POST” metni yoksa (ki bu, sayfamıza form ile ulaşılmamış demektir) bir hata mesajı görüntüle.

metod = Request.ServerVariables(“REQUEST_METHOD”)
If strcomp(metod, “POST”, vbtextcompare) <> 0 Then
mesaj = “Hayır.. Bu dosya formundan başkasına iş yapmaz. ”
Vatandasi_Uyar mesaj ‘ uyarı mesajı ver.
response.end ‘yanıtı kes
End If

SUB RUTİNLER

Yukarıdaki kodda hata mesajını görüntülemek için bir sub rutine bir değişkenle parametre gönderip çağırıyoruz. Sub VBScript te bir alt kod bloğudur. Bu kullanımı yapabilmemiz için çağırdığımız SUB sayfa içerisinde tanımlanmış olmalıdır. Sayfanın en aşağısında ise bu SUB ı tanımlıyoruz. (yeri mühim değil, en başta da olabilir)

<% Sub Vatandasi_Uyar (mesaj) %>
<h1>EY VATANDAŞ, HATA!</h1>
<font color=”red”><b><%= mesaj %></b></font>
<p><a href=”” onclick=”history.back(1)”>GERİ</a>
<p>© Benim Hata Denetim Mekanizmam versiyon bir
<br>Soran olursa 2000 yılında yaptım 🙂
<% End Sub %>

SUB rutinimizin adı “Vatandasi_uyar”. Bu sub, bir dışarıdan parametre alıyor. Parametremize mesaj adını verdik. Aldığı mesaj değerini formatlayarak ekrana yazıyor. SUB bloğunu END SUB deyimi ile sonlandırmamız gerekiyor.

FORMDAN İSTENEN İÇERİK VE DE KONTROLLERİ

ad = trim(Request.form(“ad”)) tipindeki formdaki bir elemanın içeriğini istemeyi biliyorsunuz. Burada farklı olarak TRIM fonksiyonunu kullandık. Bu fonksiyon VBScript de bir karakter dizisi işleme fonksiyonudur. Metnin sağ ve solundaki boşluk karakterlerini temizler. Yani vatandaş formun ad kutusuna kıllık yapıp ” Abuzer ” yazdıysa kullandığımız TRIM fonksiyonu bunu “Abuzer” şeklinde kırpıp bize geri verecektir. Bu şekilde formdaki diğer elemanların içeriğini de isteyip belirlediğimiz değişkenlerimize atama yapıyoruz. Sıra geldi bir takım kontrollere. Bazı alanların mutlaka doldurulmasını isteyebiliriz. Bunu için sıfır uzunluk kontrolü yapacağız. LEN(degisken_adi) fonksiyonu bize değişkenin uzunluğunu verir. Eğer bu uzunluk 0 ise değişkende değer yok demektir.

If Len( ad)=0 Or Len( dgunu)=0 Or Len( adres)=0 Or Not isdate(dgunu) Then
Dim mesaj
mesaj = “Lütfen ad, adres ve doğum günü kutularını adam gibi doldurun”
mesaj = mesaj & “<br>Zorluk çıkartmayın lütfen. Bakın ciddiyim!”
Vatandasi_Uyar mesaj ‘ uyarı mesajı ver.
response.end ‘ işleyişi durdur. (veya sunucundan gelen yanıtı kes)
End If

Yazdığımız kontrolde eğer ad, adres ve doğum gününü tutan değişkenlerimizin uzunluğunun yanında bir de ISDATE(degisken) fonksiyonu ile doğum günü alanına girilen değerin tarih/saat türüne uygun olup olmadığı denetleniyor. Eğer şartlardan en az biri (OR bağlacı bunu sağlar) gerçekleşmezse Vatandasi_uyar alt rutini bir hata mesajı görüntülenmek için çağrılıyor. response.end ile sunucunun sayfayı icrası durduruluyor.
SIFIR UZUNLUK > NULL

Eğer tablomuzdaki alanlar için sıfır uzunluk izni verilmediyse, formda doldurulması gerekli görmediğimiz ama değre girilmemiş alanların değeri kayıtsetine yazılırken hata verecektir. Söz konusu tablo alanına sıfır uzunluğunda bir değer atanamayacağını söyleyecektir. Biz de sıfır uzunluklu değişkenlerimize NULL (boş) değeri atayarak bu hatanın önüne geçiyoruz. Örnek:

If Len( icq)=0 Then
icq = null
End If

VT BAĞLANTISI

Bunu daha önceki VERİTABANI BAĞLANTISI konulu makaleden biliyorsunuz. kayit_ekle.asp dosyasına göre db/kisiler.mdb konumunda olan veritabanı dosyamızla bir bağlantı açıyoruz.

Veri_yolu = Server.MapPath(“db/kisiler.mdb”)
bag_cumle = “DRIVER={Microsoft Access Driver (*.mdb)};DBQ=” & Veri_yolu
Set bag = Server.CreateObject(“ADODB.Connection”)
Bag.Open (bag_cumle)

KAYIT SETİ

Bir ADO kayıt seti nesnesi oluşturuyoruz. Nesnemizi “SELECT * FROM kisiler” sorgu lafıyla açıyoruz. Kayıt setimize kisiler tablosundaki tüm kayıtlar tüm satırlarıyla alınmış oluyor.

Set kayitseti = Server.CreateObject(“ADODB.Recordset”)
kayitseti.open “Select * from kisiler”, bag, 1, 3

ARTIK YENİ BİR KAYIT EKLEYELİM HA?

Artık işimizin asıl kısmı başlıyor. kayitseti.AddNew metodu kayıt setine yeni bir satır (kayıt) eklemiş oluyor. (Yalnız henüz tablomuza yansımamış bir kayıt bu). Kayıttaki alanlara gerekli değer atamalarını yapıyoruz. Örnek: kayitseti(“ad”) = ad. Atamalar bittikten sonra bu kayıt setindeki değişikliği tablomuza yansıtacağız. Metodumuz: kayitset.UPDATE. Artık tablomuz güncellenmiştir.

Açtığımız nesneleri kapatarak bir de başarılı işlem yapıldığı için mesaj görüntülemek istiyoruz. Basariyi_kutla adıyla tanımladığımız (parametre istemeyen) subımızı da çağırarak vazifemizi kıvançla bitiriyoruz.

 

VBSCRIPT İLE STRING DÜZENLEME

 

STRING NEDİR BABA?

Microsoft’taki Türkçe kelime motorundan sorumlu arkadaşlar “dizgi” diyorlar “string”e. Takdir ediyorum, güzel bir kelime. Önceleri anlamadan geçiyordum bu kelimeyi. Daha sonra metinden çıkardığım anlama göre bu kelimenin String yerine kullanıldığını farkettim. O an ne kadar mutlu oldum bilemezsiniz. Ah…

Aslında String deyimi, gerçke anlamıyla da örtüşüyor. “Sicim, ip” karşılığındaki bu deyim, karakterlerin peş peşe sıralandığı veri türünü ifade ediyor. Burada karakterler için bir ayrım yok. Rakam, harf, sembol.. Yeryüzünde mevcut karakterlerin oluşturduğu bir zincir. Pascal’da dizileri kavradıktan sonra string türü verilerin de “katakter dizisi” olarak adlandırılmasında hiç bir sakınca olmadığını görmüştük. Yine de biz “dizgi” diyelim de hem sizi fazla kızdırmadan bu anlamsız geyiği keseyim, hem de Microsoft “yerleşikliğine” riayet edelim.

Peki dizgilere ve onları biçimleyeceğimiz fonksiyonlara neden gereksinim duyuyoruz? Neden? Çünkü biz “dizgi” siz bir şey yapamayız. (Üff… sıkıldım bu kelimeden. Ben “string” diye devam edeceğim, kusura bakmayın.) Örneğin okuduğunuz bu yazı bir string türü veridir. Formla yolladığınız her şey string türdedir. Sorgu cümleciğinden aldığınız ıvır ve zıvır her şey stringdir. E bu kadar stringlerle iç içeyiz, o zaman onlara daha yakından bakalım değil mi? Stringlerin önemli bir özelliği matematiksel bir kıymet taşımamalarıdır. String türünde bir değişkende rakamsal veriler varsa, bunları ancak CINT gibi bir convertion (dönüşüm) fonksiyonu yardimiyle sayısal veri türüne çevirip matematiksel kavgalara sokabilirsiniz.

String lere matematik anlatamıyoz diye onları başı boş bırakacaz demedik. Programlama dillerinde bir takım metin düzenleme fonksiyonları bulunuyor. VBScript ise Visual Basic dayısından aldığı string formatlama fonksiyonları ile karşımıza çıkıyor. Bunlar: Asc, AscB, AscW, Chr, ChrB, ChrW, Filter, InStr, InStrB, InStrRev, Join, Len, LenB, LCase, UCase, Left, LeftB, Mid, MidB, Right, RightB, Replace, Space, Split, StrComp, String, StrReverse, LTrim, RTrim, Trim. Uff… Bunların hepsini değil de işlerimizde çok fazla ihtiyaç duyacağımız belli başlılarını inceleyeceğiz.

LEN FONKSİYONU
Length kelimesinden alır adını. Bir string ifade içindeki karakter sayısını döndürür. Len(“Ankara-İzmit”) ifadesi 380 (km) değil de ifadedeki karakter sayısı olan 12 yi döndürür.
Örnek:
Dim mystr
mystr = “İkimiz bir kuşlar gibi yuva kuralım. Ayırmasın Mevlam bizi ömür boyunca.. ”
Response.write LEN(mystr) ‘ sayfaya 74 yazar

UCASE, LCASE FONKSİYONLARI
Harflerin büyük-küçük dönüşümünü yaparlar. UCASE(“ahMet”) > “AHMET”, LCASE(“MUCIt”) > “mucit” örneklerinden anlaşılacağı gibi UCASE uppercase ye, LCASE lowercaseye dönüşüm yapar. Yalnız dikkat edilmesi gereken bir husus:
UCASE(“ışıl”) > “ıŞıL” ; LCASE(“IŞIL”) > “işil”. Artık bu istenmeyen durumu kendi yazacağınız özel büyüt-küçült fonksiyonlarıyla aşacaksınız. (Merak etmeyin, yazarız bir tane)

INSTR FONKSİYONU
Bu güzel fonksiyon bize arama türü bir işlev sağlar. Uzun bir metin içerisinde daha kısa bir ifadenin indis olarak başlangıç pozisyonunu verir. Söz dizimi: INSTR(index, uzun_string, aranacak_string, karşılaştırmakodu) şeklindedir. Burada index ise uzun string içindeki aramanın hangi sıradaki karakterden başlayacağını bildirir. Bu sıradan önceki metne bakılmaz. Eğer index parametresi geçirilmezse 1 olarak kabul edilir. Aranılan ifadeye rastlanmazsa fonksiyon 0 değeri döndürür. Karşılaştırma kodu 0 yazıldığında VbBinaryCompare yapılır, 1 yazıldığında ise VBTextCompare yapılır. Bunun ayrımına büyük küçük harf duyarlığında varırsınız. Aşağıdaki örnekleri inceleyin.
Örnek:
Dim mystr
mystr = “Bilene her devir aslında Lâle Devri / Aklınız varsa Nedim gibi yaşayın..(Ü.Y.O)”
Response.write Instr(1, mystr, “Bilene”, 0) ‘sayfaya 1 yazar
Response.write Instr(1, mystr, “Bilene”, 1) ‘sayfaya 1 yazar
Response.write Instr(1, mystr, “bilene”, 0) ‘sayfaya 0 yazar
Response.write Instr(1, mystr, “bilene”, 1) ‘sayfaya 1 yazar
Response.write Instr(mystr, “Lâle”) ‘sayfaya 26 yazar
Response.write Instr(mystr, “lâle”) ‘sayfaya 0 yazar
Response.write Instr(1, mystr, “lâle”, 1) ‘sayfaya 26 yazar
Response.write Instr(mystr, “Kızılcahamam Maden Suları”) ‘sayfaya 0 yazar
FONKSİYONLARA DEVAM…

REPLACE FONKSİYONU
Gayet faydalı bir fonksiyondur. Uzun bir metin içerisindeki belirlediğiniz ifadeyi başka ifadeyle değiştirmenizi sağlar.
Söz dizimi: REPLACE(string, değişecek_olan, yerine_konulacak, başlangıç_indexi, değişiklik_sayısı, karşılaştırmakodu)
Parametreler:
String: İçinde değişiklik yapacağımız metindir.
Değişecek_olan: Metin içinde değiştirmek istediğimiz alt-dizgi (sub-string) dir.
Yerine_konulacak: Belirtilen alt-dizginin yerine konulacak ifadedir.
Başlangıç_indexi: Değiştirme işleminin, stringin kaçıncı karakterinden başlayacağıdır. Varsayılan: 1
Değişiklik_sayısı: Çok açık. -1 yazılırsa bulunan tüm alt-dizgiler değiştirilir.
karşılaştırmakodu: VBTextCompare için 1, VBBinaryCompare için 0 yazılabilir. Varsayılan 0.
Replace fonksiyonu şu şekilde de işlev yapar. REPLACE(string, değişecek, yerinekonulacak). Ancak fonksiyonun daha verimli kullanılabilmesi için tüm parametlerinin belirtilmesi gerekir. Örnekleri inceleyin, anlayacaksınız.
Örnek:
Dim mystr
mystr = “Ağır ağır çıkacaksın bu merdivenlerden”
Response.write replace(mystr, “Ağır”, “Hızlı”, 1, -1, 0)
‘ sayfaya “Hızlı ağır çıkacaksın bu merdivenlerden” yazar.
Response.write replace(mystr, “Ağır”, “Hızlı”, 1, -1, 1)
‘ sayfaya “Hızlı Hızlı çıkacaksın bu merdivenlerden” yazar.
Response.write replace(mystr, “a”, “A”, 1, -1, 1)
‘ sayfaya “Ağır Ağır çıkAcAksın bu merdivenlerden” yazar.
Response.write replace(mystr, “a”, “A”, 1, 2, 1)
‘ sayfaya “Ağır Ağır çıkacaksın bu merdivenlerden” yazar.

Replace fonksiyonu bir çok yerde yardımımıza yetişir. Örneğin bir formdan alınan içerikte yer alması muhtelemel istenmeyen ifadelerin ayıklanması sağlanabilir. HTML taglerinin kullanılması önlenebilir. Ve daha bir çok yerde REPLACE size büyük fayda sağlayacaktır.

LEFT, RIGHT FONKSİYONLARI
Left bir metnin sol böğründen, Right bir metnin sol böğründen belirtilen sayıda karakter alır. Sözdizimi: LEFT|RIGHT(string, uzunluk).
Örnek:
Dim mystr
mystr = “Yüz bin elle dokunurum sana, İstanbul a…”
Response.write LEFT(mystr, 7) ‘ sayfaya “Yüz bin” yazar
Response.write RIGHT(mystr, 13) ‘ sayfaya “İstanbul a…” yazar

MID FONKSİYONU
Left fonksiyonunun biraz gelişmiş şeklidir. Burada uzunluk parametresinden önce bir de index parametresi gönderilir.
sözdizimi: MID(string, index, uzunluk)
Örnek:
Dim mystr
mystr = “Yüz bin gözle seyrederim seni, İstanbul u”
Response.write MID(mystr, 5, 3) ‘ sayfaya “bin” yazar

TRIM, LTRIM, RTRIM FONKSİYONU
Boşluk (space) karakterlerini kırpan fonksiyonlar. TRIM her iki yandan, LTRIM sol yandan, RTRIM sağ yandan boşlukları kırpar.
Örnek:
Dim mystr
mystr = ” KIRP BENİ ”
Response.write TRIM(mystr) ‘ sayfaya “KIRP BENİ” yazar
Response.write LTRIM(mystr) ‘ sayfaya “KIRP BENİ ” yazar
Response.write RTRIM(mystr) ‘ sayfaya ” KIRP BENİ” yazar

STRREVERSE FONKSİYONU
Biraz eğlenceli, biraz da fuzuli geliyor bana. Metni ters çeviriyor. Bunun için hazır fonksiyon yazmaya ne gerek vardı? Örneğe bakın.
Örnek:
Dim mystr
mystr = “kitap”
mystr2 = “ey edip adanada pide ye”
Response.write StrReverse(mystr) ‘ sayfaya “patik” yazar
Response.write StrReverse(mystr2) ‘ sayfaya “ey edip adanada pide ye” yazar.. ehu ehu
STRING FONKSİYONU
VBScript ten yine evlere şenlik bir fonksiyon. Belirtilen sayıda karakterin tekrarını içeren string oluşturuyor.
Örnek:
Response.write STRING(5, “*”) ‘ sayfaya “*****” yazar

SPLIT FONKSİYONU
Bir metinden belirlenmiş ayraçlar (delimiter) vasıtasıyla belirtilen sayıda alt-dizgi içeren 0 tabanlı, tek boyutlu dizi üretir.
Sözdizimi: SPLIT(ifade, ayraç, sayi, karşılaştırmakodu).
(Sayi yerine -1 yazılırsa tüm belirlenen tüm alt-dizgiler işleme tabi tutulur.)
Ne iş yaptığını anlamak için örnek yapalım.
Örnek:
Dim mystr, dizi(3)
mystr = “EvcilASP|Türkiye nin|ASP Bostanı”
dizi = SPLIT(mystr, “|”, -1, 1)
Reponse.Write dizi(0) ‘ sayfaya “EvcilASP” yazar
Reponse.Write dizi(1) ‘ sayfaya “Türkiye nin” yazar
Reponse.Write dizi(2) ‘ sayfaya “ASP Bostanı” yazar

JOIN FONKSİYONU
Split fonksiyonuna göre zır işlemi yapar. Bir dizinin elemanlarını belirtilen ayraç ile birleştirip bir string üretir.
Sözdizimi: JOIN(ifade, ayraç)
Örnek:
Dim dizi(3), str, str2
dizi(0) = “Ben”
dizi(1) = “Sekizinci”
dizi(2) = “Henri”
str = JOIN(mystr, “|”)
str2 = JOIN(mystr, ” “)
Reponse.Write str ‘ sayfaya “Ben|Sekizinci|Henri” yazar
Reponse.Write str2 ‘ sayfaya “Ben Sekizinci Henri” yazar

Bu kadar. Bu öğrendiğimiz fonksiyonlar bize şimdilik yeter de artar bile. Ancak gelişen koşullara göre diğer fonksiyonlara da ileride göz atmak gerekebilir. Haydi sağıcakla kalın. Her string biçimlendirme sırasında EvcilASP yi hatırlayın. Eyvallah…

VERİTABANINDAKİ KAYITLARI GÜNCELLEMEK

 

Veritabanı muhabbetimiz tam gaz devam ediyor. Bu yazıda bir çok veritabanı operasyonunu birlikte göreceğiz. Kayıt ekleme, silme, güncelleme gibi. Kullanacağımız veritabanı dosyası burada(8,15 kb). Bu dosya C:\inetpub\wwwroot\db konumunda olsun. Sıra geldi script dosyalarımıza.

KAYITLAR.ASP

Öncelikle kayıtları listeleyeceğimiz bir arabirim inşa ettik. kayitlar.asp ye göz atalım. Bu ve diğer ASP dosyaları C:\inetpub\wwwroot\ konumunda olsun.

  Kod1. kayitlar.asp
<%
Veri_yolu = Server.MapPath(db/kisiler.mdb)
Bcumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu
Set bag = Server.CreateObject(ADODB.Connection)
bag.Open (Bcumle)
Set kset = bag.Execute(“Select * FROM kisiler)
%>
<% i=1 %>
<p><a href=kayit_yeni.asp>Yeni Kayıt</a></p>
<table border=1>
<tr>
<th>#</th>
<th>Ad</th>
<th colspan=2>Eylemler</th>
</tr>
<% Do While Not kset.eof %>
<tr><td><%= i %></td>
<td><%= kset(ad) %></td>
<td><a href=kayit_duzenle.asp?id=<%= kset(id) %>”>düzenle</a></td>
<td><a href=kayit_sil.asp?id=<%= kset(id) %>”>sil</a></td></tr>
<% kset.movenext %>
<% i = i + 1 %>
<% Loop %>
</table>
<%
kset.Close
Set kset = Nothing
bag.Close
Set bag = Nothing
%>
 

Bu script, basit bir şekilde /db alt dizinindeki kisiler.mdb ile bağlantı kuruyor. kisiler tablosundan aldığı tüm kayıtların “ad” alanındaki değerlerini yazdırıyor. Ve de her bir kayıt için düzenleme ve silme linkleri oluşturuyor. Linkler oluşturulurken sorgu stringi içinde eylemi gerçekleştirecek script dosyasına “id” anahtarıyla kaydın “id” alanındaki değeri gönderiliyor. Tabi bunlar kayıtseti sonunda duracak bir döngü içerisinde yapılıyor. Veriler tablo hücrelerine döngüyle döküldüğüne de dikkat ediniz.

 

KAYIT_DUZENLE.ASP ve KAYIT_GUNCELLE.ASP

Kayıtların listelendiği kayitlar.asp de her kaydın yanında bir düzenle bağlantısı var. Bu bağlantı ile duzenle.asp dosyasına işaret ediliyor. Bir de sorgu cümlesi konuluyor yanına: “duzenle.asp?id=XX” Buradaki XX yerine geçerli kaydın id alanındaki değeri yazılıyor. Şimdi kayıt_duzenle.asp ye bakalım.

  Kod2. kayit_duzenle.asp
<%
id = Request.QueryString(id)
If Not isnumeric(id) Or Len( id)=0 Then
mesaj Yanlış Sorgu Cümlesi
End If
‘———————————————————————————–
Veri_yolu = Server.MapPath(db/kisiler.mdb)
Bcumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu
Set bag = Server.CreateObject(ADODB.Connection)
bag.Open (Bcumle)
Set kset = bag.Execute(“Select * FROM kisiler where id = & id)
If kset.eof Then
mesaj Olmayan Kayıt İstendi
End If
%>

<a href=kayitlar.asp>Kayıtlar</a>

<form method=post action=kayit_guncelle.asp>
<table border=1>
<tr>
<td>Ad</td>
<td><input type=text name=ad value=“<%= kset(ad) %>”></td>
</tr>
<tr>
<td>Teleon</td>
<td><input type=text name=telefon value=“<%= kset(telefon) %>”></td>
</tr>
<tr>
<td>Email</td>
<td><input type=text name=email value=“<%= kset(email) %>”></td>
</tr>
<tr>
<td>ICQ</td>
<td><input type=text name=icq value=“<%= kset(icq) %>”></td>
</tr>
<tr>
<td>Adres</td>
<td><input type=text name=adres value=“<%= kset(adres) %>”></td>
</tr>
<tr>
<td>Doğum Günü</td>
<td><input type=text name=dgunu value=“<%= kset(dogum_gunu) %>”></td>
</tr>
<tr>
<td></td>
<td><input type=submit value=güncelle></td></tr>
</table>
<input type=hidden name=id value=“<%= kset(id) %>”>
</form>

<%
kset.Close
Set kset = Nothing
bag.Close
Set bag = Nothing
%>
<%‘————————–%>
<% Sub mesaj(msg) %>
<p><%= msg %></p>
<% Response.end %>
<% End Sub %>
<%‘————————–%>

 

Aslında bu scriptin de öncekinden pek farkı yok. sadece sorgu cümlesinden “id” anahtarındaki değeri alıyor. Ve bu id değerini kullanarak tablodan tek kayıt seçiyor. (“SELECT * FROM kisiler where id =” & id). Seçtiği kayda ait değerleri ise form input alanlarına döküyor. Formun action özelliğine ise kayit_guncelle.asp yazılmış. Güncelleme işini bu dosyaya havale ediyoruz.

  Kod3. kayit_guncelle.asp
<%
ad = Request.form(ad)
id = Request.form(id)
telefon = Request.form(telefon)
dgunu = Request.form(dgunu)
icq = Request.form(icq)
email = Request.form(email)
adres= Request.form(adres)
‘———————————————————————————–
Veri_yolu = Server.MapPath(db/kisiler.mdb)
Bcumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu
Set bag = Server.CreateObject(ADODB.Connection)
bag.Open (Bcumle)
Set kset = Server.CreateObject(ADODB.Recordset)
sql = “Select * FROM kisiler WHERE id = & id
kset.Open sql, bag, 1, 3
kset(ad) = ad
kset(telefon) = telefon
kset(email) = email
kset(adres) = adres
kset(icq) = icq
kset(dogum_gunu) = dgunu
kset.update
kset.Close
Set kset = Nothing
bag.Close
Set bag = Nothing
Response.Write <p>Kayıt Yapıldı.. Başka bir arzunuz?
Response.Write <p><a href=“”kayitlar.asp“”>Kayıtlar</a>
%>

 

KAYIT_YENI.ASP

kayitlar.asp de Yeni Kayıt linkinde işaret edilen kayit_yeni.asp… Yaptığı iş şu. Veritabanına bağlanıp ilgili tablodan oluşturduğu kayıt seti içine yeni bir kayıt ekliyor. Kayıtsetini güncelliyor, “id” alanındaki değeri bir değişkende saklıyor. nesneleri kapatıyor. Ve de kayit_duzenle.asp dosyasına “id” anahtarıyla yeni eklenen kaydın “id” alanındaki değeri gönderiyor. Yani bu sayfa sadece işlem yapıyor. Kullanıcıya gözükmeden işlemi tamamlayıp düzenleme sayfasına yöneliyor.

  Kod4. kayit_yeni.asp
<%
Response.buffer=true
Veri_yolu = Server.MapPath(db/kisiler.mdb)
Bcumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu
Set bag = Server.CreateObject(ADODB.Connection)
bag.Open (Bcumle)
Set kset = Server.CreateObject(ADODB.Recordset)
sql = “Select * FROM kisiler
kset.Open sql, bag, 1, 3
kset.addnew
kset.update
id = kset(id)
kset.Close
Set kset = Nothing
bag.Close
Set bag = Nothing
Response.Redirect kayit_duzenle.asp?id= & id
%>
 

KAYIT_SIL.ASP

Sorgu cümlesindeki “id” anahtarından alınan id değeri kullanılarak şu SQL ifadesi oluşturuluyor.
DELETE FROM kisiler WHERE id = ” & id . Ve bu ifade bağlantı tarafından yürütülüyor (execute). Sonuçta id si alınan kayıt tablodan silinmiş oluyor. Kullanıcı da geldiği sayafaya yönleniyor.

  Kod5. kayit_sil.asp
<%
Response.buffer = True
id = Request.QueryString(id)
‘———————————————————————————–
Veri_yolu = Server.MapPath(db/kisiler.mdb)
Bcumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu
Set bag = Server.CreateObject(ADODB.Connection)
bag.Open (Bcumle)
sql = DELETE FROM kisiler WHERE id = & id
Set kset = bag.Execute(sql)
Set kset = Nothing
bag.Close
Set bag = Nothing
Response.Redirect (Request.ServerVariables(HTTP_REFERER))
%>

 

ASRIN FİYAKASI: MAİL GÖNDERMEÇ!

 

Neden bahsedeceğimizi başlıkta çok açık bir şekilde belirttik. İnternet’in en kullanışlı ve insani boyutlarından biri de maildir bence. Çok zaman geçmedi mektup zarflarının kapaklarını dilimizle ısladıktan sonra büyük bir heyecan ve “ümit” içerisinde yapıştırıp güle oynaya Posta Teşkilatı binasının yolunu tuttuğumuz günlerin üzerinden. Mektup yazmayı çok severdik biz güneşin çocukları olarak. Öğretmenler önce karşının hal ve hatırını sormayı öğütlediler bize. Biz de hep “orada havalar nasıl” diye başlardık test.mektuplar’a. Ve kendimizden bahsetmeye gelince de “Burada havalar iyi” en büyük vurgumuz olurdu. Sonra amcalara, teyzelere yazılan mektupların yerini Leylâ’ya yazılan mektuplar aldı. Özenle yazdığımız “sevda” kokulu cümleler, postacı amcanın eline ne büyük güvenle teslim edilirdi! Postacı amcalar adresi hiç şaşırmazdı, sevda menzile ererdi. O zaman cep telefonu olmadığı için karşıdaki arkadaş anında “mektubun geldi arkadaşım, haziran da geldi” içerikli kısa bir mesaj atamazdı. Siz Leylâ’ya mektubun ulaştığını, ancak Postacı amcanın karşı sokaktan elinde ışıldayan bir zarfla sizin kapıya doğru yönelişine tanık olduğunuzda anlardınız. Hangi heyecanlar salınırdı içinizde kim bilir. Hangi yıldızlara koşardı gözleriniz…

Artık mektuplardan çok uzaklaştık. Çünkü artık internete, onun getirilerine çok yaklaştık. Posta Teşkilatı’na giden, yürüdükçe uzayan yolun yerini, basit “send” tuşları aldı. İadeli taahhütlü mailler iletişimin ağır yükünü kolaylıkla sırtladı.

Şimdi herkesin neredeyse kendi Posta teşkilatı var. Mail sunucular harıl harıl çalışıyor. Bu hızlı değişim, bizi mail iletişiminin üzerine daha ciddi eğilmeye itiyor. Deminden beri “ne diyor yav bu, biz buraya ASP türküleri dinlemeye geldik” dediniz. Sabrettiğinize değecek umarım. Bu kısa muhabbetten sonra ASP teknolojisiyle nasıl postacılık yapacağımıza değineceğiz. Artık buraya kadar okudunuz, gerisine katlanırsınız değil mi 🙂

POSTACI OLUYORUZ.

ASP bize kolay bir şekilde mail gönderme imkanı sunmakta. Yalnız bu kolaylığı çoğu zaman verimli bir şekilde kullanamıyoruz. Çünkü bu mail ileti sistemi, mail sunucunuzu kullanmanızı tesis eden hazır sunucu (mail component) bileşenleriyle sağlanmakta. Bunlar da sunucudan sunucuya değişiyor maalesef. Kimi sunucunun tercihi CDO, kimininki Persist, kimininki de JMail. Piyasada envai çeşit mail bileşeni mevcut. Genelde bedava oluyorlar. Bunlardan en yaygını saydığımız üç tanesi. Bu bileşenleri ASP ile kullanarak mail göndermek için bu bileşenlerin, sunucu sisteme kayıt edilmesi (register) gerekir. Bazı bileşenlerin kendi kurulum programları, bu işi size zahmet vermeden yapmaktadır. Bazılarını ise siz, bir zahmet kayıt edeceksiniz (c:\windows\system\regsvr32.exe [bileşen] komutuyla olabilir.)

Ancak bizim büyük ihtimal kendi sunucumuz yok. Bileşen kayıtlarıyla da işimiz yok diyebilirsiniz. O zaman mail göndermeyi hala istiyorsanız dosyalarınızı “publish” ettiğiniz web sunucuda herhangi bir mail bileşeni olduğundan emin olunuz. Bunun için sunucu şerifiyle iletişime geçin. Web sunucunuzdaki mail bileşenini mutlaka öğrenin. Çünkü mail gönderme scriptinizde kullanacağınız kodlar, bileşenden bileşene az da olsa fark gösterecektir. Her bileşen bazı kendine özgü metodlarla mail göndermeye programlanmış. Yaptıkları iş aynı da, niye metodları farklı dersiniz? Valla bilmem. Biri obj.send ile mail gönderiyor, diğeri obj.execute ile örneğin. Bileşeni yazan adamların kendi tercihleri bu. Şikâyet hakkımızın olduğunu sanmıyorum. Ne güzel, iş çıkıyor işte.

DERS BAŞLIYOR, ÖNCE AMAÇ!

Amacımız ne? Mesela kullanıcıların sitedeki bir formu doldurarak site yöneticisine mail göndermesini sağlamak. Veya “yakın bir arkadaşına bu siteyi ziyaret etmesini tembihle“ düzeneği kurmak. Biz, daha “mantıklı” olduğundan birinciye örnek verelim.

FORM’UM

Önce form içeren bir HTML belgesi üretmemiz lazım. Dosyayı üretip adına da ne diyelim? Evet, bildiniz: form.html..

  Şekil1. Form.html
<html>
<head>
<title> SİTE ŞERİFİNE MAİL GÖNDER </title>
</head>

<body bgcolor=#FFFFFF>

<form method=post action=yolla.asp>
İsim : <input type=text name=isim><br>
Mail : <input type=text name=mail><br>
Konu : <input type=text name=konu><br>
Mesaj : <textarea name=mesaj rows=“” cols=“”></textarea><br>
<input type=submit value=yolla>
</form>

</body>
</html>

 

İşte meşhur form.html. Belgenin tarayıcıda görünümünden siz sorumlusunuz tabi ki. Burada “estetik bir form tasarlayalım da karizmayı titretmeyelim” kaygısı taşımadığımızı belirtelim. Örneğimizde önemli olan işlevdir. Formdaki elemanların kimlikleri (name) de dikkat edeceğimiz noktadır.

İnşa edilen bu formu dolduran ziyaretçi, olağan şartlarda çevrede bir “submit” düğmesi bulup tıklayacaktır. Ve tarayıcı tetiklenip formun “action” özelliğinde belirtilen “yolla.asp” ye koşacak. Bu, yolla.asp diye bir ASP komut dosyası yazacağımız anlamına geliyor. Yolla.asp yi yazarken bir mail bileşen örneği yaratıp, belirli komutları kullanarak mail gönderme işlemini tesis edeceğiz.
CDO İLE YOLLA.ASP

En yaygın mail gönderme bileşeni olan CDO dan bahsediyoruz. Bu bileşen NT Option Pack 4 ile geliyor. Yani ayağınıza kadar geliyor. Yaygınlığı da buradan geliyor tabi ki. Eğer web sunucunuzda CDO mail bileşeni yüklüyse burada vereceğimiz kodları kullanabilirsiniz.

  Şekil2. yolla.asp (CDO ile)
<%
‘ formdan içerik al
isim = Request.form(isim)
mail = Request.form(mail)
konu = Request.form(konu)
mesaj = Request.form(mesaj)

‘ mektup kime gidecek abisi
kime = [email protected]

‘ bir CDO Newmail nesne örneği yarat
Set mektup = Server.CreateObject(CDONTS.NewMail)
‘ çok açık, geleneksel atamalar
mektup.From = isim & < & mail & >
mektup.To = kime
mektup.Subject = konu
mektup.Body = mesaj
‘ hata olursa mızıkçılık yapmadan devam et
on error resume next
‘ ve sadede geldik.
mektup.Send
‘ hata oluşursa
If err <> 0 Then
vukuat = err.description
Response.Write Vukuat var: & vukuat
Else ‘ iş temizse
tebrik = Tebrik ederiz, maili yolladık
Response.Write tebrik
End If
‘ açtığın nesneyi kapa…
Set mektup = Nothing
‘ bitti
%>

 

PERSIST İLE YOLLA.ASP

Bir de Persist Mail gönderme bileşeniyle deneyelim bu işi. Maksat çeşitlilik olsun. Karşımıza hangisi çıkarsa çıksın, defterini dürelim.

  Şekil2. yolla.asp (Persist İle)
<%
‘ formdan içerik al
isim = Request.form(isim)
mail = Request.form(mail)
konu = Request.form(konu)
mesaj = Request.form(mesaj)

‘ mektup kime gidecek abisi…
kime = [email protected]

‘ bir Persist Mailsender nesnesi…
Set mektup = Server.CreateObject(Persits.MailSender)
‘ mektup yollanırken hangi SMTP sunucu kullanılacak
mektup.Host = mail.sevdimsevilmedim.com
‘ gönderenin mail adresi
mektup.From = mail
‘ gönderenin adı
mektup.FromName = isim
‘ gidecek adres..
mektup.AddAddress kime
‘ karşılık yazılacak adres
mektup.AddReplyTo kime
mektup.Subject =konu
mektup.Body = mesaj
On Error Resume Next
mektup.Send
‘ hata varsa
If err <> 0 Then
vukuat = err.description
Response.Write Vukuat var: & vukuat
Else ‘ iş temizse
tebrik = Tebrik ederiz, maili yolladık
Response.Write tebrik
End If
‘ açtığın nesneyi kapa…
Set mektup = Nothing
‘ bitti
%>

 

JMAIL İLE YOLLA.ASP

Son olarak Jmail kullanımına bakalım.

  Şekil4. Yolla.asp (Jmail İle)
<%
‘ formdan içerik al
isim = Request.form(isim)
mail = Request.form(mail)
konu = Request.form(konu)
mesaj = Request.form(mesaj)

‘ mektup kime gidecek abisi…
kime = [email protected]

‘ bir JMail SMTPMail nesnesi…
Set mektup = Server.CreateObject(JMail.SMTPMail)
‘ SMTP sunucusu
mektup.ServerAddress = mail.Server.here
‘ gönderen
mektup.Sender = isim & < & mail & >
‘ konu
mektup.Subject = konu
‘ alıcıyı belirle
mektup.AddRecipient = kime
mektup.Body = mesaj
On Error Resume Next
mektup.Execute
‘ hata varsa
If err <> 0 Then
vukuat = err.description
Response.Write Vukuat var: & vukuat
Else ‘ iş temizse
tebrik = Tebrik ederiz, maili yolladık
Response.Write tebrik
End If
Set mektup = Nothing
%>

 

Scriptlerimiz örnek olması hasebiyle basit tutuldu. Siz isterseniz (ki gerekebilir) bu scriptlere, formdaki alanların durumunu, geçerli mail adresi girilip girilmediğini kontrol eden, hatalı durumlarda daha fiyakalı uyarılar verip, adamı tekrar forma götüren daha kullanışlı özellikler ekleyebilirsiniz.

Üç ayrı mail bileşeniyle, üç farklı yolla.asp çıkarttık ortaya. Siz kendi web sunucunuzun koşullarına göre istediğinizle iş yapabilirsiniz. Ancak web sunucusu size gıcıklık yapıp, mail gönderme bileşeni tahsis etmiyorsa böyle yolla.asp lerle boşuna uğraşmayın. Mail gönderme gibi masum bir isteğinizi olumlu karşılayan sunucular aramaya koyulun. Mektup yazmayı da ihmal etmeyin. Kendi kendinize de olsa mektup yazın, zarfa koyun. Bir köşede dursun öyle. Duygularımızı başka ne türlü muhafaza edeceğiz? Elbette yazarak.

Yazarak!
BİR ÖNERİ

Mail gönderme işi, karşımıza muhtemelen çok yerde çıkacak. Bunu göz önünde bulundurarak kendimize bir iyilik yapabiliriz. Mail gönderme işini bir fonksiyona yükleriz, bu fonksiyon harici bir dosyada saklı kalır. Ve mail gönderme işi yapacağımız bir script içerisinde de söz konusu dosyada bulunan mail gönderen fonksiyon, bir takım parametreler gönderilerek çalıştırılır. Böylece mail gönderme scripti üzerinde yapılması gereken en ufak değişiklik, sadece bu dosyadaki fonksiyon üzerinde yapılır. Alt yordamlar ve fonksiyon kullanımı, programatik eylemlerin işleyişini ve akışını kontrol etmek açısından çok önemli bir yere sahiptir. Dilerseniz şimdi mail gönderen bir fonksiyon örneği yazalım. Bu fonksiyonu yazdığımız belgeyi mailf.asp olarak kaydedelim.

  Şekil5. mailf.asp
<%
Function mailgonder(kimden_isim, kimden_mail, kime, konu, mesaj)
Set mektup = Server.CreateObject(CDONTS.NewMail)
mektup.From = isim & < & mail & >
mektup.To = kime
mektup.Subject = konu
mektup.Body = mesaj
on error resume next
mektup.Send
If err <> 0 Then
mailgonder = False
Else
mailgonder = True
End If
Set mektup = Nothing
End Function
%>
 

Ve son olarak başka işlerin arasında mail gönderme ihtiyacımızın doğduğu bir deneme.asp farzedelim. deneme.asp içerisinde bu fonksiyonu kullana parametreleri gönderip çalıştıracağız. Ancak önce bu fonksiyonu içeren mailf.asp dosyasını, sayfamıza “include” (dahil) etmemiz lazım ki fonksiyon sayfamız hudutları içerisinde çağrılabilir olsun.

  Şekil6. Deneme.asp
<!–#INCLUDE FILE=mailf.asp–>

<%
‘ ——
‘ başka işler
‘ ——
‘ ….
gonderildi = mailgonder(isim, mail, kime, konu, mesaj)
If gonderildi Then
Response.Write maili yolladık
Else
Response.Write hata oluştu, maili yollayamadık
End If
‘ ——
‘ başka işler
‘ ——
‘ ….
%>

 

Bu gibi rutinleşen, çok tekrarlanan işleri alt program bloklarına yüklemek, her zaman rahat, estetik, kullanışlı ve profesyonel çözüm olcaktır. Zaten bu işin raconu da budur. En olmadık şeyleri bile sub rutinlere şimdiden yükleyerek, bu işin havasına girmek faideli olacaktır nitekim 🙂 Eyvallah der Mucit.

ASP VE KABUKLU YEMİŞLER

 

Siteye giriyordunuz. Adam size “sayfayı kişiselleştir” diye bir link koymuş. Tıklayıp içinizi döküyorsunuz. Siteyi bir sonraki ziyaretinizde site size adınıza hitaben “merhaba koçum, seni tanıyorum, bana kendini anlatma, çok iyi bilirim ben seni … ismin şu, sevdiğin kalem markası Rotring, başın ağrıyınca önceden Novalgin alırdın şimdi modaya uyup Aspirin Forte.. monitörün philips marka ve sen simit şeklindeki power düğmesine gıcık oluyorsun … haa bir de bu siteyi 2. ziyaretin … nerden bildim ama… hahaha” türünden şaklabanlıklar yapıyor. Peki bunu nasıl beceriyor? Hepiniz çerezlerle olduğunu biliyorsunuz.

Biz yine de çerezlerin üzerinde kısaca duralım. Çerezler istemci bilgisayar yollanan kabuklardır. Siteniz bir yemiş olarak düşünülürse, cookie denilen şeyler de yemişin kabuklarıdır. Siz yemişi yersiniz, kabuklarını bilgisayarınıza atarsınız. Yalnız bu kabuklu yemiş kullanan siteler için geçerli. Bir de tarayıcınızın yemiş teknolojisini destekleme kabiliyeti ve “yemiş kabuklarını kabul etme” modunda olması gerekir. Yani öz olarak kabuklu yemiş dağıtan bir siteye gireceksiniz, bir de yemiş yemeyi bileceksiniz. Anlaştık mı? Büyük ihtimalle MS Internet Explorer kullanıyorsunuz. Tarayıcınıza cookie kabul etmesini de tembihledikten sonra işe koyulalım.

ASP ile istemci bilgisayarlara çerez yollamak çok basit bir iştir. Gerçekten çok basit. ASP nin yerleşik delikanlılarından RESPONSE nin bu iş için özel bir metodu var: COOKIES. İstemciye çerez yollamak için bu metodla birlikte anahtar değerler (bir veya iki) gönderiyoruz. (bir ayrıntı: ASP de iki anahtar sadece cookies kolleksiyonunda kullanılıyor). Şimdi örnek kodu inceleyelim:

Response.cookies(“kabuk”)= “Evet, kabuk”
Response.cookies(“kabuklarim”)(“adi”) = “Mucit”
Response.cookies(“kabuklarim”)(“sevdigi_icecek”) = “Kızılcahamam Maden Suyu ve Sodası”
Response.cookies(“kabuklarim”)(“medeni_durumu”) = “Bekar!”
Response.Cookies(“kabuklarim”).Expires = Now() + 90

Gördüğünüz üzre birinci satırda tek anahtar açıyoruz ve bir değer ataması yapıyoruz. İkinci satırda “kabuklarim” anahtarı altında “adi” alt anahtarı açıyoruz ve “Mucit” değerini koyuyoruz. İlk anahtar sitemizden yollanan çerezleri gruplandırmak için. Dizinleme türünde bir şey yapıyoruz nitekim. Örneğin bir anketimiz var ve oylandığı zaman bilgisayara çerez yollamak istiyoruz. O zaman “anket” diye yeni bir anahtar altına alt anahtarlar açabiliriz. Böylece sitedemizden yollanan farklı amaçlı çerezlerin gruplandırılması sağlanmış olur. Yolladığımız çerezlerin ikinci anahtarında saklıyoruz bilgiyi. Örneğin ilk satırdaki “adi” anahtarında bir değer gönderiliyor istemciye. Aynı şekilde üçüncü ve dördüncü satırlarda da gereksiz bilgiler gönderilmeye çalışılmış. Yalnız son satırda kısmen değişik bir kullanım var. “kabuklarim” a kadar aynı her şey. Ancak “kabuklarim” dan sonra bir alt değer anahtarı açılmamış da EXPIRES alt metodu kullanılmış. Tahmin ettiğiniz gibi yemişin ne zaman çürüyüp kullanılmaz hale geleceğine (expired olacağına) karar veriyoruz. Buraya tarih/saat yani ejnebi dilde date/time veri türünde değer ataması yapılıyor. Atamaya bakarsanız Now() + 90 denmiş. Yani şimdiki andan tam 90 gün sonra bu yemiş çürüsün, kokuşsun emri verilmiş. Genelde bunu 365 yaparlar. Neden derseniz bir yıl 365 günden oluşuyormuş…:)

Peki çerezi yolladık tarayıcıya. Yani kabukları. Peki bu kabukları görmek istediğimiz zaman ne yapmamız gerekiyor. İşte o zaman ASP nin diğer delikanlı nesnesi REQUEST talip oluyor göreve. Çünkü bir şeyleri talep etmek onu görevi. Biz de ona bir emir vereceğiz. “Çerezler arasından şu anahtardaki değeri bana bir getiriver bakayım” denildiği anda size o değeri getirecektir. Bu metodu kullanmak, response ile çerez yollamaya çok benzer. Ancak bir fark vardır. Response de ilgili anahtara atama yapılır, burada ise request zaten bize bir değer getirir, biz de bu değeri işimize geldiği gibi kullanırız. Aşağıda REQUEST ile çerezden bilgi almayı görüyorsunuz. Yalnız ben burda yukarıdaki çerez yollama örneğinin icra edildiğini farzediyorum.

Adim = Request.cookies(“kabuklarim”)(“adi”)
ne_icerim = Request.cookies(“kabuklarim”)(“sevdigi_icecek”)
medeni_halim = Request.cookies(“kabuklarim”)(“medeni_durumu”)
Response.Write Adim & ” / ” & ne_icerim & ” / ” & medeni_halim
‘ sayfadaki çıktı: Mucit / Kızılcahamam Maden Suyu ve Sodası / Bekar!

İşte bu örneklerde çerezle bilgi yollama ve de çerezden bilgi alma tekniğinin ne kadar kolay olduğunu görüyorsunuz.
NERELERDE KULLANILABİLİR?

Aslında kabuklu yemişler, windows’un registry teknolojisinin ufak modelidir. Bilgisayarınıza yüklediğiniz bir çok program Windows’un registry veritabanıyla birtakım münasebetlerde bulunur. Programda varsayılan ayarlarda yaptığınız değişiklikler Windows Registry veritabanında belirlenen anahtarlarla kaydedilir. Programı daha sonra tekrar açtığınızda, değiştirdiğiniz ayarlar Registry den okunur ve programa yansıtılır. Bunlara en basit örnek pencere boyutlarıdır. Programın pencere boyutlarında yaptığınız düzenlemeler, bir sonraki açışınızda korunur. Bu ayarlar harici dosyalarda da saklanabilir, ancak Windows Registry etkili, hızlı ve profesyonel çözümdür.

İşte yüklediğiniz programların registry münasebeti ile web sitenizin cookie münasebeti arasında pek fark yok. Site kişiselleştirilmesi işte bu çerezlerle yapılıyor. Çerezler, yani kabuklu yemişler tasarladığınız, geliştirdiğiniz ASP tabanlı bir sitede ne işinize yarayabilir? Bu sorunun cevabı sizin gereksinimlerinize bağlı. Örneğin siz bir portallık yapmaya soyunduysanız kişiselleştirilebilir bir site iddianız da olabilir. Kullanıcınızın hangi alanlara ilgi duyduğunu öğrenirsiniz. Bu bir çerez olarak kullanıcı tarafına kaydedilir. Kullanıcı sonraki ziyaretlierinde ilgi alanlarına yönelik haberler, linkler ve bilgiler bulur. Ve sevinir. Çünkü kendini tanıyan, ona değer veren, ilgilerini, tercihlerini göz önünde bulunduran bir site vardır karşısında. “Müşteri memnuniyeti” diye bir şeyi çok sık duyar olduk. Müşteriye insani boyutta değer veren bankalar reklam yaptı. Pamukbank müşterilerinin doğum günlerinde kart gönderdiğini duyurdu. Sizce bunlar zor şeyler miydi? Hayır! İş sadece yaratıcı düşünmekte. ASP size bu fırsatı sonuna kadar veriyor. Çerezlerle neler yapabileceğinizi kendiniz düşünmelisiniz. Biz çok kısır bir örnek verelim, siz kendi özgün uygulamalarınızı geliştirin. Bu örnek, örnek olması nedeniyle basit ve de klasik olcak. Amaç şu: Adam siteye gircek, sitemiz adamın siteye önceden gelip gelmediğini, geldiyse kaç kez geldiğini felan tespit edecek. Akıllı bir şey olcak yani. Biz de “Aa.. nerden bildi, bu sitede gelecek var” diyerek şaşıracağız.

  Şekil1. Kişisel Ziyaret Sayacı
<html>
<head>
<title> KİŞİSEL ZİYARET SAYACI </title>
<meta http-equiv=Content-Type content=text/html; charset=windows-1254>
<meta name=Generator content=EditPlus>
<meta name=Author content=Mucit>
</head>

<body bgcolor=#FFFFFF>

<%

ziyaret = Request.Cookies(sitem)(ziyaret)

If ziyaret = “” Or Not isnumeric(ziyaret) Then
Response.Cookies(sitem)(ziyaret) = 0
Response.Cookies(kabuklarim).Expires = Now() + 365
Response.Write Siteye ilk defa geldiniz. Saolun. Bir daha gelin haaa..
Else
ziyaret = ziyaret + 1
Response.Cookies(sitem)(ziyaret) = ziyaret
Response.Cookies(kabuklarim).Expires = Now() + 365
Response.Write Siteye & ziyaret & . gelişiniz, aferin hep gelin haa..
End If

%>

</body>
</html>

 

Bitti. Bundan sonra cookie, çerez yahut kabuklu yemiş kullanımı sorun olmasa gerek. Haydi kolay gelsin.
KAYITLARI SAYFALAMAK (DB PAGING)

 

Merak etmeyin bu sefer uzatmadan direk konuya gireceğim. Deliop diyor ki “uyutuyorsun anlatırken”.. Haklı olabilir. Şimdi uyutmadan sadede girelim hadi..

KAYITLAR ÇOK FAZLAYSA

Diyelim kayıtlarınız öyle yenilir yutulur sayıda değil. Beş adam zor taşıyor. :-] Tek sayfada 500 tane kaydı görüntülemek hem estetik hem de kullanım açısından dezavantajlı oluyor biliyoruz. Bunun için kayıtları, kendi belirlediğimiz paketlere bölerek görüntülemek isteriz. Ve de her sayafada ileri-geri navigasyonla diğer kayıtlara ulaşmamızı sağlayan linkler olsun.

Evet, şimdi bu işi örneğiyle göreceğiz. Kayıtları sayafya dökmeyi öğrendiyseniz buradaki anlatılanlar size hiç karışık gelmeyecek. Çünkü yaptığımız sadece ufak bir ek işlem. Sadece tek dosyamız var: bolunmus_kayitlar.asp . Veritabanı olarak da, önceki makalelerde de kullandığımız, artık EvcilASP ye mal olmuş kisiler.mdb yi kullanacağız. Bu örnek veritabanımızı henüz edinmediyseniz buyrun.

  bolunmus_kayitlar.asp kaynak kodu
<%
‘ Sorgu cümleciğinden yön parametresi istiyoruz.
‘ Parametredeki değere göre o anki sayfa nosunu tutan
‘ oturum değişkenine uygun değeri atıyoruz.
yon = Request.QueryString(yon)
Select Case yon
Case ileri ‘ ileri gidilmişse
Session(simdiki_sayfa) = Session(simdiki_sayfa) + 1
Case geri ‘ geri gidilmişse
Session(simdiki_sayfa) = Session(simdiki_sayfa) – 1
Case Else ‘ hiç biri değilse
Session(simdiki_sayfa) = 1
End select

‘ Klasik veritabanı bağlantıları
Veri_yolu = Server.MapPath(kisiler.mdb)
Bcumle = DRIVER={Microsoft Access Driver (*.mdb)};DBQ= & Veri_yolu
Set bag = Server.CreateObject(ADODB.Connection)
bag.Open (Bcumle)

‘ Kayıt seti
Set kset = Server.CreateObject(ADODB.Recordset)
‘ recordseti açalım. cursor type özelliği olarak 1 (adopenkeyset) gönderdik
kset.Open “Select * FROM kisiler, bag, 1
‘ kayıt setinin pagesize özelliğine, bir sayfada görünecek maximum
‘ kayıt sayısını atıyoruz. biz 3 dedik bakalım
kset.pagesize = 3
‘ bir takım kontroller.. kuralsız geri veya ileri gidişlerde ilk sayfa görünsün.
If Session(simdiki_sayfa) > kset.pagecount Then
Session(simdiki_sayfa) = 1
end If
If Session(simdiki_sayfa) < 1 Then
Session(simdiki_sayfa) = 1
end If

‘ recordsete hangi sayfada olduğumuzu bildirelim..
kset.absolutepage = Session(simdiki_sayfa)

‘ navigazyon rutinimizi çağıralım.. ‘ o da bize yön linklerini hazırlasın.
Call yoneltgen (Session(simdiki_sayfa), kset.pagecount, yon_linkleri)

%>

<%= yon_linkleri %> [ <%= Session(simdiki_sayfa) & of & kset.pagecount%> ]
<br><br>

<table border=1>
<tr>
<% For k = 0 to kset.fields.count-1 %>
<th><%= kset.fields(k).name %></th>
<% next %>
</tr>
<% i=1 %>
<% Do While Not kset.eof And i<=kset.pagesize %>
<tr>
<% For k = 0 to kset.fields.count-1 %>
<td><%= kset.fields(k) %></td>
<% next %>
</tr>
<% kset.movenext %>
<% i = i + 1 %>
<% Loop %>
</table>
<br>
<%= yon_linkleri %>

<%
kset.Close
Set kset = Nothing
bag.Close
Set bag = Nothing
%>
<% ‘ ****** %>
<%
‘ yön linklerini hazırlayan Sub rutinimiz…
Sub yoneltgen(simdiki, hepsi, yon_linkleri)
makro = Request.servervariables(THIS_PAGE)
If simdiki > 1 Then
str1 = <a href=“”” & makro & ?yon=geri“” >[ < Geri ]</a>
end if
If simdiki < hepsi Then
str2 = <a href=“”” & makro & ?yon=ileri“” >[ İleri > ]</a>
end If
yon_linkleri = str1 & & str2
End Sub
%>

 

 

BİR TAKIM AYRINTILAR…

İlk olarak bir SELECT…CASE çok durumlu kontrolümüz ile scriptimizin URL siyle gönderilen yön parametresinin değerini inceliyoruz. Eğer “ileri” değeri gönderildiyse session(“simdiki_sayfa”) oturum değişkenimizin değeri bir artırıyoruz. “geri” değeri gelmişse tam tersini. Bu koşullara uymayan bir durumda (case else) sayfa sayısını tuttuğumuz değişkene 1 değerini atıyoruz. Yani çağrılan sayfanın ilk sayfa olması sağlanacak bu şekilde.

Sonra alışık olunan veritabanı bağlantımızı kuruyoruz. Bağlantı nesnemizi açıyoruz. Hemen ardından ADO nun Recordsetinden bir adet oluşturuyoruz. Kurguladığımız SQL cümlesiyle recordset içinde herhangi bir kayıt topluluğu oluşturuyoruz. Ve sonra zurnanın zırt dediği yer (ulan bunu kim söylerdi be? Sanırım Fizik hocasıydı..) gelmekte. Recordset nesnemizin Pagesize adında bir özelliğini kullanıyoruz. Bu özelliğe tek sayfada maximum kaç kayıt görünmesini istiyorsak sayısını atıyoruz.

kset.pagesize = 3

Biz 3 tane kayıt görünsün diye buraya 3 yazdık. Siz 5 tane görünmesini istiyorsanız buraya 3 değil de 5 yazın olur mu? (Ehu EHu.. eğleniyorum biraz, kusura bakmayın)

Ardından iki adet denetim yapıyoruz. Adam son sayfadayken “ileri” yönünde istem yaparsa, (daha ilerisi olmayacağına göre hata oluşacak) veya ilk sayfadayken “geri” yönünde istem yaparsa (ki yine hata oluşacak) sayfa numarasını 1 yapıveriyoruz. Yani ilk sayfadaki kayıtar görünsün diyoruz. Buradaki denetimlerde (IF..THEN) recordset in pagecount özelliğinin döndürdüğü değeri kullanıyoruz. kset.pagesize = 3 diyerek bölümlediğimiz kayıtarın kaç sayfadan oluşacağı kset.pagecount özelliğine sayısal olarak atanıyor. Eğer recordsette 8 kayıt varsa, 3 erli dilimlere bölersek 3 sayfadan oluşacak (pagecount 3 değeri döndürecek) demektir. Böylece şimdiki sayfa ile toplam sayfa sayısı arasındaki ilişkiye göre denetimimiz gereken işlemi yapıyor.

Ve recordsetin başka bir özelliği.
kset.absolutepage = Session(“simdiki_sayfa”)
Bu özellik, cursoru hareket ettiriyor. Ama neye göre? Bulunan sayfa numarasına göre. O an ilk sayfadaysak cursor (imleç) 1 inci kayıt diliminin ilk kaydına haraket ediyor. Örneğin 3. kayıt sayfasına geldiysek cursor hopppa 3. dilimin en başına gidecek. Her sayafa maximum 3 kayıt varsa, (3*2)+1 = 7. kayda gidecek. Nasıl hoş değil mi?

Buraya kadar önemli işlerin çoğunu yaptık. Şimdi sıra koşula uyan kayıtları dökmeye geldi. Ancak önce vatandaşların sayfalar arasında dolaşmasını sağlamak için yön linkleri koymalıyız. Birinde “ileri” yazsın, diğerin de “geri”. Ve tıklandıklarında scripti uygun URL parametresiyle tekrar çağırsınlar.

Bu linkleri oluşturmak için bir sub rutin kullandım. Ne gerek vardı? Demiştim ya ufak şeyleri bile sub layarak programlama havasından kopmamış oluyorsunuz. Tavsiye ederim. Buradaki sub rutinimize iki parametre (input) gönderiyoruz, bir parametre (output) alıyoruz. Birinci parametre şimdiki sayfanın numarası, ikinci toplam sayfanın numarası. Aslında göndermesek de sub rutinimiz global değişkenleri kullanabilecektir. Ama göndermeyi de ihmal etmeyin. Bu sub ın ne işlev yaptığını, hangi değişkenleri kullandığını takipte faydalı olur. Gelen değer ise bir string. Yani oluşturulan HTML yön linkleri. Sub rutinimiz şimdiki sayfa ve toplam sayfa değerlerine göre kontrolleri yapıp “ileri” ve/veya “geri” linki oluşturuyor. Ve bunu bir string değişkenle ana program bloğuna gönderiyor.

Ve kayıtlar döngülerle tablolanıyor.
FOR…NEXT döngümüzle field (alan) lerin adlarını yazdırıyoruz. kset.fields.count, sütun (field) sayısını döndürür, kset.fields(index).name ise index.inci sütunun adını döndürür.
Do While Not kset.eof And i<=kset.pagesize diye bir ön kontrolle döngüyle de sırayla kayıtlar tabular data lara dökülüyor. ( kset.fields(index) özelliği indexinci alandaki değeri döndürür. )

Açılan nesneleri kapatıyoruz. Evimize gidiyoruz. KİB.
 

KISSADAN HİSSE

*** İmage tipinde n tane veriyi ASP dosyasında barındırırken, bu bilgiyi bir HTM sayfa içinden çağırmak istedğimizde RESPONSE.BINARYWRITE komutunu kullanırız
*** asp.dll tüm scriptleri kabul eder. Öncelikle asp.dll e hangi scripti kullandığınızı belirtmeniz gerekir. Bunu asp örneğimizde en başa yazarız. Mesela asp de vbscrpt kullanacaksak. <% @ Language=VBScript %> yazarız.
*** ASP scriptlerinizi yazarken Response.Redirect, Response.Cookies gibi HTTP üst bilgilerini etkileyen deyimler kullanırsanız şu gibi bir hatayla mutlaka karşılaşmışsınızdır: “Üstbilgi Hatası HTTP üstbilgi değişiklikleri, sayfa içeriği yazılmadan önce yapılmalıdır. ” Bu hata, sözünü ettiğimiz deyimlerin, sayfanın html içeriği yazıldıktan sonra kullanılmasından kaynaklanıyor. Bunu engellemek için script sayfalarınızın en üst satırına <% Response.Buffer = True %> deyimini ekleyin. Böylece scriptiniz tamamen icra edilmeden istemci tarayıcıya gönderilmez. Yani tamponlanır. Aklınızda bulunsun.

 

K A Y N A K L A R

 

Nadir “Türkçe” İçerik

Dünya’da ASP türküleri söyleyen yüzlerce site var. Ancak bunlardan çok azı Tükçe… Buradaki adreslerin ileride daha da fazlalaşması dileğiyle…

ASPTURK.COM : Yerli ASP sitesi. Ana yapısı Soru-cevap diyaloguna dayanıyor. Faydalı bir site. (şu anda ulaşılamıyor)

EMRAH.COM : Access ve ASP hakkında doyurucu ve ciddi makalelere ulaşabilirsiniz.

PCLIFE ASP OKULU : Saygın bir derginin sitesinde açılan ASP okulu. ASP hakkında temel bilgilere, ASP nesnelerinin anlatımlarına, makalelere ulaşabilirsiniz.

MMKARA : ASP, SQl Server, MS TransactionS vs.. İleri seviye anlatımlarla inşa halinde bir site.

SORUCEVAP.COM : Bir çok alanda soru-cevap şeklinde bilgi ve deneyim paylaşımına olanak veren bir site. ASP de sitede yer alan bölümler arasında. (Yenileniyor!)

MAXIASP : Uyanış başladı. ASP siteleri artıyor. Maxipowerin zengilneşen ve gitgide gelişen ASP sitesine buyrun.

PROGRAMLAMA.COM : Programcılar için zengin Tükçe kaynak… ASP ye ayrılan bölümde henüz çok az doküman var.

  İngilizce ve dolu içerik

LEARNASP
ASP101
ASPFREE
ASPIN
POWERASP
4GUYSFROMROLLA
LEARNASP

  Diğer Kaynaklar

DELPHITURK.COM : Türk Delphi tutkunları için bir başkadır bu site. Yunan Tanrıları’ndan bugüne miras kalan en kıymetli şey: Delphi. Bu site, Delphi’ye anadilimizde kazandırılmış bir kaynak. Ben çok beğendim. Ustalar, delphi ödevlerimizde umarım yardımcı olurlar 🙂

WEBDERSLERİ.COM : Düzenli içeriğiyle göze çarpıyor. Tüm kulvarlarda Türkçe kaynak sitelere ulaşmanız mümkün. Bence bu site, önemli bir boşluğu dolduruyor. “Özgür, abartısız, uzun soluklu bir Web için bilgisini paylaşanlar” size çok teşekkür eder.

BEDAVAMASTER.COM : Üfff.. Çok geniş bir kaynak. Aradığınız her konuda özellikle en bedavalara ulaşabileceğiniz, zengin bir veritabanına sahip kalite bir site. ASP ile ilgili 20 den fazla siteye link mevcut. Webmimarlar mutlaka gezmeli.

BEDAVA ASP Sunum

Bugün itibariyle sınırlı sayıda, bedava ASPdestekli bulundurma hizmeti veren yer var. İlginize saygıyla sunarız.

EWEBCITY.COM : Bedava, reklamsız. Sadece “Access” database kullandırıyor. 30 MB alan veriyor. Site adresiniz örneğin : http://www5.ewebcity.com/username şeklinde veriliyor.

DOMAINDLX.COM : Bedava, ama reklamlı. PHP ve aspemail bileşeni kullanımına da izin veriyor. Site adresiniz örneğin : http://username.domaindlx.com şeklinde veriliyor.

WEBSAMBA.COM : FTP ile dosyalarınızı upload(bindirme) yapmanıza müsade eden bir servis. Site adresiniz örneğin : http://www.websamba.com/username şeklinde veriliyor.

FREESQLHOST.COM : FTP erişim izni bulunan bir servis. Deneyin.

  PARALI ASP Sunum

Eğer paranız varsa, sizin için host problemi de yok demektir. Ucuz meblalarla ASP desteği veren NT server kullanan çok servis bulabilirsiniz.

SOFTCOMCA.COM : ASP-Frontpage2000 s.e desteği, 20 pop-up e-mail kutusu, limitsiz e-mail yönlendirme vs.. En önemlisi ayda 10$ a temiz ve tatmin edici bir hosting hizmeti.

EDİTÖRLER

 

ASP EDIT : Bu editör de paylaşıldığı için açılışta size sevmediğiniz muhabbetlerden dem vuruyor. “Remember the shareware component” diye bir vecizeyle beraber “unregistered version” olan programınıza giriyorsunuz. Programda gerçekten nefes kesen bir sihirbaz teknolojisi var. Adeta ASP de yazacağınız herşeyin sihirbazı var. ADO, Database, Cookie, SQL, Include File, IF..Then..Else vs.. Biraz abartıp sayfaya koyduğunuz “yorum” lara bile sihirbaz yapmışlar. Office uygulamarından tanıdığımız köşede durup güya kendimiz yalnız hissetmememizi temin eden, her halinden âlim olduğu anlaşılan bir adam da ASP EDIT’in getirdikleri arasında. Hollanda dilini biliyorsanız programınız size kendini Hollanda diliyle de sunabiliyor. Ayrıca programın içinde basit bir GIF Animator ve Graphic Optimizer de mevcut. Hem Movement Recorder ile haraketlerinizi kaydedip sonra aynısını programa yaptırabiliyorsunuz. Demek isterim ki programda çok detaya inilmiş. Bir deneyin.
ASP EXPRESS : Program spesifik bir ASP editörü. Kullanacağınız bir çok standart ifade, araç çubuğu kullanılarak sayfaya eklenebiliyor. Menülerde bir çok kod şablonunu bulabiliyorsunuz. ASP menüsünde çeşitli sihirbazlar da mevcut. Örneğin ADO veritabanı ve CDO mail asistanları işinizi kolaylaştırıyor. Javascript menüsünden sık kullanılan kod yapılarına ulaşıyorsunuz. Program sizinle paylaşıldığı için (shareware) açılırken ve kapanırken başınızın etini yiyor.

EDITPLUS : Hoş ve basit bir arabirimi var. Windowsun işlevsiz not defterine paydos demenin vakti gelmedi mi? EditPlus ile HTML, CSS, CGI, JAVA, ASP dosyalarınızı düzenleyebilirsiniz. Kodları renklendirerek (highlight) ifadeleri birbirinden kolayca ayırt edebilmenizi sağlıyor. AutoComplete özelliği sayesinde çok kullandığınız bir kod yapısını veya bloğunu, düzenleme sırasında yazacağınız küçük bir anahtar kelime ile otomatik olarak kodlarınızın arasına dahil ediyorsunuz. Gayet hızlı çalışan bu editörün HTML için bir araç çubuğu da var. Elinizin altında olması salık verilir.
GASPY : Güzel bir editör. Delphi’mtırak bir edit penceresi var. Kullandığınız procedure’lar sol tarafta listeleniyor. Güçlü bir “syntax highlighting” mevcut. Ayrıca kendinizi adeta bir program yazıyor gibi hissetmeniz için Delphi’deki “Run” tuşu konulmuş. Böylece düzenlediğiniz sayfayı denemek için, kaydedip çıkıp browsere yazıp çağırmak yerine sadece bu tuşa basıyorsunuz. Otomatik Tamamlama özelliği de var.

HOMESITE : Profesyonel bir HTML editörü. Ben daha çok HTML tablo tasarımlarında kullanıyorum. ASP kodu yazarken tercihim EDITPLUS.