******************************************************************************************************************************************
Bu Sitedeki Tüm Yazılar Ücretsizdir. Sadece Sizden İstediğimiz "Allah Bu Siteyi Hazırlayandan Razı Olsun" Amin... Demenizdir.
************************************************************************************************************************************ www.odeveson.blogspot.com adresindeki yazı ve makalelerin Kaynak göstermeksizin Tamamı veya Bir Kısmının KOPYALANMASI YASAKTIR.
8 Haziran 2008 Pazar Gönderen admin
ASP'ye Giriş





ASP yani
Active
Server Pages Microsoft firması tarafından klasik HTML sayfalarına dinamik bir
yapı kazandırmak amacıyla ortaya çıkarılmış bir programlama dilidir. Internet
yeni bir teknoloji olduğundan insanlar hayal gücü sınırlarını bu yeni teknoloji
ile zorlamaktadırlar. ASP de bu yeni teknolojinin yeni bir parçası olmuştur.


ASP ile web sayfalarınızı
dinamik hale getirebilirsiniz, bunu yapmak için ASP sunucu(server) tarafında
sizin yazmış olduğunuz kodları çalıştırır ve istemci(client) tarafına ona özel
görüntülenmesini istediğiniz sayfayı görür. Şimdi ilk başlangıç için karışık
görünebilir bu yüzden isterseniz web progracılığından biraz bahsedeyim.


Web programcılığı, W3C
tarafından standart haline getirilen HTML(Hiper Metin Anlamlandırma Dili) ile
start almış ve CGI, JavaScript, ASP, VRML gibi dillerle devam etmiştir. Şimdi bu
dillerin farkı şudur; bu dillerin bazıları sunucu tarafında bazıları ise istemci
tarafında çalışmaktadır. İlk olarak HTML’i ele alalım; HTML dosyarınının
içeriğini hepimiz biliyoruz. Bu içerik bağlandığınız sunucu tarafıdan
bilgisayarınıza yollanır ve sizde bulunan web görüntüleyici(Internet Explorer,
Netscape gibi.) tarafından size sayfa anlamdırılarak gösterilir. Yani tüm
görüntüleme işlemini sizin bilgisayarınız yapar. HTML’den sonra çıkan Javascript
teknolojisi de buna yakındır. Yani dosyalar bağlandığınız bilgisayar tarafından
size yollanır ve siz onları bilgisayarınızda düzenleyip görüntülersiniz. Dikkat
ettiyseniz javascript(js) içeren sayfalar diğer sayfalara göre daha geç
yüklenmektedir, çünkü tüm o js kodları sizin bilgisayarınızda çalıştırılır ve
tabi bu da performans kaybına yol açar.


ASP ise tamamen İstemci
Tarafında (server side) çalışan bir programlama dilidir.

Tüm kodlar sunucu tarafında çalıştırılır ve size sadece HTML kodları gönderilir.
Böylece performans olarak büyük bir avantaj elde edilmiş olur, tabi bu web
sunuculuğu yapacak bilgisayarınızın hızlı olmasına da bağlıdır. Örnek olarak
OSYM’yi düşünün sizden aldığı bir ösym numarası ile orada bir program çalıştırır
ve bu program size sadece girmiş olduğunuz numaraya ait sonucu bir html dökümanı
olarak döndürür.


Sunucu taraflı
programlamanın diğer bir avantajı ise güvenliktir. Örneğin js kodları
Kaynağı görüntüle dediğinizde görülebilmektedir. Eğer siz güvenlik açısından
kullanıcıların görmemesini istediğiniz bir program çalıştırıyorsanız sunucu
tarafı programlama yapmalısınız. Bu tip programlamanın ilk örneği CGI ile
gerçekleşmiştir. Perl dili kullanılarak üretilen bu kodlar pekçok kişi
tarafından rahatça kullanılamamıştır çünkü CGI çalıştırmak için hosting
yaptığınız yerde bu desteğin verilmesi gerekmektedir. Fakat asıl en büyük sorun
bu kodları geliştiriken sizin hiçbir şekilde deneyememiz olmuştur. Çalıştığından
emin olmak için programı sunucuya yüklemeniz gerekmektedir.


Şimdi bahsedeceğim diğer
bir özellik de ASP geliştirmede kullanılan diller. En yaygın olarak kullanılan
script dili VBScript’tir. Hepimiz ilk programcılık günlerimizi herhalde
qbasic kodu yazarak geçirmişizdir. VBScript de temel itibariyle Visual Basic
dilini kullanarak program üretmemize yarar. Bunun yanında JavaScript de
kullanılabilir, fakat günümüzde js’yi kullanarak program geliştirmemizi sağlayan
yeni bir dil JSP(Java Server Pages) bulunmaktadır.



ASPileNelerYapabilirsiniz





Asp’nin avantajlarıdan ve çalışma mantığından bir önceki konuda söz ettim. Bu
avantajlar göz önüne alındığında elelktronik ticaret için en kullanışlı dil olma
avantajı vardır. Çünkü güvenlik bu tür uygulamalarda çok önemlidir ve Asp de
bize bu güvenliği sağlamaktadır. Diğer avantajı ise çok kolay bir dil olmasıdır.
Gerçekten bir perl ile program geliştirebilecek kişi sayısı sınırlıdır ama
Asp’yi biraz programlama bilgisi olan herkes çözebilir ve çok kısa zamanda iyi
işler ortaya koyabilir.


Asp ile veritabanına
bağlanıp gelen verilerden faydalanarak sayfalar üretebilirsiniz. Bunun için SQL,
Access veya Oracle kullanabilirsiniz. ODBC bağlantısı yapabileceğiniz tüm
veritabanlarına Asp kullanarak erişebilirsiniz.


Asp ile her şeyin başında
dinamik sayfalar hazırlayabilirsiniz. Böylece her kullanıcıya farklı bir sayfa
gösterebilirsiniz. Html ile bunu ypamanız imkansızdır ancak farklı sayfalar
yaparak bu sorunu çözebilirsiniz. Bu da zamandan ve yerden büyük kayıp demektir.


Asp kullanarak elinizdeki
bilgiyi kolayca diğer insanların kullanımına açabilirsiniz. Sizde bulunan bir
uygulama programını Asp ile entegre çalıştırabilirsiniz. Bu da sizin B2B ve B2C
uygulamalar geliştirmenizi sağlar.




ASP
kullanan bir tasarımcı olarak, esasında ASP’nin nesneleri ile bir şeyler
yaparız. Başka bir deyişle, ASP kodlarımız bu nesnelere yöneliktir. Onları
kullanma ve bir sonuç alma veya bir sonuç aktarma amacına yöneliktir. ASP’nin
nesneleri altı grupta toplanır:





Application (Uygulama):

Bir ASP sitesi, gerçekte bir program olarak görülür. Bu, HTML/CGI geleneğine
aşina olan tasarımcılar için yeni bir kavram. ASP’yi bulan üstatlar, bir
ziyaretçi, bir ASP sayfasından girerek, sitede gezinmeye başladığında, onu bir
programı işleten bilgisayar kullanıcısı olarak görüyorlar. Böylece sitemiz, her
ziyaretçinin karşısına çıktığında “bir program çalışmış” gibi sayılıyor. Bu
yaklaşımın Web tasarımcısı olarak bize harika imkanlar sunuyor. Bunları daha
sonra ele alacağız hiç merak etmeyin...



Session (Oturum) :

Bir ziyaretçi sitemize geldiğinde, hangi sayfamızı talep ederse etsin, bu
bağlantı ASP açısından bir oturum sayılır. Her oturumun belirli bir süre devam
eden özellikleri, değişkenleri ve değerleri vardır. Site tasarımında oturum
özelliklerinden geniş ölçüde yararlanacağız. Ancak ‘Application’ nesnesi ile
karıştırılmaması çok önemli.



Request (Talep):

Browser’dan server’a ulaşan bütün bilgiler, Request (Talep) nesnesinin
öğeleridir. Bu nesneyi kullanarak, istemciden gelen her türlü HTTP bilgisini
kullanabiliriz.



Response (Karşılık):

Server’dan ziyaretçinin bilgisayarına gönderdiğimiz bütün bilgiler, çerezler (cookie)
ve başlıklar (header) Response (karşılık) nesnesinin öğeleridir. Bu nesneyi
kullanarak, ziyaretçiye göndermek istediklerimizi iletebiliriz.



Server (Sunucu):

ASP, Web Server programını bir nesne olarak ele alır ve onun bize sağladığı
araçları ve imkânları kullanmamızı sağlar.



ObjectContext (Nesne
Bağlamı):

Microsoft’un Transaction Server (MTS) programının sunduğu hizmetlere erişmemizi
sağlar. MTS, ASP sayfaları içinden, uygulama programlarından yararlanmamızı
sağlar. ASP uzmanlığınızı ileri düzeylere ulaştırdığınız zaman MTS ve
ObjectContext nesnesinden yararlanabilirsiniz.


• ‘ karakteri (Shift+ 2 tuş kombinasyonu) ile başlayan
satırlar açıklama satırlarıdır. ASP.dll, bu işaret ile karşılaştığı satırları
işleme sokmadan geçer.


• Az çok bildiğiniz gibi ASP kodları <%..... %>
işaretleri arasına yazılırlar. ASP.dll’e yönlenen bir ASP dosyasının satırları
teker teker okunurken bu işaretle başlayan bir satır görülünce “İşte yine
başlıyoruz... Bu bir ASP kodu ve bu sefil kod, ben olmadan hiçbir işe yaramaz”
diyen muzur .dll’imiz işbaşı yapıyor; aradaki kodları icra ediyor ve sonuçları
bize gösteriyor.


• Eğer kodumuz içerisinde bir değişken tanımlamamız
gerekir ise bunu Dim ifadesi ile yaparız. (Örnek: Dim SiraNo,Adi,Soyadi). Birden
fazla değişken tanımlamamız gerekirse aralarına virgül koymalıyız.















JavaScript ile Tarih











<% Dim metin



metin="

Merhaba...Yine
ben...Ne o hala asp mi çalışıyorsunuz...Sizi tebrik ederim.Çok
azimlisiniz...

"


%>



<%


response.write metin


%>




<%


metin="

Heyyy...
Unuttunuz mu benim adım değişken.Benim değişmemden daha normal ne olabilir ki
???

"


%>


<%


response.write metin


%>







İlk önce metin denen kavramın bir değişken
olduğunu belirttik. Ardından metin değişkenine bir değer atadık.





<%



Dim SiraNo





SiraNo=3265





%>





Ardından ‘Response’ nesnesinin ‘write’ metodunu kullanarak bunu sayfaya
yazdırdık. İşte bu kadar kolay. Madem bu ‘şey’in adı değişken, değiştirdik ve
yeniden yazdırdık...




UltraEdit’i Nasıl
Kullanacağız?




Kullanımı gayet basit ve her şeyden öte oldukça hızlı çalışan bir editör...
Kurulum esnasında (daha doğrusu bitiminde), size kısayolunu nerelere koymak
istediğinizi soracak. mutlaka “Sağ tıklayınca açılan menüye” seçeneğini
işaretleyin ki, açmak istediğiniz dosyayı sağ tıkladığınızda “Edit With
UltraEdit” yazısını görebilesiniz. Programı çalıştırdıktan sonra, araç
çubuğunda, View/Set font bölümünden yazıtipinizi Türkçe desteği bulunan bir
fonta ayarlayın.





ODBC



Kolları sıvayıp, ASP’ye kodu yazmaya başlamadan önce yapmamız gereken bir iş
daha var: ASP sayfaları geliştirme ortamımızda, ODBC (Open Database Connectivity
- Açık Veritabanı Bağlantısı) olması gerekir.



Windows 98, 95 (OSR2) veya NT4.0 işletim sisteminizde Denetim Masası’nda ODBC,
ODBC32 veya “ODBC Veri Kaynakları (32 Bit)” adlı bir simge görüyor olmalısınız.
Bunu açın, Sistem DSN sekmesini ve açılan pencerede göreceğiniz ‘Ekle’ düğmesini
tıklayın. Buradaki Access, dBase, Excel, FoxPro, Paradox sürücüleri 4.00.3711.08
veya daha büyük mü? Değilse, Microsoft’un sitesinden (www.microsoft.com/data/download.htm)
Microsoft Data Access Components (sürüm 2.1.1.3711.11 GA, 6.2 MB) güncelleme
dosyasını indirip sisteminizi güncelleştirin. Windows 2000 kurulu sistemlerde
bunu yapmaya gerek yok. Böylece sisteminiz, ileride yazacağımız
veri-yönlendirmeli Web uygulamaları için hazır hale gelmiş olacaktır.









