ASP’yeGiriş

1 Ağu

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.

<HTML>

<HEAD>

<TITLE>JavaScript ile Tarih</TITLE>

<meta http-equiv=”content-type” content=”text/html; charset=ISO-8859-9″>

<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>

</HEAD>

<BODY BGCOLOR=WHITE>

<% Dim metin

metin=”<H1>Merhaba…Yine ben…Ne o hala asp mi çalışıyorsunuz…Sizi tebrik ederim.Çok azimlisiniz…</H1>”

%>

<%

response.write metin

%>

<br>

<%

metin=”<H1>Heyyy… Unuttunuz mu benim adım değişken.Benim değişmemden daha normal ne olabilir ki ???</H1>”

%>

<%

response.write metin

%>

</BODY>

</HTML>

İ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 < 199 Then

……………………….

%>

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 %>

<HTML>

<%

Dim Degisken(2), Toplam

Degisken(1) = “Mustafa”

Degisken(2) = “Doğan”

Toplam = degisken(1) + Degisken(2)

%>

<% =Toplam %>

</HTML>

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:

<HTML>

<HEAD>

<TITLE>ASP ILE SAATE GORE SELAM</TITLE>

<META http-equiv=”content-type” content=”text/html; charset=ISO-8859-9″>

<META http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>

</HEAD>

<CENTER>

<h2>

<font color=”#FFFFFF”>

<! — birinci durum–>

<%

If Hour(Now) <12  Then

Response.write “Günaydın !!”

Response.Write “<body bgcolor=’#0066CC’>”

%>

<! — ikinci durum–>

<%

ElseIf Hour(Now) >= 18 Then

Response.Write “İyi akşamlar! ”

Response.Write “<body bgcolor=’#000000′>”

%>

<! — üçüncü durum–>

<%

Else

Response.Write “Tünaydın! ”

End If

Response.Write “<body bgcolor=’#FF9900′>”

%>

</font>

</H2>

</CENTER>

</HTML>

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 “<body bgcolor=’#000000’>” 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

%>

<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>

<meta name=”GENERATOR” content=”Microsoft FrontPage 4.0″>

<meta name=”ProgId” content=”FrontPage.Editor.Document”>

<title>Günün Tarihi</title>

</head>

<body>

<p><font face=”Verdana” size=”2″><b>Günün Tarihi </b></font>: <font color=”#800000″>

<%=gun%>&nbsp;<%=strAy%>&nbsp;<%=sene%>

</font></p>

</body>

</html>

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 < Değisken2”)

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):

<HTML>

<HEAD>

<TITLE>HTTP ServerDegişkenleri Kolleksiyonu</TITLE>

<meta http-equiv=”content-type” content=”text/html; charset=ISO-8859-9″>

<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>

</HEAD>

<BODY BGCOLOR=white>

<CENTER>

<H2>HTTP Server Değişkenleri Kolleksiyonu</H2>

</CENTER>

<TABLE BORDER=1>

<TR><TD><B>Değişkenin adı</B></TD> <TD><B>Değeri</B></TD></TR>

<% For Each key in Request.ServerVariables %>

<TR>

<TD><% = key %></TD>

<TD>

<%If Request.ServerVariables(key) = “” Then

Response.Write “&nbsp;”

Else

Response.Write Request.ServerVariables(key)

End If

Response.Write “</TD>”%>

</TR>

<% Next %>

</TABLE>

<p>

Sizin Host’unuzun adı:<B> <%=Request.ServerVariables(“HTTP_HOST”)%></B>

</BODY>

</HTML>

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: <object> 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:

<html>
<head>
<title> Session Nesnesi </title>
</head>
<body>
<center>
<h2> Session Nesnesi ve Özellikleri </h2>
<h3>
Session ID : <%=Session.SessionID%> <p>
Session TimeOut : <%=Session.TimeOut%> <p>
Bu sayfa bu oturumda <%=Session(“intSessionObjVisit”)%> defa ziyaret edildi.
<%=Session(“intSessionObjVisit”)= Session(“intSessionObjVisit”)+1%>
</h3>
</body>
</html>

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.

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
</SCRIPT>

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

<SCRIPT RUNAT=Server>
Sub Application_OnStart
Application(“online”) = 0
End Sub
Sub Application_OnEnd
End Sub
Sub Session_OnStart
Session.Timeout = 5
Session(“Start”) = Now
Application.lock
Application(“online”) = Application(“online”) + 1
‘Her yeni ziyaretçi girişinde sayaç bir artmış oldu.
Application.unlock
End Sub
Sub Session_OnEnd
Application.lock
Application(“online”) = Application(“online”) – 1
‘Her ziyaretçi çıkışında sayaç bir azalmış oldu.
Application.unlock
End Sub
</SCRIPT>

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.

<center>

Sitemizde şu anda <b><%=Application(“online”)%><b>

ziyaretçi var. </center>

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.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s