ASP‘nin Derinliklerine
Doğru


Hemen
hemen bütün dillerin birer derleyicisi vardır. Yani yazdığınız programı “ .exe ”
ya da “ .dll ” haline getirmeden önce sınayabileceğiniz bir platform. Bu
platform o kadar akıllıdır ki, yazım hatalarınızı veya hatalı kodlamalarınızı
anında tespit eder ve size sormaya bile gerek duymadan anında düzeltir.


ASP
kodları yazarken böyle bir şansınız maalesef yok. Kodlar zaten düz yazı
metinlerinden oluşuyor ve direkt yorumlayıcı tarafından okunarak sonuç bize
gösteriliyor.Kısacası ya doğru yazmışsınızdır, mantık hatası da yoksa kod
sorunsuca çalışır; ya da bir yerlerde küçük bir şeyi yanlış yazmışsınızdır ve
kodunuz çalışmaz. VBScript komutları, anahtar kelimeleri ve değişken adlarının
büyük harf-küçük harf olması önemli değildir.



Örneğin ileride ayrıntılı bir şekilde göreceğimiz ‘for’ döngü deyimini aşağıdaki
bütün şekillerde yazabiliriz.




For kisiSayisi=
1 To 6



FOR KISISAYISI=1
TO 6



for kisisayisi =
1 to 6





VBScript’çiler
genellikle komutların birinci harfini büyük yaparlar: For gibi. Değişken
adlarında ise kendinize anlamlı gelen bir biçim tutturabilir ve öyle devam
edebilirsiniz.



Eğer bir kod
satırı çok uzun geliyor ve daha sonra anlaşılması imkânsız derecede uzuyorsa, bu
satırı alt çizgi (_) ile aşağı satırda devam ettirebilirsiniz. Örnek:




<%


If AdayNumarasi > 100 And _



AdayNumarasi <>


............................


%>




Bir de





<%



Response.write
(“AdayNumarasi”)



%>





Yerine
<%=AdayNumarasi%> yazılabilmesi vardır ki bu aslında bir yazım kuralı olmamakla
beraber işlerimizi oldukça kolaylaştıracak bir özelliktir. Bir kod ne kadar kısa
ve sade olursa o kadar güzel demektir. İçinden çıkılmaz ve karmaşık
kodlamalardan ne kadar kaçınırsak hata yapma ihtimâlimiz de o kadar azalacaktır.


Değişim rüzgarının etkisinden bir türlü kurtulamayanlar:
DEĞİŞKENLER



Programcılıkta işlemlerimizi değişkenlerle yaparız. değişkeni bir kap gibi
düşünebilirsiniz. Sözgelimi “aylar,” değişkenin adı ise bu değişkenin değeri
Ocak, Şubat, Mart, vs. olabilir. Her değişken, türüne göre, ya bir ya da daha
fazla değer tutar. Adından da anlaşılacağı gibi değişkenin değeri değişir! Bu
değişikliği biz yapabiliriz, programın kendisi de yapabilir.



VBScript’te, bir çok başka bilgisayar programlama dilinden farklı olarak
değişkenlerin tanımlanması veya “beyan edilmesi”, “boyutlandırılması” gerekmez.
Belirtilmemiş, önceden tanımlanmamış bir değişkene değer atamaya kalkarsanız,
VBScript bunu mükemmel şekilde kabul eder. Fakat bu kötü bir programcılık
örneğidir. İyi programcılık değişkenlerin önceden tanımlanmasını gerektirir.
Bunu “DIM” komutuyla yaparız. DIM, Dimension (boyutlandır) kelimesinden
kısaltılmıştır. Pek akıllıca görünmese de bu komut, bilgisayarın değişken yeri
olarak bir bellek alanının boyutunu belirtmesini sağlar.

Örnekler:




<%


DIM Gun, Ay, OgrenciAdi,
OgrenciNo, Not


Gun = “Persembe”


Ay = “Mart”


OgrenciAdi = “Selim”


OgrenciNo = 1080 ‘sayısal
tanımlamalarda tırnak işareti kullanmadığımıza dikkat edelim.


Not = 4


%>



Şimdi
burada Gun, Ay, OgrenciAdi, OgrenciNo, Not adıyla beş değişken oluşturduğumuzu
ve bunlara sırasıyla “Persembe”, “Mart”, “Selim”, “1080” ve “4” değerlerini
atadığımızı görüyorsunuz. Bu noktada VBScript yorumlayıcısına sorsanız, “Peki,
söyle bakalım. Gun değişkeninin değeri nedir?” Değişken isimleri, mutlaka harfle
başlamalıdır; içinde noktalama işaretleri bulunamaz ve uzunluğu 255 karakteri
geçemez.





Daha şimdiden kötü programcı olmayın !!!



ASP,
sitemize giren bir ziyaretçiye bir oturum (Session) açar ve bazı değişkenleri
oturum boyunca aklında tutar. Bir sayfada kullandığınız bir değişkeni, daha
sonraki sayfada kullanabilmek için, bu değişkenin değerinin yeni sayfada
değişmemesi gerekir. ASP programı yazarken, bazen gelişigüzel değişkenlere değer
atayabilirsiniz. Neden? O anda aklınıza değişken adı olacak kelime gelmediği
için! Bu değişken adını daha önce kullanmışsanız ve içinde biraz sonra
kullanacağınız bir değer varsa, değer değiştirilmiş olacaktır. VBScript,
savurgan ve dağınık programcılığı önlemek için OPTION EXPLICIT imkanını verir.
Bir ASP sayfasının birinci satırı olarak



<% OPTION EXPLICIT %>




yazarsanız VBScript DIM komutuyla belirlenmemiş değişken kullanmanıza izin
vermez; kullanırsanız hata verir ve durur.


Bu
ifadenin işinize çok yarayacağı bir diğer nokta, kodda değişken adını yazarken
hata yapmanızı önlemektir. VBScript sizin hata yaptığınızı bilemeyeceği için
yanlış kelimeyi yeni bir değişken sayacaktır. Değer atamadığınız bu yeni
değişkeni kullandığınız yerlerde ya programınız hata verir, ya da kendisine
doğru görünen işlemler yapar; beklediğiniz sonucu elde edemezsiniz. OPTION
EXPLICIT, yanlış yazdığınız değişkeni yeni değişken sayarak önceden
tanımlanmamış değişken kullandığınızı düşünerek, duracaktır.



Peki,
değişkenimizi tutup farklı bir şekilde tanımlarsak neler olur:




<%


DIM Gunler(31), Aylar(12),
Ogrenciler(210), Notlar(10)


%>



Bu
yöntemle oluşturduğumuz değişkenler, aslında birer “havuz” olup birden fazla
değer tutabilir. Yani:



<%


DIM Gunler(7), Aylar(12),
Ogrenciler(21), Notlar(10)


Gunler(1) = “Pazartesi”


Gunler(5) = “Cuma”


Aylar(10) = “Ekim”


Ogrenciler(12) = “Selim”


Notlar(4) = 4


Notlar(5) = 5


%>



Bu
durumda içinde 7 ayrı değişken tutabilecek olan Günler değişkeninin 1 numaralı
olanının değeri “Pazartesi”, 5 numaralı olanının değeri ise “Cuma” olacaktır.
Aynı şekilde 12 değer tutabilecek olan Aylar değişkeninin 10 numaralı olanının
değeri “Ekim”, 100 farklı değer tutabilecek olan Ogrenciler değişkeninin 12
numaralı olanının değeri “Selim” ve nihayet 10 ayrı değer tutabilecek olan
Notlar değişkeninin 5 numaralı olanının değeri ise 5 olacaktır. Böyle, birden
fazla değer tutabilen değişkenlere Dizi Değişken veya Array denir.




Dizi Değişkenler (Array fonksiyonu)




VBScript dili kullanılmaya hazır bir çok fonksiyon içerir. Bunlardan biri olan
Array ile, kolayca dizi değişken oluşturabiliriz.



Diyelim ki, Aylar(12) dizi-değişkenini yıl içerisindeki ayların adları ile
doldurarak oluşturmak istiyoruz:



<%


Dim Aylar = Array (“Ocak” ,
“Şubat” , “Mart” , “Nisan” , “Mayıs” , “Haziran”, “Temmuz” , “Ağustos” , “Eylül”
, “Ekim” , “Kasım” , “Aralık” )


%>



şeklindeki satırlar ile hem dizi-değişkeni oluşturabiliriz; hem de değerlerini
atayabiliriz.


Bu
yapıda oluşturduğumuz dizi değişkenin üyelerini daha sonra sıra numaraları ile
çağırabilirsiniz. Örneğin:



<%=Aylar(3)%>



bize
Nisan’ı verir. Neden?


Çünkü
hayatlarının büyük bölümünü bilgisayar başında ve havasız ortamlarda geçiren,
çoğunlukla asosyal kişiler olan dil tasarımcıları, sayı saymaya biz normal
insanlar gibi 1’den değil 0’dan başlarlar. Dolayısıyla, Aylar dizi-değişkeni
Aylar(0)’dan başlar!




Burada aklınıza şu soru gelebilir: Dizi değişken oluşturacağımıza, neden
“ogrenci1”, “ogrenci2”, “ogrenci3” ya da “Gunler1”, “Gunler2” diye değişkenler
oluşturmuyoruz ve bunlara değerler atamıyoruz?


Her
şeyden önemlisi dizi değişkenlerde bir değişkene numarasıyla atıfta
bulunabilirsiniz. Numara yerine bir başka değişkeni kullanabilirsiniz. Örneğin,
OgrenciNo değişkeninizin değeri 12 ise



<%


....


If Ogrenciler(OgrenciNo) =
“Selim”


...


%>




şeklinde bir döngü ile aradığınız öğrencinin Selim olup olmadığını
sınayabiliriz.


Başka
programlama dillerine özellikle Visual Basic’e âşinâ olanların aklına şöyle bir
soru gelebilir: “VBScript’te değişkenin metin mi, sayı mı olduğunu ayırt etmiyor
muyuz?” Başka programlama dillerinde bir değişkenin değeri harf ve rakamlardan
oluşuyorsa, yani matematik işlem yapmaya elverişli değilse bunlara String
(Alfanümerik, karakter değerler, dizgi) denir. Programlama dillerinde bir de
matematik işlem yapmaya elverişli değişken türü vardır: Sayı (Number). VBScript,
bir değişkene alfanümerik (karakter, metin) olarak atadığınız değeri çift tırnak
içine almanızı ister. Sözgelimi Kediler(12) değişkeni için Minnoş değerini
atamak istiyorsunuz. Minnoş kelimesini çift tırnak içine almak zorundasınız.
Sayı olarak kullanacağınız değerleri ise tırnak içine almazsınız. (Sayı olarak
kullanacağınız değerlerin sadece rakam olabileceğini hepimiz biliyoruz!)



Fakat, işleri karıştıran nokta, VBScript açısından değişken türü diye bir şey
olmamasıdır. Visual Basic, küçültülüp script dili haline getirilirken, değişken
türü özelliği alınmayınca, ortaya işleri karıştıran (belki de oldukça
kolaylaştıran) böyle bir durum çıkmış bulunuyor. Karışıklık, çift tırnak içinde
verdiğiniz bir değeri matematik işlemde kullanmaya kalktığınızda karşınıza
çıkabilir. Rakam olmayan bir karakter dizisini bir değişkene tırnaksız olarak
atadığınızda VBScript “tanımsız değişken” vermeye kalktığınızı söyleyerek
duracaktır.



VBScript’in bu eksikliğini gidermek için bazı ASP programcıları değişken
adlarının önüne karakter dizileri için “str” harflerini koyarlar: strAy,
strOgrenciler, strMailAdresi gibi.



İsterseniz, VBScript’in karakter-dizisi ve sayı değişkenleri nasıl ayırt
ettiğini veya etmediğini bir kaç örnekle görelim. Şu kodu yazarak, çalıştıralım:



<% Option Explicit %>



<%


Dim Degisken(2), Toplam


Degisken(1) = "Mustafa"


Degisken(2) = "Doğan"


Toplam = degisken(1) +
Degisken(2)


%>


<% =Toplam %>





Sonuç: “MustafaDoğan” değil mi? (Arada boşluk olmamasını şimdilik
önemsemeyelim.) Peki; şimdi Degisken(1) değeri olarak tırnak içine alarak 5,
Degisken(2) değeri olarak yine tırnak içinde 10 yazın. Programı tekrar
çalıştırın. Haydaa! Sonuç 510? Peki, tırnakları kaldırın. Sonuç? 15. Ne o? Bu
dili tasarlayanların matematik bilmediklerini mi sandınız :)


Bu
durum VBScript’in matematik bilgisinin kıtlığından değil, tırnak içindeki
değerlerin, VBScript ayrım yapmıyor olsa bile, karakter dizgisi (string) iken
toplama işleminde art arda eklenmesinden (concatenate) kaynaklanıyor. Tırnakları
kaldırdığınızda, VBScript bu değerlerin sayı olduğunu anladı ve doğru işlemi,
yani toplama işlemini yaptı. Şimdi VBScript’in değişkenleri ele alış tarzını
daha iyi kavramak için Degisken(1) değeri olarak tırnak işareti koymadan kendi
adınızı, Degisken(2) değeri olarak da soyadınızı yazın ve programı çalıştırın.
Ne sonuç aldınız?



VBScript’in kullandığı tek tür değişkene variant denir.

Variant,
karakter-dizini (String) de olabilir, sayı (Number) da. Fakat bir variant’ın
içindeki değer, veri olarak nitelendiğinde şu türlerden birine girer:





Boolean

Değişkenin değeri ya True (doğru) ya da False (yanlış) olur; True’nun değeri –1,
False’un değeri ise 0’dır.




Byte

0 ile 255
arasında bir sayısal değer olabilir.




Double

Yüzen noktalı
değer denilen veri türüdür. Pozitif sayılar için 4.9E-324 ile 1.8E308
arasında, negatif sayılarda -4.9E-324 ile -1.8E308
arasında bir değer alabilir.



Date/Time

Önceden belirlenmiş biçimlerde tarih ve zaman bilgisi içerir.



Empty

Tanımlanmış ancak henüz değer atanmamış (boş) değişken türüdür.



Error

Programın hata mesajlarını ve hata değerlerini tutar.




Integer

Noktalık bölüm
içermeyen tamsayı verilerdir; değeri -32.768 ile +32.767 arasında olabilir.




Long

Noktalık bölüm
içermeyen tamsayı verilerdir; değeri -2.147.483.648 ile 2.147.483.648 arasında
olabilir.




Null

İçinde veri
bulunmamak üzere tanımlanmış değişkenlerdir.




Object

Windows OLE
Nesnelerini tutmak üzere tanımlanmış değişkenlerdir.




Single

Yüzen noktalı
değer denilen veri türüdür. Pozitif sayılar için 1.4E-45 ile 3.4E38
arasında, negatif sayılarda –1.4E-45 ile -3.4E38 arasında
bir değer alabilir.




String

Alfanumerik veri
tutan değişkenlerin değeridir














Değişkenlere nispet, Değişmeyenler





Diyelim ki,
bütün kodunuz boyunca kullanacağınız bir değişmez değeriniz var. Bu tip sabit
bir değer. Bütün ASP sayfası boyunca (hatta isterseniz, bütün site, yani
uygulama boyunca) değişmeden kalır. Bu değerleri Const (constant, sabit
kelimesinden türetilme) komutuyla belirtiriz:




Const dolarBirimFiyat =
677000


Const KarsilamaMetni =
“WELCOME...Web sitemize hoş geldiniz.”


Const UreticiFirma = “Sony
Electronic”





VBScript’te İşlemciler (Operatörler)





Bilgisayar
operatörü ile program operatörü arasında fazla bir fark yoktur. Her ikisi de
verdiğiniz değerleri ya karşılaştırır bir sonuç bulurlar; ya da bu değerlerle
aritmetik işler yapar ve bir sonuç ortaya çıkartırlar. Bilgisayar operatörü daha
sonra bu iş için sizden para ister; program operatörü istemez. (Bilgisayarı
edinebilmek için Türkiye şartlarında yeterince harcama yapıyorsunuz zaten!)
VBScript’in operatörleri ve yaptıkları işler şöyle sıralanır:







Operatör:

İşlev:
Sınıfı:




+
Toplama Aritmetik




-
Çıkartma




* Çarpma




/ Bölme




^ Üssünü alma




\ Tamsayı bölme




Mod Modüler aritmetik




= Bir değişkenin diğerine eşit olduğunu sınar
Karşılaştırma




<> Bir değişkenin diğerine eşit olmadığını sınar



>and<
Bir değişkenin diğerinden büyük veya küçük olduğunu sınar (and kelimesi var)



>= and <=
Bir değişkenin diğerinden büyük veya eşit, veya küçük veya eşit olduğunu sınar
(and kelimesi var)




Is Bir ifadedeki iki referansın aynı Nesne’ye yapılıp
yapılmadığını sınar



And
Bir veya daha fazla değişkeni test olarak karşılaştırır Mantıksal




Or Bir işlemin devamı için hangi koşulun oluşması gerektiğini
sınar




Not Bir ifadeyi negatif hale getirir



XoR
Sadece bir şartın doğru olup olmadığını sınar



Eqv
İki değişkenin eşitliğini sınar



Imp
İki ifadede mantıksal implikasyon işlemi yapar.





VBScript ile
yazacağımız ASP sayfalarında bu işlemcileri beklediğimiz sonucu verebilmesi için
kullanım sıraları önemlidir. Bunu bir örnekle açıklayalım: 100’den 6’yı çıkarmak
ve sonucu 2’ye bölmek istiyorsunuz; sonuç 47 olacaktır. Yani, 100-6/2; değil mi?
Bu işlemin VBScript’teki sonucu 97 olacaktır. Çünkü, VBScript önce 6’yı 2’ye
bölecek ve elde ettiği sonucu 100’den çıkartacaktır. VBScript’te, aritmetik
işlemlerin yapılma sırası şöyledir:




Operatör: İşlev: Öncelik:




+ Toplama 3




- Çıkartma 3




* Çarpma 2




/ Bölme 2




^ Üssünü alma 1





VBScript ile
hesap işlemi yaparken, aritmetik işlem sırasını karıştırarak hatalı sonuç
almamak için sık sık parantez kullanmak yerinde olur. Yukarıdaki örnek şöyle
yazılabilirdi: (100-6)/2. Tabiî amacınız 100’ü 6/2’ye bölmek ise bu işlemi şöyle
yazmalısınız: 100-(6/2).





BAŞ DÖNDÜREN KODLAR!




Bir programın
amacı ve büyük ölçüde varlık sebebi (ister basit bir script diliyle, ister
gerçek programlama diliyle yazılsın), karşısına çıkabilecek veya ona
yönlendirilecek çeşitli durumları değerlendirerek, kendisine izin verilen
çizgiler içerisinde kendi kendine kararlar verebilmesidir. Bu noktada dizginleri
elimizde tutabilecek yegâne kişiler olarak biz, programcılar, program kontrol
öğelerini kullanırız. Programlar, bu öğeler sayesinde karşılaştırma yaparlar;
belirli durumların oluşup oluşmadığını tahlil ederler. Ya da, belirli bir
durumun oluşmasına veya sona ermesine bağlı olarak bir iş yaparlar veya
yapmazlar. Kısacası, karar verirler. Bunu sınamalarla (şartlı ifadelerle) veya
döngülerle sağlarız.



Örneğin,
programımıza istediğimiz bir şart yerine gelene kadar hep aynı şeyi yapmasını
söyleyebiliriz; yani, döngüye sokarız. Şartımız sağlandığında döngüye son verip
bir sonraki adıma geçmesini sağlayabiliriz. Kimi zaman da, programa (programın
mantığı çerçevesinde) istediğimiz anda yapmakta olduğu işi durdurarak, başka bir
işi yapmasını bildirebiliriz. Bunlara da süreçler (veya prosedürler) denir.



VBScript’te
programın kendi kendine karar vermesini sağlayan en basit yapı,
“Eğer...ise...yap!” şeklinde karşımıza çıkar. Bu yapıyı kullanmak için değişik
VBScript komutları vardır.



IF...ELSE




Bu yapı belki de
en eski ve en klişe mantıksal analiz yapısıdır. Hemen hemen bütün diller de bu
şekilde kullanılıyor olması da cabası...



Bu komut,
VBScript’in vereceğiniz bir durumun bulunup bulunmadığını sınamasını sağlar.
Genel yazım kuralı şöyledir:




If şart Then


[şart
doğru ise yapılacak işler]


Else


[şart
doğru değilse yapılacak işler]


End If



Bunu
bir örnekle ifade edelim: Eğer saat 12’den önce ise sayfaya “Günaydın” yazdır.
Ayrıca sayfanın arka plan rengini “açık mavi” yap; saat 12’den sonra ise
“Tünaydın” yazdır ve arka plan rengini değiştir. Saat 18’den sonra ise sayfaya
“İyi akşamlar!” yazdır; ayrıca, arka plan rengini siyah yap. If döngüsü
kendi içinde sınırsız Elseif (ikinci şartlı döngü) imkânı vererek bize
bunu sağlar. Her Elseif’i yeni bir If gibi düşünebilirsiniz. Bu
pek de gerekli olmayan faaliyeti gerçekleştirmek için gerekli olan kod:














</span><span style="background: yellow none repeat scroll 0% 50%; font-size: 10pt; font-family: Verdana; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">ASP <br />ILE SAATE GORE SELAM</span><span style="background: yellow none repeat scroll 0% 50%; font-size: 10pt; font-family: Verdana; color: navy; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">




"content-type"
content=
"text/html;
charset=ISO-8859-9"
>




"Content-Type"
content=
"text/html;
charset=windows-1254"
>






















"#FFFFFF">







<%




If Hour(Now) <12>




Response.write "Günaydın !!"




Response.Write ""




%>










<%




ElseIf Hour(Now) >= 18 Then







Response.Write "İyi akşamlar! "




Response.Write ""




%>










<%




Else




Response.Write "Tünaydın! "




End If




Response.Write ""







%>


























Burada dikkat
edeceğimiz hususlar;




“Response.write” metodu ile sadece sayfanın metin kısmı ile uğraşmakla kalmayıp,
sayfanın diğer unsurlarını da değiştirebilirsiniz.Mesela biz burada arka plan
rengini değiştirdik.



• Response.write
“” yazarak sayfanın body etiketini kendi istediğimiz
şekilde oluşturmuş olduk. Sizce buradaki süreç nasıl işliyor? Kod işlenmeye
başlandığında ve bu satıra gelindiğinde sayfanın içerisine o satır yazılıyor.
Web tarayıcısına saf html kodları halinde ulaşan sayfamız, bu defa tarayıcı
tarafından işlenmeye başlıyor. Bir de bakıyor ki ASP kodu tarafından sayfanın
içine yazılan şey, aslında bir tag.görevi. Bu sefer hemen onu işliyor ve sonucu
bize gösteriyor.





Bu programı
çalıştırdığınız zaman, çalıştırdığınız saate göre sayfadaki selamın ve arka plan
renginin değiştiğini göreceksiniz. (Bu örnekte, sadece şartlı döngü işlemi
yapmıyoruz; fakat aynı zamanda Hour(Now) fonksiyonu ile tanışıyoruz ve
sayfadaki bütün unsurları ASP yöntemiyle yazdırıyoruz! Fakat şimdilik bu iki
unsurun üzerinde durmayın.)



Daha önceki
yazılarımızda asp’nin bir sürü hazır fonksiyonu var demiştim.



Bunlardan biri
de o andaki saati ve tarihi bildiren Now() fonksiyonudur. Bu fonksiyondan
dönen değerle bu andaki saati öğreniyoruz; bunu önce 12 ile karşılaştırıyoruz.
Fonksiyondan dönen değer, eğer 12’den küçükse, programımız Response
(Karşılık) Nesnesi’nin .Write Metodu’nu kullanarak (Nesneler ve Metodlar
meselesi üzerinde de durmayın!) ziyaretçinin Browser penceresine “Günaydın”
yazdırıyor.






Değer döndürenler...





Fonksiyonlar,
kendilerini göreve çağıran VBScript komutlarına ve işlemlerine mutlaka bir sonuç
döndürerek karşılık verirler. Buna fonksiyondan dönen değer denir. Yani,
Now()
fonksiyonunu göreve çağırdığınızı farzedelim. Bu fonksiyon derhal
işletim sisteminden saati ve tarihi öğrenerek kendisini göreve çağıran işleme
bildirir. Daha sonra VBScript’in kullanılmaya hazır diğer bir çok fonksiyonunu
kullanacağız ve kendi fonksiyonlarımızı yazacağız. Ne zaman bir fonksiyona bir
noktada atıf yaparsak, o noktaya fonksiyon tarafından bir değer getirileceğini
bilmemiz gerekir.





Eğer bu ilk
sınamanın sonucu doğru değilse, VBScript If satırından sonraki birinci
deyimi atlayacak ve ikinci deyimi yerine getirecektir. Yani eğer saat 12’den
küçük değilse, ElseIf satırı icra edilecektir. ElseIf de tıpkı
If
gibi işlediği için bu kez yeni bir sınav yapılacak ve saatin 18’e eşit
veya büyük olup olmadığı sınanacaktır. Eğer saat 18’e eşit veya büyükse, (sınav
sonucu doğru ise) ilk satır icra edilecek ve ziyaretçinin Browser penceresine
“İyi akşamlar!” yazdırılacak, background rengi değiştirilecektir. Eğer bu
sınavın sonucu da doğru değilse, ElseIf’in ikinci satırı icra
edilecektir. Bu satırda ise Else bulunuyor. Else; If ve
ElseIf
gibi sınav yapmaz; ne olursa olsun, kendisinden sonra gelen deyimi
yerine getirir. Yani saat 12’den küçük değilse, 18’den küçük veya 18’e eşit
değilse, yani 12 ile 17 arasında ise, ekrana “Tünaydın” yazılacaktır ve rengi
değiştirecektir.




SELECT CASE





VBScript’in bir
diğer duruma bakarak karar verme ifadesi, Select Case (Durum Seç)
yapısıdır. Şimdi bu öğenin nasıl çalıştığını görelim:






Durum Seç (Durumların listesi veya durumları belirten bir değişken)




Durum 1 : Yapılacak işler




Durum 2: Yapılacak işler




Durum 3: Yapılacak işler




Durum n: Yapılacak işler




Seçmeyi Bitir









Yani;







Select Case değişken







Case 1







--- yapılacak işler ---







Case 2







--- yapılacak işler ---







Case3







--- yapılacak işler ---







End Select





VBScript, verdiğiniz durum listesine veya içinde
çeşitli değerler bulunan (bu değerleri bir şekilde değişkene yükleyecek olan
sizlersiniz) değişkene bakarak, bu değişkenin her bir değerini bir “durum”
sayacak ve verdiğiniz durumlardan hangisini tutuyorsa, ona ait komut dizisini
icra edecektir.



Bir örnekle
görelim:






<%




ay = month(date())




gun = day(date())




sene = year(date())







Select Case ay




Case "1"




StrAy = "Ocak"




Case "2"




StrAy = "Şubat"




Case "3"




StrAy = "Mart"




Case "4"




StrAy = "Nisan"




Case "5"




StrAy = "Mayıs"




Case "6"




StrAy = "Haziran"




Case "7"




StrAy = "Temmuz"




Case "8"




StrAy = "Ağustos"




Case "9"




StrAy = "Eylül"




Case "10"




StrAy = "Ekim"




Case "11"




StrAy = "Kasım"




Case "12"




StrAy = "Aralık"




End Select







%>















"Content-Type"
content=
"text/html;
charset=windows-1254"
>




"GENERATOR"
content=
"Microsoft
FrontPage 4.0"
>




"ProgId"
content=
"FrontPage.Editor.Document">




</span><span style="background: yellow none repeat scroll 0% 50%; font-size: 10pt; font-family: Verdana; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">Günün <br />Tarihi</span><span style="background: yellow none repeat scroll 0% 50%; font-size: 10pt; font-family: Verdana; color: navy; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">






















"Verdana"
size=
"2">Günün
Tarihi


:


"#800000">




<%=gun%>
<%=strAy%> <%=sene%>


























Bu kodu yazıp
çalıştırdığımızda programımız üç tane farklı değişkeni işleme sokuyor. Bunlar
ay,gün ve sene. Malum, bu değişkenler, kendilerine bir değer atandığında bir işe
yararlar. Bu yapmak içinde VBScriptin hazır fonksiyonlarından olan






month(date())




day(date())




year(date())





ifadelerini
kullanıyoruz.Aslında bunlar, Date() fonksiyonunun alt fonksiyonları. Daha sonra
kendisine değer yüklenen ay değişkeni Select case ifadesinde durum konumuna
yerleştiriliyor. Bu şu demek: “Ey asp.dll, ay değişkenini al, bu değişkenin
değişik durumlarına göre aşağıda belirteceğim görevleri yerine getir!” Ay
değişkeninin 1,2,3,4,5,6,7,8,9,10,11,12 olmasına göre farklı durum işlevleri
tanımlıyoruz. Tahmin edeceğiniz üzere bunu case “1”, case “2”,... ifadeleri ile
yapıyoruz. Bu sayede ay değişkeninin aldığı sayısal değere göre birer StrAy
değişkeni tanımlayabiliyoruz. Bu işlemleri tamamladıktan sonra End Select komutu
ile seçim işlemini durduruyoruz.




SIK KULLANACAĞIMIZ HAZIR FONKSİYONLAR





VBScript’te
kullanabileceğimiz bir iki hazır-fonksiyona yukarıda değindik. VBScript’in
kullanılmaya hazır daha bir çok fonksiyonu vardır. Ancak ASP uygulamalarında sık
kullanacağımız ve özellikle metin düzenlemeye ait olan bir kaçını burada
sıralayalım.



• TARİH VE SAAT




Visual Basic’in hemen hemen bütün zaman-tarih fonksiyonları VBScript’te de
kullanılır.



Date
:
Bugün tarihini verir. (25.03.2000 gibi.)



Time
: O andaki saati verir. (22:24:40 gibi.)



Now
: O andaki tarih ve saati birlikte verir. (25.03.2000 22:24:40 gibi.)



VBScript’in buna
ek olarak Weekday (haftanın günü), WeekdayName (günün adı) ve
Monthname
(ayın adı) fonksiyonları da vardır. Bu fonksiyonlar değerlerini
Date
fonksiyonuna göre alırlar. Örneğin,





<%=
WeekdayName(Weekday(Date))%>





komutu bize
bugün Cumartesi ise “Cumartesi” değerini verir.




<%= MonthName(Month(Date))%>





komutu bize bu
ay Mart ise “Mart” değerini verir. VBScript’in bunlara ek olarak Day (gün),
Month (ay) ve Year (yıl) fonksiyonları da değerlerini Date fonksiyonundan
alarak, size bir rakam verirler. Eğer tarih 25 Mart 2000 ise:






<%= Day(Date)%> --- 25




<%= Month(Date)%>--- 3




<%= Year(Date)%>--- 2000





değerini verir.



VBScript, bu
değerleri doğruca işletim sisteminden alır. Dolayısıyla, işletim sisteminin
bölgesel ayarları Türkiye için yapılmışsa, gün adları Türkçe olarak dönecektir.
Ayrıca, tarih ve saat biçimleri de bölgesel ayarlara bağlı olarak, ay önde, gün
arkada veya tersi, saat de 12 saat veya 24 saat esasına göre döner. ASP
programlarınızı kişisel Web Server’da denerken kendi bilgisayarınızın tarih ve
saatini; gerçek Internet’te çalıştırırken Server’ın tarih ve saatini alırsınız.
Sayfalarınızda ay ve gün adlarını Türkçe görüntülemek için, önce server’ın
bölgesel ayarlarını denemeniz ve eğer isimler Türkçe gelmiyorsa, bunları çeviren
sub’lar veya fonksiyonlar yazmanız gerekebilir. (Yukarıda günün tarihini veren
kodumuzda, sisteminizin bölge ayarları nasıl olursa olsun ay Türkçe olarak
karşımıza çıkacaktır )



KARAKTER DİZİSİ DÜZENLEME




Karakter dizisi veya string, VBScript için herşey olabilir. “Bugün 7
Ağustos 2000” bir String’dir. “Doğum Günün Kutlu Olsun!” bir string’dir.
Web sitemizi ziyaret eden kişinin formlarımıza yazacağı ve “Gönder” tuşunu
tıklayarak server’a göndereceği bilgiler string’dir. Fakat bunların hepsi
olduğu şekliyle işimize yaramaz. Bunları yeniden düzenlemek, içinden seçmeler
yapmak veya biçimlerini değiştirmek gerekebilir. VBScript bu amaçla kullanılmaya
hazır bir dizi fonksiyon verir:




• InStr Uzun bir string’in içinde vereceğiniz
daha kısa bir string’in bulunup


bulunmadığını arar. Bulursa bu kısa string’in
başlama noktasının değerini verir. Diyelim


ki, “Sarı Çizmeli Mehmet Ağa” string’ini
“GereksizLaf” değişkenine, “çizmeli” kelimesini de


“Ara” değişkenine atadınız. InStr fonksiyonu ile
Ara’nın değerinin yerini GereksizLaf’ın


değerinin içinde bulabilirsiniz:






Yer = InStr(GereksizLaf, Ara)





Yer’in değeri 6 olacaktır;
çünkü “çizmeli” kelimesi, uzun string’de 6’ncı karakterden başlamaktadır.




• Len Bir string’in uzunluğunu belirler.
Yukarıdaki örnekte yer alan GereksizLaf değişkenin uzunluğunu


şöyle belirleyebiliriz:





Uzunluk = Len(GereksizLaf)





Uzunluk değişkeninin
değeri 23 olacaktır.





• UCase Vereceğiniz
bir string’in tüm karakterlerini büyük harfe çevirir.






YeniString = UCase(GereksizLaf)





Yeni String’in değeri:
“SARI ÇİZMELİ MEHMET AĞA” olacaktır.





• LCase Vereceğiniz
bir string’in tüm karakterlerini küçük harfe çevirir.






YeniString = LCase(GereksizLaf)





Yeni string’in değeri:
“sarı çizmeli mehmet ağa” olacaktır.





• LTrim, RTrim, Trim:
Verdiğiniz string’in (sırasıyla) solunda yani baş tarafında; sağında



yani sonunda ve hem
başında ve hem de sonundaki boşlukları temizler.





• Space İçinde,
vereceğiniz sayı kadar boşluk olan boş bir String oluşturur. Örneğin






Bosluk = Space(20)





Bosluk değişkenin değeri
“ “ (20 adet boşluk karakteri) olacaktır.





• String İstediğiniz
sayıda ve istediğiniz bir karakterle bir string oluşturur.





YeniString = String(3, “*”)





YeniString
değişkeninin değeri “***” olacaktır.





• Left,
Right Bir String’in içinde soldan (baştan) veya sağdan (sondan)
verdiğiniz sayıya kadar olan karakterleri



verir. Örneğin,
yine yukarıdaki GereksizLaf değişkenini kullanırsak:






Solda = Left(GereksizLaf, 4)





Solda
değişkeninin değeri “Sarı” olacaktır. Çünkü, GereksizLaf değişkeninin soldan
itibaren dört harfi “Sarı“



kelimesine denk
geliyor.





• Mid Bir
string’in içinde başlangıç noktasını ve karakter olarak boyunu verdiğiniz alanda
yer alan



string’i verir.






Ortada = Mid(GereksizLaf, 5, 8)





Ortada
değişkeninin değeri “çizmeli” olacaktır; çünkü GereksizLaf değişkeninin soldan
5’nci



değişkeninden
itibaren 8 karakterlik alanda “çizmeli” karakterleri yer alıyor.





• Rnd
Rastgele sayı üretmek için kullanılır.





• Int Bu
fonksiyon ile ondalıklı bir sayının tam bölümünü alabiliriz.






deger="2,25022"




yenideger=int(deger)





bu durumda deger
değişkeni 1 olacaktır.




DİZİ DEĞİŞKEN FONKSİYONU




VBScript’in dizi değişken oluşturmada Array() fonksiyonu ile sağladığı
kolaylıklara kısaca değindik. Fakat Array ile daha bir çok iş yapabiliriz ve
dizi değişken oluşturmakta VBScript’in diğer bazı kolaylıklarından
yararlanabiliriz. Dizi değişkenler, özellikle Web ziyaretçilerimizden gelecek
bilgilerin kaydedilmesinde; veritabanından çekeceğimiz verilerin kullanılır hale
getirilmesinde yararlı bir araçtır. Dolayısıyla ASP sayfalarınızda sık sık çok
boyutlu dizi değişkenlerden yararlanacaksınız. Bunun için gerekli araçları
kısaca ve topluca ele almamız yerinde olur. Bir dizi değişken oluştururken,
değişkenin eleman sayısını belirtmezsek, VBScript, kendi kendine “Anlaşılan bu
diziyi dinamik yapmamı istiyorlar!” der. Daha sonra elemanlarının değerleri
sonradan belirtilebilecek ve eleman sayısı sonradan artırılabilecek bir dinamik
dizi değişken oluşturur.




Örnek:



Dim Ogrenciler()



Bu
komutla, Ogrenciler dizi değişkeni oluşturulur. Ancak, eleman sayısı
belirtilmediği için dizi dinamiktir. Daha sonra bu dizinin eleman sayını
belirleyebilirsiniz. Bunu,



ReDim Ogrenciler(15)



gibi
bir komutla yapabiliriz. Şimdi aklınıza şu soru gelebilir: “Peki neden
Ogrenciler dizisini baştan eleman sayısını belirterek tanımlamıyoruz?” Güzel
soru! Cevabı şu olabilir mi? “Dizi değişkenimizin eleman sayısını henüz
bilmiyoruz. Programın akışı içinde bu sayı, başka bir fonksiyonun, sub’ın veya
kullanıcı girdisinin sonucu olarak belirlenebilir.” Fakat hemen belirtmek
gereken bir nokta var: ReDim komutu, mevcut bir dizi değişkenin içindeki herşeyi
siler! Mevcut dizinin elemanlarını ve onların değerlerini korumak istiyorsak:



ReDim Preserve
Ogrenciler(20)



yazmamız gerekir. Buradaki Preserve (koru) komutu, VBScript’e mevcut dizi
içindeki elemanları korumasını ve eleman sayısını 20’ye çıkartmasını bildirir.
Buna neden gerek olabilir? Ziyaretçinin tercihleri değişebilir. Örneğin, bir
elektronik alışveriş sitesinde ziyaretçiniz yeni şeyler alabilir. Daha önceki
alışverişlerine ilişkin verileri tuttuğunuz dizi değişkenin eleman sayısını,
daha önceki bilgileri silmeden arttırmanız gerekir.



VBScript’in dizi değişkenlerini tümü aynı adı taşıyan bir liste olarak
düşünebilirsiniz; sadece değişken adının yanında dizinin kaçıncı elemanı
olduğunu belirten sayı bulunur:





Ogrenciler(1): Necip




Ogrenciler(2): Serap




Ogrenciler(3): Neslihan



Fakat
VBScript çok boyutlu dizi değişken de oluşturabilir. İki boyutlu dizi değişkeni
tablo gibi düşünün. Dizinin elemanları aynı adı taşıyan değişkenler fakat bu kez
sadece tek sayı değil sıra ve sütun numaraları ile belirleniyorlar:





Ogrenciler(1,1): Necip




Ogrenciler(1,2): Serap




Ogrenciler(1,3): Neslihan




Ogrenciler(2,1): Selim




Ogrenciler(2,2): Murat




Ogrenciler(2,3): Merve




Ogrenciler(3,1): Elif




Ogrenciler(3,2); Hande




Ogrenciler(3,3): Leyla





Şimdi, burada üç
sıralı, üç sütunlu bir tablo getirebilirsiniz gözünüzün önüne. Bu dizi-değişkeni
şu komutla oluşturabiliriz:




Dim Ogrenciler(3,3)





Böyle bir
değişkende sözgelimi birinci sıra (numarası 1,x olanlar) çalışkanları, ikinci
sıradakiler (2,x’ler) daha az çalışkanları belirtebilir. VBScript, üç, dört ve
hatta beş boyutlu dizi değişken oluşturur. Bunu nerede kullanacağınızı siz
kararlaştırabilirsiniz. Bir dizi değişkenin herhangi bir elemanın değerini,
programın herhangi bir aşamasında değiştirebilirsiniz:




Ogrenciler(3,2) = “Caner”





komutu,
Hande’nin adını siler ve yerine Caner’in adını yazar.





Dizi
değişkenlerimizin eleman sayısını bilmek isteyebiliriz. Kimi zaman dizi
değişkenlerimizin eleman sayısı biz belirlemeyiz. Bu bilgi bir formdan
gelebilir; bir veritabanından alınabilir. Ancak, mesela, bir döngü için bu
değişkenin kaç elemanı olduğunu bilmek gerekir. Elimizde 35 elemanı olan
Ogrenciler dizi-değişkeni varsa, bu sayıyı




ElemanSayisi =
UBound(Ogrenciler)





komutu ile
ElemanSayisi değişkenine yazdırırız. ElemanSayisi’nin değeri bu durumda 35
olacaktır.




TEST FONKSİYONLARI





VBScript’te
kullandığımız bazı değişkenlerin o andaki durumu, programımızın akışını
kontrolde kullanacağımız bilgiyi sağlayabilir. Sözgelimi bir değişkenin değeri
boş ise, ziyaretçimizin formu tam olarak doldurmadığını düşünebiliriz. VBScript,
bize değişkenlerin durumunu sınamamız için bazı özel fonksiyonlar sağlar. Bu
özel fonksiyonlardan dönen değer True (doğru) veya False (yanlış) olur; doğru
sonucun değeri –1, yanlış sonucun değeri ise 0’dır:






IsArray Bir değişkenin dizi değişken (Array) olup olmadığını sınar.




IsDate Bir değişkenin değerinin tarihe (Date) çevrilip çevrilemeyeceğini
sınar.




IsEmpty Bir değişkenin tanımlanıp değer atanmış olup olmadığını sınar.




IsNull Bir değişkenin geçerli bir değer tutup tutmadığını sınar.




IsNumeric Bir değişkenin sayı olarak işleme tâbi tutup tutulamayacağını sınar.




IsObject Bir ifadenin geçerli bir ActiveX veya OLE nesnesine referansta
bulunup bulunmadığını sınar.




TypeName Bir değişkenin türünü belirtir.




VarType Bir değişkenin türünü belirten sayıyı verir.









ASP NESNELERİ





ASP teknolojisi,
tıpkı Visual Basic dili gibi nesne yönelimli programlama yapısına sahiptir.
Nesne Yönelimli Programlama (Object Oriented Programming, OOP) deyimini
bir çoğunuz daha önce duymuşsunuzdur. ASP kullanırken de, öncelikli amacımız
nesnelerin özelliklerini kullanarak, ya bu özellikleri belirlemek ya da
değiştirmektir. Her şey nesne sayılabilir. Siz programlarınızı yazarken önce bir
nesne tanımlar ya da hazır nesneleri kullanırsınız. Bu nesnelerin özelliklerine
hükmeder, onları kullanırsınız.





Diyelim ki bir
stok kontrol programı yazıyorsunuz. Bu program sizden aldığı bilgiler ışığında,
merkez ambara mal girecek, mal çıkışı yapacak, size hangi üründen ne kadar
kaldığını gösterecek, stok miktarı kritik sınırın altına indiğinde haber verecek.
Bu işler için onlarca fonksiyon tanımlıyorsunuz ve Sub yazıyorsunuz. Bu demek
oluyor ki, sizin ASP programınızda “ambar” diye bir nesneniz var; siz bu nesneye
yönelimli program yazmışsınız!



Her bir program
nesnesi temelde iki unsura sahiptir:






Özellik
(Property, Attribute):

Bir nesnenin
özellikleri, onun değişkenleridir. “Ambar” nesnesinin “malın cinsi,” “miktarı,”
“tanımı,” “fiyatı,” “kritik miktarı” gibi değişkenleri, yani özellikleri vardır.






Metod
(Method):

Bir nesnenin işlemesi, çalışması için, kısaca
kendisinden bekleneni yerine getirebilmesi için çalışma yöntemlerine ihtiyacı
vardır. Dolayısıyla, bir ASP nesnesinin fonksiyonları, onun metodlarıdır.



Fakat ASP’de
nesneler sadece sizin öbekler halinde toplayacağınız fonksiyonlar ve
değişkenlerden ibaret değildir. Öncelikle, ASP programında kullandığınız script
dilinin size kazandırdığı nesneler vardır.



ASP sayfasını
JavaScript ile yazarsanız başka, VBScript ile yazarsanız başka dil nesnelerine
sahip olursunuz. Ancak, her ikisinde de ortak olan “scripting” nesneleri vardır.
Bunların çoğu ASP’nin çalıştığı platform olan IIS tarafından sağlanırlar.





Nesneler kim
tarafından oluşturulmuş olurlarla olsunlar, bir değer döndürmekle yükümlüdürler.






Nesne.Özellik = Değer





Bir nesnenin
herhangi bir özelliğinin değerini, değişken değeri gibi kullanabilir program
akışını buna göre değiştirebiliriz:






If Nesne.Özellik > Değer Then ...





Nesnelerin
özelliklerinin değerlerini değişkenlere atayabiliriz; ancak bunu yaparken
Nesne’nin bir metoduna (fonksiyonu) göndermede bulunmamız ve gerekiyorsa bu
fonksiyona kullanması için veri göndermeliyiz. (Bir fonksiyona kullanması için
gönderilen değere argüman/argument denir.)






Degisken = Nesne.Metod(argüman1, argüman2...)





Daha sonra bu
değişkeni istediğimiz yerde kullanırız. İşin teorisine daha fazla bulaşmadan
örnek yapalım.



Nesneler, diğer
yararlarının yanı sıra, birbiri ile ilgili Sub’larımızı,
fonksiyonlarımızı ve değişkenlerimizi bir arada tutmamızı sağlar. Şimdi VBScript
ile bir nesne oluşturabiliriz:




<%


Class
Ogrenci


Public
Adi, Soyadi, No


Function
AdiSoyadi


AdiSoyadi
= Adi & “ “ & Soyadi


End
Function


End Class


%>



Nesne (object)
adını verdik; fakat Class (sınıf) oluşturduk! Bu grubun Object..End
Object
olması gerekmiyor mu? Belki haklısınız. Ama bir “sınıf” ancak
VBScript tarafından kullanılmaya başlanırsa Nesne olur. Dolayısıyla biz “sınıf”
yazarız; VBScript onu Nesne haline getirir. Peki, nesneyi oluşturduk; şimdi bunu
nasıl kullanacağız. Çok kolay; önce bu nesneden yeni bir olgu (instance)
oluşturacağız. Sonrasına geçmeden önce bunu nasıl yapacağımızı yazalım:




<%


Dim Ogr1


Set Ogr1 = New Ogrenci


Ogr1.Adi = “Kemal”


Ogr1.Soyadi = “Sunal”


Ogr1.No = “444”



Response.Write Ogr1.AdiSoyadi


%>



Her
nesne, New (yeni) komutu ile yeni bir değişkene bütün özelliklerini
verir. Burada Ogr1 değişkeni, yukarıda oluşturduğumuz Ogrenci nesnesinin bütün
özelliklerini kazanmış oluyor. Ogrenci nesnesinin “.Adi”, “.Soyadi” ve “.No”
özellikleri olması gerekir; nitekim Ogr1’e bu özelliklerini burada veriyoruz.
Ogrenci nesnesinin bir de metodu (fonksiyonu) var; Ogr1 bunu da kazanabilir mi?
Tabiî; hem kazanır, hem de bunu ziyaretçinin Web tarayıcı penceresine
yazdırabilir.




HATASIZ KUL OLMAZ!



ASP
kodlarınızda yazım hatası, olmayan değişkenlere gönderim, noktalama hataları
gibi hatalar bulunmamalıdır. Bu tür hataları, programınızı Web’e göndermeden
önce mutlaka ayıklamalısınız. Fakat programcı olarak öngöremeyeceğiniz ve çoğu
Web ziyaretçisinden veya ziyaretçinin bilgisayarından kaynaklanan hata durumları
olabilir. VBScript, şu standart komutla beklenmedik hata durumlarında programın
yoluna devam etmesini sağlayabilir:



<% On Error Resume Next %>



Bu
komutla VBScript’e, hata halinde bir sonraki satırdan yoluna devam etmesi
söylenir. Fakat oluşan hata, programın daha sonra vermesi beklenen sonucu
vermesini önleyecek nitelikte olabilir. VBScript, Err (Hata) Nesnesi’nin
bir çok özelliğinden özellikle hata sayısı (Number), tanımı (Description)
ve kaynak (Source) özellikleri ile size hatanın ne olduğunu ve nereden
kaynaklandığını söyleyebilir. Bu özellikleri kullanarak, programlarınızda, en
azından geliştirme aşamasında, örneğin,



If Err:Number = xx Then




şeklinde bir ifade ile hatanın türüne göre programın kazasız yürümesini
sağlayabilirsiniz. Burada xx yerine 108 ayrı hata numarası yapabilirsiniz. Hata
numaraları, Microsoft’un VBScript sitesinden edinilebilir (http://msdn.microsoft.com/vbasic/).




SUNUCU NESNELERİ




ASP’yi diğer CGI teknolojilerinden ayıran başlıca özelliklerden biri tek tek Web
sayfalarını sanki bir bilgisayar programının çeşitli pencereleri, diyalog
kutuları, mesaj kutuları, girdi kutuları gibi bir arada bir “uygulama programı”
olarak bağlayabilmesidir. Başka bir deyişle bize, ziyaretçinin sitemize
bağlandığı ve ana sayfamızı açtığı andan itibaren sitemizin bir program
bütünlüğünde çalışmasını sağlayacak araçlar gerekir. Bunu ancak Web Server’ın
yardımıyla yapabiliriz.



ASP
sayfalarımızda kullanacağımız ikinci grup nesne, Sunucu Nesneleri’dir. Bu grupta
tabiî önce Sunucu’nun kendisi yer alır; sonra ziyaretçi ile kurduğumuz ilişki
gelir. Ziyaretçi ile ilişkimizi iki yönlü trafiğe benzetebilirsiniz: Ondan bize
gelen talepler, bizim ona karşılıklarımız.




Ziyaretçiden
bize gelen trafiğe neden “Talep” diyoruz? Ziyaretçi, browser’ının URL hânesine
yazdığı her adresle veya formlardaki bir düğmeyi veya sayfalarımızdaki herhangi
bir köprüyü tıklamakla, server’a “Bana şunu göndersene!” demiş olur. Bu
taleptir. Ziyaretçi taleplerinin tümü Talep Nesnesi (Request Object)
olarak bir arada ele alınabilir. Server’ın bu taleplere verdiği karşılıklar,
yani ziyaretçinin browser’ına gönderdiği sayfalar, resimler, sesler, videolar
ise karşılıktır ve ASP açısından Karşılık Nesnesi’ni (Response Object)
oluşturur.





SUNUCU NESNESİ





Web Server, ASP
için bir nesnedir. ASP’nin bir çok işini bu nesnenin özellikleri ve metodları
halleder. Server nesnesinin bir özelliği (ScriptTimeout) ve dört metodu (CreateObject,
HTMLEncode, URLEncode, MapPath) vardır. Web Server
çalıştığı bilgisayarın sizin siteniz adına yönetiminden sorumludur. Dolayısıyla,
bu kadar az özellik ve metodu var diye bu nesneden çok yararlanmayacağımızı
sanmayın. ActiveX ve COM bileşenlerini çalıştırmak server’ın görevidir.






ScriptTimeout
Özelliği:

Diyelim ki bir ASP Script’i ya bizim, ya
ziyaretçinin, ya da server’ın bir hatası yüzünden sonsuz döngüye girdi! Döngünün
durması için gerekli şart asla yerine gelmiyor ve script bir türlü yapacağı işi
yapıp, sonlandırmıyor. Bu durumlarda ziyaretçinin ve tabiî server’ın sonsuza
kadar beklemesi mümkün değil! Programın bir şekilde durdurulması gerekir. Bunu
hemen hemen bütün Web server programlarının Script Timeout (Script süre
sınırı) diyalog kutusuna bir değer girilerek yapılır. Örneğin MS-Internet
Information Server için varsayılan Script Timeout süresi doksan saniyedir.
Yani ISS, herhangi bir script’in çalışıp-durmasını doksan saniye bekler. Bu
sürenin sonunda script’in çalışması tamamlanmazsa ziyaretçiye arzu ettiği
sayfanın veya unsurun bulunamadığını bildirir. Bu süreyi (server’ın varsayılan
değerinin altında) kısaltmak değilse bile uzatmak elimizdedir. Bunu
ScriptTimeout
özelliğini kullanarak yaparız. ASP sayfasının herhangi bir
yerine örneğin şu kodu koymak yeter:




<% Server.ScriptTimeout =
100 %>





Bu örneğe göre
server’ın varsayılan Script Timeout süresi doksan saniye ise yüz saniyeye çıkmış
olur. Böyle bir şeyi neden yapmak isteyebiliriz? Script’iniz çok karmaşık veya
başka bir server’daki veritabanından veri çekiyor olabilir. Gerçi bu anlamda
doksan saniye bilgisayar milleti için bir asır anlamına gelir ama yine de
durdurulmasaydı işini başarıyla tamamlayacak bir script, bu sürenin kısalığı
yüzünden server tarafından durdurulabilir. ASP sayfalarınız çok karmaşıksa ve
sürekli Timeout hatası veriyorsa, hata aramadan önce bu süreyi
uzatabilirsiniz.






CreateObject
Metodu:

İlk ASP kodunu yazdığımız andan beri bu metodu
kullandığımızı görüyorsunuz. CreateObject (nesne oluştur) olmasa idi,
dört mevsim birbirini izleyebilir. Yukarıda kullandıklarımız Scripting
nesnesinin bir metoduydu. Bu server nesnesine aittir. Diyelim ki, sayfanızda
reklam amaçlı banner grafiklerini belirli zaman aralığı ile veya
ziyaretçiye gönderdiğiniz cookie (çerez) bilgilerine göre değiştirmek
istiyorsunuz. Bunun için diyelim ki MS-Web Server Programının AdRotator
bileşeninden yararlanacaksınız. Şöyle bir kod işinizi görebilir:




<% Set Reklam =
Server.CreateObject (“MSWS.AdRotator”)%>


<%=
Reklam.GetAdvertisement(“/reklamlar/buyukbanka.txt”)%>




Burada GetAdvertisement, Server’ın AdRotator bileşininin bir
metodudur. (Bunu ayrıntılı olarak anlatacağız.) Server’ın CreateObject
metodundan, veritabanına ulaşırken de yararlanacağız.





MapPath

(Yolu belirle) Metodu:

Web Server açısından “kök
dizin” (root directory) server’ın bulunduğu bilgisayarın sabit diskinde,
herhangi bir klasör olabilir. Örneğin IIS için bu varsayılan değer olarak “C:\inetbup\wwwroot”
klasörüdür. Özellikle ASP ile “program niteliğinde siteler” yapmaya
başladığımızda, sitenin ilgili bütün dosyalarının bulunduğu bir dizin için yol
belirlemek isteyebiliriz. Bunu server nesnesinin MapPath (Yolu belirle) metodu
ile yapabiliriz:



WebDizini = Server.MapPath(“/site_ismi”)



Bu
komutla WebDizini değişkenin değeri şöyle olacaktır:


“C:\inetbup\wwwroot\site_ismi\”


Fakat
bu metodun sadece böyle durağan biçimde kullanılması gerekmez. Bazen
sayfalarımızda ziyaretçi ile etkileşmenin sonucu olarak varsayılan Web
dizinimizi değiştirmek isteyebiliriz. Sözgelimi biri Türkçe, diğeri İngilizce
iki sitemiz varsa ve ana sayfamızda ziyaretçi Türkçe’yi seçtiyse, o noktadan
itibaren Web uygulamamız için Web kökdizini, “/turkish/” olacak ve mesela
resimlerimiz için verdiğimiz “/resimler/” dizini kök dizinde değil, “/turkish/resimler/”
klasöründe aranacaktır. Web yolunu dinamik olarak, yani ziyaretçinin tercihine
bağlı şekilde değiştirebilmek için önce ziyaretçiden gelecek bilgileri nasıl
kullanacağımıza, yani Request (talep) nesnesine değinmemiz gerekir.





HTMLEncode, URLEncode
:
İçinde HTML
açısından kod parçası veya özel işaret sayılan karakterler bulunan metinleri
sayfamıza içerik olarak göndereceğimiz zaman server’ın işaretleri aynen metin
gibi göndermesini sağlamak için örneğin,



Server.HTMLEncode(“Değisken1
<>




yazarsak, ASP bu metni HTML kodu olarak yorumlamaz; metin olarak algılar.
Internet’te bazen özellikle sayfa adresleri belirtilirken bazı değerlerin “URL
Kodu“ dediğimiz şekilde kodlanmış olarak gönderilmesi gerekir. Bu kodlama
türünde boşlukların yerine + işareti konmuş olması şarttır. Bu tür bilgiler
göndereceğimiz zaman



Server.URLEncode(“kelime 1
kelime2 kelimeme2”)




şeklindeki bir kod bunu hemen şu şekle sokacaktır:





kelime1+kelime2+kelime3





TALEP NESNESİ




Web Server çok
akıllı bir programdır. Bir Web ziyaretçisi herhangi bir talepte bulunduğu, yani
bir sayfanın gönderilmesini istediği anda, bu talebi, bir nesne hâlinde ele
alır; koleksiyonlar oluşturur. Bu koleksiyonlar, HTTP protokolü ile iletişimin
sonucu olarak ziyaretçinin browser’ından ve Internet’e giriş noktası olan ISS’in
bilgisayarından başlayan ve Web Server’dan derlenen bir dizi bilgidir. Bir
anlamda, Request nesnesi, Web programımızın Girdi (Input) bölümünü
oluşturur. Request nesnesi kendi içinde dört ana nesne barındırır:





QUERYSTRING VE FORM




Web
ziyaretçisinin bilgisayarından kalkıp server’a gelen herşey, QueryString
koleksiyonunu oluşturur. Bu ziyaretçinin browser’ın URL hânesine yazdığı bir
basit HTML sayfası yolu ve adı olabilir. Bir Form’un Gönder düğmesini
tıkladığında gelen bilgiler olabilir. Bu bilgilerin şu özelliklerini
kullanabiliriz:






Content_Length
:
Bir Form’dan gelen bilgilerin tümümün byte olarak
boyutudur.






Remote_Host
:

Ziyaretçinin IP adresini verir. Ancak Internet’e çevirmeli
ağ (dial-up) ile bağlanan ziyaretçilerimiz her seferinde farklı bir IP
bildirebilirler. Bu yüzden bu bilgiyi ziyaretçinin kimliği sayamayız.



Request_Method
:
Form’da kullandığımız GET veya POST metodunu bildirir. İki
yöntemle gelen bilgi farklıdır. Form’un oluşturduğu bilgileri GET yöntemi ile
alırsak bu, çevre değişkenlerinden QUERY_STRING değişkeninin içine yazılır.
Başka bir ifade ile Form’daki bütün değişkenlerin adları ve bu değişkenin
içerdiği değer yumak yapılır (bu yumağın niteliğine ve nasıl çözeceğimize
geleceğiz) ve Server’da QUERY_STRING değişkeninin değeri olarak yazılır. Form’un
bilgilerini POST yoluyla alıyorsak bunlar Request nesnesinin Form
koleksiyonunun içinde Form’un değişken adları ve ziyaretçinin bu değişkenler
için sağladığı değerler olarak ayrı ayrı yazılır. GET ile sınırlı, POST ile
sınırsız bilgi alabiliriz.



Script_Name
:

O anda çalıştırılmakta olan ASP sayfasının adını verir.






SERVER DEĞİŞKENLERİ





Request
nesnesinin bir diğer koleksiyonu, bizim kendi Web Server’ımızın o anda
çalışmakta olan ASP sayfası için oluşturduğu ortamın değişkenleridir. Bunların
arasında ziyaretçinin browser’ına ilişkin bilgiler de vardır. Önce şu kısa ASP
sayfasını çalıştırarak kendi server’ımızın şu andaki değişkenlerini görelim.
Sonra bunları ayrıntılı ele alalım (SerDeg.asp):






HTTP <br />ServerDegişkenleri Kolleksiyonu


content="text/html; charset=ISO-8859-9">


content="text/html; charset=windows-1254">





HTTP Server Değişkenleri
Kolleksiyonu





<% For Each key in Request.ServerVariables
%>




"%>



<% Next %>


Değişkenin
adı
Değeri
<% =
key %>


<%If
Request.ServerVariables(key) = "" Then



Response.Write " "



Else



Response.Write Request.ServerVariables(key)


End If



Response.Write "



Sizin Host'unuzun adı:
<%=Request.ServerVariables("HTTP_HOST")%>





Bu
sayfayı çalıştırdığımız zaman görüntülenecek tabloda, bir HTTP Server’ın
SerDeg.asp
sayfasını çalıştırdığı anda oluşturduğu ortama şekil veren bütün
değişkenleri göreceksiniz. Bu değişkenleri programlama yoluyla değiştiremeyiz.
Sadece okuyup, yararlanabiliriz. HTTP Server Değişkenleri Koleksiyonu’nun
elemanları şöyle sıralanır:




Değişkenin
adı Değeri



ALL_HTTP

http Başlığı içinde yer alan bütün değişkenler ve değerleri. Başlık adlarının
önünde “HTTP_” öneki vardır.



ALL_RAW

HTTP Başlığı içinde yer alan bütün değişkenler ve değerleri. Başlık adları ve
değerleri istemci tarayıcının verdiği şekilde gösterilir.



APPL_MD_PATH
Web Server’ın ISAPI.DLL dosyası için varsaydığı kök dizin



APPL_PHYSICAL_PATH
Web Server’ın varsaydığı kök dizinin gerçek yolu



AUTH_PASSWORD
Kullanıcı Web Server’a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa,
kullanılan parola



AUTH_TYPE
Kullanıcı Web Server’a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa,
kullanılan yetkilendirme yöntemi



AUTH_USER
Kullanıcı Web Server’a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa,
kullanıcı adı



CERT_COOKIE
Kullanıcı siteye bağlanmak için yetkilendirme sertifikası kullanıyorsa kendisine
verilen kimlik (ID)




CERT_FLAGS Sertifikanın varlığını gösteren bit değeri




CERT_ISSUER Sertifika varsa veren kurum




CERT_KEYSIZE Secure Socket Layers kullanılıyorsa,
bağlantı için anahtar değeri




CERT_SECRETKEYSIZE Özel anahtar değeri




CERT_SERIALNUMBER Sertifika seri no.




CERT_SERVER_ISSUER Sertifikayı veren merci




CERT_SERVER_SUBJECT Server Sertifikasının “konu” alanı değeri



CERT_SUBJECT
İstemci Sertifikasının konu alanı değeri



CONTENT_LENGTH
İstemcinin gönderdiği bilgi yumağının boyutu




CONTENT_TYPE Ziyaretçiden gelen bilgilerin GET veya POST
metoduna göre edindiği tür




GATEWAY_INTERFACE Web Server’ın ziyaretçi ile etkileşim arayüzünün adı
ve sürümü. Genellikle: CGI/1.1




HTTPS Ziyaretçi ile bağlantı güvenli ise ON,
değilse OFF



HTTPS_KEYSIZE
Secure Sockets Layer için bağlantı anahtar sayısı




HTTPS_SECRETKEYSIZE Özel Server sertifikasının gizli anahtar sayısı




HTTPS_SERVER_ISSUER Özel Server sertifikasının veren merci




HTTPS_SERVER_SUBJECT Özel Server sertifikasının konusu



INSTANCE_ID
Web Server’ın aynı anda kaç kere çalışmakta olduğu




INSTANCE_META_PATH Şu anda çalışmakta olan Web Server’ın Meta yolu



LOCAL_ADDR
İstemcinin IP numarası



LOGON_USER
İstemci Windows NT sisteminde ise oturum açma adı



PATH_INFO
Çalışmakta olan ASP’nin göreli yolu ve adı



PATH_TRANSLATED
Çalışmakta olan ASP’nin gerçek yolu ve adı



QUERY_STRING
İstemcinin gönderdiği bilgi kümesi



REMOTE_ADDR
İstemcinin Host’unun (ISS’inin) IP’si



REMOTE_HOST
İstemcinin Host’unun (ISS’inin) adı



REMOTE_USER
İstemcinin gerçek adı



REQUEST_METHOD
İstemciden bilgi isteme yöntemi (GET veya POST)



SCRIPT_NAME
Çalışmakta olan ASP’nin adı



SERVER_NAME
Sunucunun adı



SERVER_PORT
Sunucuya bağlantının geldiği TCP kapı numarası




SERVER_PORT_SECURE TCP kapısı güvenli ise 1, değilse 0




SERVER_PROTOCOL Server’ın çalıştırdığı HTTP’nin sürümü




SERVER_SOFTWARE Server programının adı ve sürümü




URL Şu anda geçerli URL













ASP nesne
yönelimli bir programlama dilinin ürünüdür. Visual Basic ya da herhangi başka
bir programlama dili ile program yazdı veya yazan birinin yanında bulunduysanız
mutlaka görmüşsünüzdür: Günümüz program yazma editörlerinde önce bir form
oluşturur (bu form, Web sayfalarımızda kullandığımız formlardan değil, bir
programı çalıştırdığımızda karşımıza çıkan görsel yapıdır) daha sonra bu forma
örneğin bir “buton” ekler ve muhtemelen yandaki özellikler menüsünden butonun
bazı özellikleri değiştiririz. Bu son yaptığımız şey, “buton” nesnesinin
özelliklerini belirlemekten ya da değiştirmekten ibarettir. ASP kodlarımızı
yazarken bu şekilde çalışan bir görsel editörümüz olmadığından (olması da
imkânsız zaten) oluşturduğumuz her bir nesnenin özelliğini, nasıl
değiştireceğimizi bilmemiz ve buna göre hareket etmemiz gerekmektedir. Kısacası
diyeceğim şu ki; nesneleri iyi öğrenelim.





COOKIE NESNESİ






SERTİFİKA
NESNESİ





Sertifika, HTTP
bağlantısında “Ben filancayım!” diyen istemcinin, gerçekten filanca olup
olmadığını gösterir. Küçük birer yazılımdan ibaret olan sertifikaları yetkili
bir kurum veya şirket verir. Bu bir tür seri numarasıdır. Şifreleme teknikleri
gelişmiş olduğu için taklit edilmesi zordur. Sertifika uygulaması için Web
Server’ın Secure Socket Layers denen güvenli HTTP protokolünü kullanması
gerekir.





ASP açısından
sertifika ile ilgili her türlü bilgi “ClientCertificate” koleksiyonunda
bulundurulur. Örneğin, bir ziyaretçinin gerçekten sitenize girmeye yetkili olup
olmadığını anlamak için




<%SertifikaNo = Request.ClientCertificate(SerialNumber)
%>





gibi bir kodla
istemcinin Sertifika seri numarasını SertifikaNo değişkenine atayabilir ve daha
sonra bu değişkenin değerini elinizdeki bir liste ile karşılaştırabilirsiniz.




KARŞILIK (RESPONSE) NESNESİ





Gelelim Web
server’ın çıktı (output) işlerini yöneten nesnesine. Response nesnesi ile
server’ın istemciye gönderdiği karşılıklar kontrol edilebilir. Server’dan Web
tarayıcısına giden her şey karşılıktır. Bu bir ASP veya HTML sayfası olabilir;
sayfanın içindeki GIF, JPG veya PNG grafiği, bir Flash animasyonu, video veya
ses dosyası olabilir. Böylesine zengin bir içeriğe sahip olan Response
nesnesinin, sadece bir koleksiyonu vardır: Cookie’ler. Buna karşılık
Response
nesnesinin kullanabileceğimiz çok sayıda özelliği ve metodu
bulunur. Önce cookie koleksiyonunu ele alalım.




RESPONSE NESNESİNİN
METODLARI





Response
nesnesinin bir çok metodu vardır; bunlardan .Write’ı daha önceki örneklerimizde
çokça kulandık:




<%


DIM Adi_Soyadi


Adi_Soyadi = “Sarı Çizmeli
Mehmet Ağa”


Response.Write(“Merhaba,
benim adım, “ & Adi_Soyadi)


%>




örneği, ziyaretçinin browser penceresine, “Merhaba, benim adım Sarı Çizmeli
Mehmet Ağa” yazdırır. Fakat VBScript, size bir kolaylık sağlar; buna bazı ASP
tasarımcıları “eşittir metodu” adını verir:



<%


DIM Adi_Soyadi


Adi_Soyadi = “Sarı Çizmeli
Mehmet Ağa”


%>


<%= “Merhaba, benim adım, “
& Adi_Soyadi %>



Tahmin edeceğiniz üzere
sonuç yukarıdaki ile aynı olacaktır.





ÖZELLİKLERİ




Response nesnesinin bir çok özelliğini kullanarak ziyaretçimize göndereceğimiz
sayfaları ve diğer unsurları yönetebiliriz:



Buffer (Tampon):

Bu nesne özelliğinin
değeri True (doğru) olarak ayarlandığında ziyaretçiye gönderilecek
sayfanın bütün unsurları bir tampon bölgede toplanır; script’in çalışması
bitinceye kadar beklenir ve HTML sayfa toptan gönderilir. Kimi zaman ASP kodumuz
sonuna kadar çalıştığında ziyaretçiyi başka bir sayfaya ve siteye
yönlendirebilir. Bu gibi sebeplerle, özellikle çok işlem gerektiren ASP
sayfalarının baş tarafına bunu sağlayan kodu koymakta yarar olabilir:



<%


Option Explicit


Response.Buffer = TRUE


%>





Flush (Hemen gönder):

Buffer metodu sayfanın
tümünün script’in icrası bitmeden gönderilmesini önlerken, Flush bunun tam
tersini yapar. ASP, Response nesnesinin Flush metodu kullandığımızı gördüğü
anda, o ana kadar icra edilmiş kodun sonucu olan HTML’i browser’a gönderir:



<%


Option Explicit


Response.Flush


%>




Clear (Temizle):

Buffer

metodu ile script’in sonunu beklerken geçici bir alanda tutulmakta olan HTML,
Clear
metodu ile cache’den temizlenir. Flush metodunda tampondaki
HTML browser’a gönderilir. Ancak Clear metodu tampon bölgedeki her şeyi
yok eder. Böyle “tehlikeli” bir metod neden vardır ve nerede kullanılabilir? Bir
çok yerde! Ziyaretçinin, sözgelimi elektronik alışveriş sitemizde alışverişten
vazgeçtiğini belirtmesi üzerine, tampon bölgede tutmakta olduğumuz ve alınan
mallar listesini içeren HTML’i bu yöntemle temizleriz:




<%


Option
Explicit


Response.Clear


%>





Expires (Zamanaşımı):

Kullanıcı tersine bir ayar
yapmadıysa, browser genellikle görüntülediği sayfaları Temporary Internet Files
dizinine (cache) kaydeder ve tekrar aynı sayfayı görüntülemek
istediğinizde sayfayı Internet’ten edinmek yerine kendi sabit diskinden alır.
Oysa özellikle haber gibi süreli ve devamlı güncellenen bilgilerin sunulduğu Web
sitelerinde bu sitenin itibarını sarsar. ASP tekniğiyle bunu önleyebiliriz. ASP
sayfamızda bu sayfanın örneğin 60 dakikadan fazla cache dizinde
tutulmamasını sağlayacak Expires metodunu kullanabiliriz:



<%


Option Explicit


Response.Expires = 60


%>




Burada yazdığımız rakamı değiştirerek, sayfanın geçici alanda tutulacağı
dakikayı değiştirebiliriz. “Expires = 0” ifadesi sayfanın hiç saklanmamasını
sağlar.



End (Son):

Response

nesnesinin o anda icra edilmekte olan script’i durdurarak, o ana kadar ne elde
edilmişse hepsini browser’a göndermesini sağlayan metodu olan End, aynı
zamanda Buffer metoduyla tutulan HTML’in de gönderilmesine yol açar. Bu
metoddan sonraki HTML veya ASP kodları icra edilmez:



<%


Option Explicit


Response.End


%>



UYGULAMA VE OTURUM NESNESİ




ASP’nin,
standart CGI’dan en büyük farkı ve belki de ASP’nin geliştirilmesine sebep olan
en büyük unsur, CGI’ın yetersiz kaldığı noktalardan biri olan Web Server’ın her
bir Web ziyaretçisini oturumunun başından sonuna kadar izleyebilmesi ihtiyacıdır.
ASP açısından, bir site “uygulama programı” (Application) sayılır. Her ziyaretçi
de bir “oturum” (Session) sayılır. Peki neden ASP ve HTML sayfalarından oluşan
site yapısına application deniyor da siteye yapılan her hangi bir ziyaret,
session nesnesini gündeme getiriyor? Bunu her iki nesnenin işlevleri ile
açıklayabiliriz.





Application
nesnesi, sitenin tümüyle ilgili bilgileri (değişkenleri, nesneleri ve metodları)
tutar. Session nesnesi ise ziyaretçinin sitemize girmesinden itibaren izini
sürer. Farz edelim ki, bir borsa sitesi yaptınız. Ziyaretçileriniz gelerek,
satışa sunulan hisse senetlerinin değerlendirmelerini okuyacak ve size, “Şu, şu
hisse senetleri al!” diye talimat bırakacak. Bütün ziyaretçilerinizin erişeceği
tek bir veritabanınız var. Buna karşılık her bir ziyaretçinin yapacağı farklı
tercihler, vereceği farklı kararlar olacaktır. Application nesnesi, sitenizle
veritabanına erişmekten tutun, alışverişleri denetlemeye kadar sitede yapılacak
bütün işlerin bütün kurallarını bilecek ve uygulayacak. Session nesnesi ise
sözgelimi sadece benim alışverişlerimi, tercihlerimi bilecektir. Örnekleri
çoğaltmak mümkün. Özellikle üyelik sistemi üzerinden ve ASP tabanlı işletilen
sitelerde Session nesnesinin kullanımı elzem bir ihtiyaç halini alıyor. Siteye
giren ziyaretçinin üyelik bilgilerini kullanarak kendini tanıtmasının ardından
bir çok Session nesnesi devreye girer ve kullanıcı adım adım izlenmeye başlanır.
Keza bu tip sitelerde “Log Out” diye bilinen sistemi terketme eylemi sözgelimi
<% Session(“Online”)=True %> gibi bir değerin,

<% Session(“Online”)=False %> şeklinde değiştirilmesinden ibaret oluyor. Bir
dahaki ay bu tip bir sistemi en ince ayrıntılarına kadar inceleyeceğiz.





HTML ve
JavaScript ile biraz oynadıysanız, bilirsiniz ki bir sayfadan ötekine değişken
değeri aktarmak, imkânsıza yakın derecede zordur. Değişkenlerin ömrü,
fonksiyonla sınırlıdır. Bir ASP sayfasında herhangi bir değişkeni fonksiyon
dışında tanımlamakla ve değer atamakla onu bütün fonksiyonlar için geçerli hâle
getirebiliriz. Fakat, kimi zaman isteriz ki, bir fonksiyonun değeri bütün
sayfalarda aynı olsun. Ziyaretçinin sayfa değiştirmesi ile değişkenin değeri
değişmesin. Bunu ASP’de yapmak çok kolaydır. ASP’de bu zorluğu yenebilmek için
değişkenlerimizi Session nesnesi için oluşturabiliriz. Bu değer, ziyaretçinin
oturumu boyunca devam eder; bütün ASP sayfalarındaki bütün fonksiyonlar
tarafından bilinebilir. Örneğin,




Session (“Fiyat1”) = 675000





bütün Session
için geçerli bir “Fiyat1” değişkeni oluşturur ve ona “675000” değerini atar.
Kimi zaman, değişkenin çok daha geniş kapsamlı olmasını, yani ömrünün Session
ile değil bütün Application boyunca belirli olmasını isteyebiliriz. O zaman bu
değişkeni Application düzeyinde tanımlayabiliriz:




Application (“Fiyat1”) =
675000





Bu durumda
Fiyat1 değişkeni bütün ziyaretçiler için aynı değere sahip olacaktır.



Daha önce, “HTTP
ile kurduğumuz bağlantı, belirsiz durum bağlantısıdır” demiştik. Bu, server’ın
bir ziyaretçiye arzu ettiği sayfayı gönderdikten sonra, onu alıp almadığını, o
sayfada ne tercihler yaptığını bilmemesi demektir. Oysa, ziyaretçiye sitemize
bağlandığı anda bir Session kimliği verirsek ve her yeni sayfa talebinde bu
kimliği kontrol edersek, kimin hangi oturumunu sürdürdüğünü biliriz. ASP uyumlu
bir Web Server, ziyaretçi yeni bir tercih yapmadığı takdirde her Session
nesnesini 20 dakika açık tutar; sonra siler. Bu süreyi Session nesnesinin
Timeout özelliği yoluyla değiştirebilirsiniz. Session belirleyen cookie ASP
uyumlu Web Server tarafından otomatik olarak gönderilir ve takip edilir.
Tasarımcı olarak bizim bu konuda bir şey yapmamız gerekmez.





Bir Web
programınıza aynı anda kaç kişi ulaşırsa (yani sayfalarınızı kaç kişi talep
ederse), o kadar Session nesnesi oluşur. Burada bazen çok işe yarayan bir durum
ortaya çıkar. Session nesnesi her oturum açan ziyaretçiye bir numara tayin eder
ve bunu “SessionID” özelliğinde saklar. SessionID server tarafından tayin edilir
ve sadece okunabilir, değiştirilemez. Şimdi toparlamak amacı ile oturum
(Session) nesnesinin bütün bileşenlerini bir tablo halinde görelim.




OTURUM










KOLEKSİYONLAR





  • Contents



  • StaticObjects



ÖZELLİKLER





  • CodePage


  • LCID



  • SessionID



  • Timeout



METODLAR





  • Abondon



OLAYLAR





  • OnStart



  • OnEnd






Bu öğeleri
kısaca açıklayalım:



• Contents:

Script komutları boyunca oturuma eklenmiş elemanların tümünü içerir.

• StaticObject: etiketi ile Session’a eklenmiş nesnelerin
tamamını içerir.

• CodePage: Sembol tasviri için kullanılan kos sayfasını ayarlar.

•LCID: Yerel tanımlayıcıyı ayarlar.

• Abondon : Bir Session nesnesini ortadan kaldırır ve kaynaklarını
boşaltır.




Kolları sıvayalım ve bir örnek kod yazalım. Bu yazacağımız ASP ile bütün bu
özellikleri bir arada göreceğiz:







Session Nesnesi







Session Nesnesi ve Özellikleri





Session ID : <%=Session.SessionID%>



Session TimeOut : <%=Session.TimeOut%>



Bu sayfa bu oturumda <%=Session(“intSessionObjVisit”)%> defa ziyaret edildi.

<%=Session(“intSessionObjVisit”)= Session(“intSessionObjVisit”)+1%>









Siteniz bir adet olduğuna göre bir adet uygulama nesnesi vardır. Bu nesnenin
bütün oturumlar için sitemizin ihtiyaçlarına uygun ve aynı uygulama kurallarına
sahip olmasını sağlayan bir dosya vardır: Global.asa. Bu dosya PWS veya IIS
kurulurken oluşturulur. ASP ile Web programlarınızı, örneğin MS Visual Studio
ile oluşturuyorsanız, program sizin için seçtiğiniz dizinde bir Global.asa
dosyası oluşturacaktır. Bu dosyada, çoğu zaman, sitemize ilk ziyaretçinin
gelmesiyle oluşan Application_OnStart ve son ziyaretçinin çıkmasıyla oluşan
Application_OnEnd ile herhangi bir ziyaretçinin bir sayfaya erişmesiyle oluşan
Session_OnStart ve ziyaretçinin sitemizden çıkması ile oluşan Session_OnEnd
olayları halinde ne yapılacağı yazılıdır. Bu dosyanın içeriği, standart bir ASP
dosyasına benzemekle birlikte, adındaki uzatmanın .ASP değil de .asa olmasının
sebebi, dosyanın Active Server Application dosyası olmasıdır. ASP uyumlu bir Web
Server programı sitemize ulaşan ilk ziyaretçiyi gördüğü anda Global.asa
dosyasını çalıştırır.



Application ve Session nesnelerin kendi başlarına en çok kullanıldığı yer,
sitemize gelen ziyaretçilerin sayısını (sitemizin aldığı “hit” sayısını)
tutmasını sağlamaktır. Bu, genellikle Global.asa programına bir sayaç
yerleştirilerek yapılır. Buna güzel bir örnek verelim. Diyelim ki, sayfamızın
bir kenarında şu anda sitemize kaç kişinin bağlı olduğunu yazmak istiyoruz.
Tecrübeyle biliyorsunuz ki, bu işlem hem kolay hem de etkileyicidir. Fakat
tecrübe etmediyseniz ve “Bunun bize ne yararı olacak?” diyorsanız, ziyaretçi o
siteye ne kadar ilgi olduğunu görebilir ve kendisi ile beraber sitede kaç kişi
olduğunu bilebilir derim.



Global.asa dosyasında, ziyaretçi Web sitenize eriştiğinde ilk önce ne
yapılacağını belirtebiliriz. Biz de bu özellikten faydalanarak dosya içerisine
basit bir sayaç yerleştireceğiz. Çalışma mantığı oldukça basit. Server ‘da her
yeni Session (oturum) açılışında sayaç bir artırılacak, her oturum kapanışında
sayaç bir azaltılarak sonuç kullanıcılara yansıtılacak. Eğer Web Server’ınızın
kök dizinindeki global.asa dosyasını bir editörle açarsanız muhtemelen şöyle bir
görüntü ile karşılaşacaksınız.





Şimdi bu dosyanın
içeriğini aşağıdaki gibi değiştirelim.






Değişikliği yaptıysanız,
gelelim bunu kullanıcılara nasıl göstereceğimize. Ana sayfamız olan
“default.ASP” dosyasının bir köşesine aşağıdaki ifadeyi yerleştirelim.








Sitemizde şu anda <%=Application("online")%>




ziyaretçi var.






Simdi default.ASP
dosyasını açalım. Evet işte bu kadar basit. Dikkat etmemiz gereken bir nokta
var! Burada kullandığımız default.ASP ve global.asa dosyaları aynı klasör
içerisinde bulunmalılar.

Googleda AraGoogle da bu haberi ara
Etiketler:

ECBanner bloggping TurkeyRank.Com - Pagerank Servisi pagerankonline.de - Pagerank Anzeige ohne Toolbar On our way to 1,000,000 rss feeds - millionrss.com
Seo Memurvadisi Backlink Austausch ECBannerFree Automatic Backlinks Free Automatic Backlinks Free Automatic BacklinksFree Automatic Backlinks Free Automatic BacklinksFree Automatic Backlinks
Bu sitedeki yazılar telif hakkları göz önüne alınarak yayınlanmaktadır. Kaynak göstermeksizin Tamamı veya Bir Kısmının KOPYALANMASI YASAKTIR. yayınlanan bu makale ve eserlerin hak sahipleri herhangibir nedenle telif hakkı idda ederlerse ve bizce uygun görülmesi halinde (gerçeklik esası olması dahilinde) bize lütfen mail atsınlar (ozkan@mail.nu) en kısa sürede eserleriniz sitemizden kaldırlır. © 2008 www.odeveson.blogspot.com