Asp

1.1. İnternet protokollerine bakış ve HTTP
İlerideki bölümler, sunucu taraflı programlama dillerinden ASP’yi (Active Server Pages) ayrıntılı olarak anlatmak üzere hazırlanmıştır. Fakat burada şu soru olabilir : Bir sunucu taraflı programlama dili tam olarak nedir ?

Sunucu taraflı programlamanın ne demek olduğunu anlamak için isterseniz ilk önce client taraflı (istemci taraflı) programlama dillerinden HTML dilinin çalışma prensibine bakalım.

HTTP (HyperText Transfer Protokol), web üstünde bilgi dağıtımı için kullanılan temel protokoldür. HTTP, dosyaların kolaylıkla transfer edilebilmesi için oldukça etkin ve hızlıdır. HTTP diğer web teknolojileri ile birlikte gelişmektedir. HTTP’nin temel özellikleri HTTP 0.9 da bulunmaktadır. HTTP’nin 0.9 sürümünde birçok eksikler bulunuyordu. Bunlardan başlıcaları içerik tiplemesine (content typing) izin vermemesi ile istek ve cevapların sağlanmasında meta-bilgilerin kullanılması için koşullar olmamasıdır.

HTTP/0.9 un eksikliklerini gidermek için HTTP’nin şu anda kullandığımız sürümü olan HTTP/1.0 geliştirilmiştir. Bu sayede Content-Type (içerik tipi) alanı bulunan başlıklara ve diğer tipte meta bilgilerine izin verilmiştir. Aktarılan verinin tipi Content-Type alanında tanımlanır. Ayrıca dil, verinin kodlanma tipi ve durum bilgisi gibi veri hakkında başka bilgiler de sağlayabilirsiniz.

Çoğu web kullanıcısı ve yayımcısının HTTP’de istediği özelliklerden biri de güvenliktir. Web yayımcıları ve kullanıcıları güvenli olarak işlemleri (transaction) iletebilmeyi istemektedir. Elektronik ticaretin yaygın olarak kullanımını sağlamak için güvenlikle ilgili anahtar nokta, işlemlerin güvenliğini sağlayabilme ve kodlayabilmektir. Şu anda HTTP’nin güvenlik özellikli sürümleri için çeşitli taslaklar bulunmaktadır. Bu özelliklerden birisi kabul gördüğünde HTTP kullanan güvenlikli işlemler bir hayal olmaktan çıkacaktır.

1.1.1. Bağlantısız protokoller ve bağlantılı protokoller.
HTTP etkin bir protokoldür çünkü hızlı, rahat ve ayrıca yeteneklidir. Bu hız, yeteneklilik ve kuvvetliliği sağlayabilmek için HTTP, bağlantısız (connectionless) ve durumu olmayan (stateless) bir protokol olarak tanımlanmıştır.

HTTP bağlantısız bir protokoldür. Bağlantısız protokoller, bağlantı temelli protokollerden isteklere verilen cevap karşılıklar noktasında ayrılırlar. Bağlantısız bir protokolde istemci sunucuya bağlanır, bir istekte bulunur, cevap alır ve ardından diğer isteklere hizmet vermek için bağlantıyı keser.

Bağlantı temelli bir protokol örneği FTP’dir. Bir FTP sunucusuna bağlanıldığında dosya aktarımı bittikten sonra bile bağlantı devam eder. Bu bağlantının korunabilmesi için sistem kaynakları gerekir. Yani çok sayıda açık bağlantı tutmak sunucunun kolaylıkla çökmesine sebep olabilir. Sonuç olarak FTP sunucularının çoğu belirli bir anda en fazla 250 açık bağlantıya izin verecek şekilde ayarlanmaktadır. Bunun anlamı FTP sunucusuna aynı anda en fazla 250 kullanıcı bağlanarak işlem yapabileceğidir (bu özellik çeşitli FTP sunucularında değişiklik göstermektedir). Bu sorunla beraber doğru sonlandırılmayan bağlantılarda problemler yaratabilmektedir. Bu tip protokollerde işlemler kontrolden çıkarak sunucunun çökmesi gibi istenmeyen sonuçlar görülmektedir.

Tersine HTTP bağlantısız bir protokoldür. İstemciler sunucuya bağlanır bağlandıklarında istekte bulunur, cevabını alır ve ardında bağlantıyı keser. Bağlantı devamlı korunmadığı için işlemler tamamlanırken hiçbir sistem kaynağı meşgul edilmez. Sonuç olarak HTTP sunucuları sadece aktif bağlantılarla sınırlıdır ve az bir sistem yükü ile binlerce işleme olanak tanımaktadır. Bağlantısız protokollerin dezavantajı ise aynı istemci bir daha bilgi isteğinide bulunduğunda bağlantının yeniden kurulması gereğidir. İstemci browserlar bu yükü en aza indirebilmek için alınan verileri saklayarak yine aynı veri istendiğinde kullanan sistemler geliştirmişlerdir.

1.1.2. Durumu olmayan protokoller ve durumu olan protokoller.
HTTP durumu olmayan (stateless) bir protokoldür. Durumu olamayan protokoller durumlu protokollerden isteklerle ilgili bilgilerin tutuluş şeklinde farklılık gösterirler. Durumu olmayan protokollerde işlem işlendikten sonra işlem hakkında bilgi saklanmaz. Durumlu protokollerde ise işlem işlendikten sonra durum bilgisi saklanır.

Durumlu protokol kullanan sunucular işlemlerle ilgili bağlantının durumu, çalışmakta olan işler, bu işlerin durumu vs. gibi bilgileri tutar. Genel olarak bu durum bilgisi bellekte kalır ve sistem kaynaklarını kullanır. İstemci durumlu bir protokol kullanan sunucu ile bağlantısını kestiğinde bu durum bilgisi silinmeli ve oturum sonlanmalıdır.

Durumu olamaya protokoller küçük hacimlidir. Bu protokolleri kullanan sunucular tamamlanmış işlemler ve işler hakkında hiçbir bilgi tutmazlar. Bir istemci durumu olmayan protokol kullanan sunucu ile olan bağlantısını kestiğinde hiçbir verinin silinmesine ya da oturumun sonlandırılmasına gerek kalmaz. Durum bilgisinin kaydının tutulmaması sayesinde sunucu üzerine daha az yük biner ve sunucular işlemleri hızlı bir şekilde işleyebilirler. Web yayımcıları için bu protokolün dezavantajı ise eğer web dokümanları için durum bilgisinin tutulmasını istiyorsanız bunun doküman başlığında meta-bilgi şeklinde belirtilmesinin gerektiğidir.

1.2. HTML nedir ?
Tim Berners-Lee webi tasarlarken herkesin webde yayımcılık yapmasına olanak sağlayacak kadar genel ve kullanımı kolay bir arabirimi olacak şekilde tasarladı. Cern’deki çalışanlarla beraber HTML dilini geliştirdiler. HTML dili SGML’nin (Standart Genelleştirilmiş Anlamlandırma Dili) bir alt kümesi olarak tasarlanmıştır. HTML için SGML’nin temel alınması web için geliştirilen dilin platformlar arası bir çözüm olarak kendini kanıtlamış sağlam bir standartta kök salmasına sebep olmuştur.

HTML dili oluşturulurken SGML’den sadece gerekli olan alanlar alınmıştır. Bu şekilde HTML’in karışıklığı ve dokümanların network üzerinden transferi için harcanan kaynakların miktarı bir hayli azalmıştır. HTML için SGML’nin baz alınmasının bir diğer avantajı ise doküman tanım tiplerinin (DTD) HTML standartlarını genişletmek için kolaylık sağlamasıdır. Sonuçta HTML’I geliştirenlerin amacı zaman içinde geliştirilebilen basit bir dil yazmaktı.

HTML dilinin işletilme prensibi bir hayli basittir; Kullanıcı gözatıcısından (web browser) bir url girdiği zaman (URL hakkında daha fazla bilgi için

EK-1 : URL’ler Hakkında Ayrıntılı Bilgi) e bakınız) istek bu url’ye sahip sunucuya gider. Örneğin “//http://www.akkoyun.net/test.htm”// şeklindeki bir giriş olduğu zaman gözatıcı, serverdan “test.htm” dosyasını ister. Server ise bu dosyayı kendi iç dosya yapısında arayarak bulur ve dosyayı aynen gözatıcıya yollar.

Eğer istek sonrasında dosya bulunamaz ise server standart hata kodlarından oluşan kod numaralarından sayfa bulunamadı (“page can not found”) hatası olan “404” kodlu hatayı gözatıcıya HTTP başlık bilgisi olarak geri yollar. Bu hata kodunu da gözatıcı kendine göre yorumlayarak gözatıcıda gösterir.

Dosya sistemi tarafından bulunan doküman gözatıcıya yollanır. Gözatıcıya gelen HTML belgesi gözatıcı tarafından yorumlanarak işletilir ve ekranda gösterilir.

Bu konuda üzerine basarak belirtmekte fayda gördüğüm nokta HTML’in sunucu tarafında işletilmeyip tamamen istemci tarafında (client) işletiliyor olmasıdır. Böylece sunucu üzerinde hiçbir işlem yapılmadığı için sunucuya yük binmeyecektir.

1.3. ASP’nin Doğuşu
HTML in gelişmesi ile birlikte kullanıcılara web sayfalarına bilgi girebilmelerine olanak tanında ( elementi yardımı ile). Bu şekilde bir çok uygulama geliştirildi çünkü artık kullanıcı da sunucuya bilgi gönderebiliyordu. Fakat çoğu uygulamada bu kullanıcıdan gelen bilgilerin anında işlenmesi ve yeniden bir text bazlı HTML dokümanı hanine getirilmesi gerekiyordu. Bu ise hiç hızlı bir yöntem değildi.

Bu zorluğu aşmak isteyen geliştiriciler kolları sıvayarak CGI (Common Gateway Interface) arabirimini geliştirmeye başladılar. Bu arabirimi standart haline getirdiler ve tamamen “C” dili üzerine kurdular. “Cgi-bin” dizini de bu şekilde doğmuştur (“bin” terimi derlenmiş “C” kodu olmasından dolayı “binary code” anlamında eklenmiştir). İlk uygulamalar derlenmiş ufak programcıklar halinde olmuştu. Fakat bu haliyle bile kullanışlı değildi çünkü dosya içinde yapılacak en ufak değişiklikte bile yeniden derlenmesi gerekmekteydi. Buda CGI’ın kullanımını olumsu yönde etkiliyordu.

Bu kısıtlamaları kendine sınır olarak görmeyen geliştiriciler yeni bir script dili geliştirdiler. Bu dil “Practical Extraction and Reporting Language” yani PERL adını aldı. Bu dil sunucu ile iletişim halinde olan ilk dildi yani “C veya C++” dilleri ile yazılan scriptin her seferinde derlenmesi derdi ortandan kaldırılmış oldu.

Perl hala popüler bir dil olarak çoğu uygulamada özellikle de Unix ve Linux tabanlı sistemlerde kullanılmaktadır.

1.3.1. Server-Tabanlı Script Teknolojileri
Şimdiye kadar anlattığım CGI dilleri web sunucusu üzerine bir yama yapmadan yada ekstra bir program yüklemeden çalışmamaktadır. Bu programlar kullanıcıdan gelen isteği algılar ve isteğe göre dosyayı okur daha sonra onu sunucu içinde işler ve bir çıkış dosyası oluşturarak kullanıcıya sunarlar.

Perl ilk popüler sunucu-tabanlı uygulama geliştirme dili olarak literatüre geçmiştir. Fakat bu dil çok fazla gelişim geçirmiştir. Özellikle de Unix ve Linux tabanlı sunucularda yeni nesil programlama dili olan PHP (Personal Home Page) ye yerini bırakmıştır.

Microsoft firması web sunucu sektöründeki en önemli atılımını “Windows NT 3.51” ve bu işletim sistemine entegre halde olan “Internet Information Server 1.0” (IIS) sayesinde yapmıştır. Bu yazılım geçmişe dönük olarak CGI desteklemekle (her şekilde C ve C++ dili ile geliştirilmiş uygulamaları) birlikte yeni bir arabirim içeriyordu.

Bu arabirime “Internet Server Aplication Programing Interface” yani ISAPI adı verilmiştir. Bu arabirim sayesinde web sunucu perl dilinin tüm esnekliği standart hale getirilmiş oldu. Bu atılımla birlikte tüm yazılım geliştiriciler ISAPI ile uyumlu olan yazılımlar geliştirmeye başladılar.

Microsoft ISAPI ile beraber yeni teknoloji olan ASP’yi duyurdu. ASP teknolojisi IIS ile ISAPI sayesinde bağlanmış oldu. ASP den önce en çok “Internet Database Connector” (IDC) kullanılmaktaydı.

Aşağıdaki diyagramda (Diyagram 1 : Microsoft Sunucu Yapısı.) Microsoft server yapısı ayrıntılı olarak anlatılmıştır.

Diyagram 1 : Microsoft Sunucu Yapısı.

1.3.2. ASP ile IIS ilişkisi
ASP sadece kendisi için yazılmış olan DLL i kullanır (asp.dll). Bu dosya standart olarak web sunucu da yer almaktadır (sadece IIS 1.0 sonrası) (Winnt\System32\ inetsrv dizininde yer almaktadır). Bu DLL sadece ASP dosyalarını (genellikle .ASP uzantılıdırlar) okuyup içerisindeki script komutlarını işlemek ve sonuçlarını HTML ve metin içeriği ile birlikte Web gözatıcısına yollamak görevini üstlenir.

1.3.3. IIS Uygulama Yapıları
IIS içerisindeki işlemleri daha iyi anlayabilmek için uygulama yapılarının Windows içinde nasıl çalıştığını anlamalıyız. Web sunucudaki (IIS) her web sitesinin sunucu üzerinde yer alan bir kök dizini vardır. Varsayılan (Default) web sitesi otomatik olarak “c:\inetpub\wwwroot” dizinini kendine kök dizini atar (değiştirilebilir). Her yeni açılacak web sitesi için bir kök dizini belirlenmesi zorunludur. Sunucu üzerindeki web sitelerini görmek için IIS yönetim arabirimi olan “Internet Service Manager” programı kullanılır. Resim 1 : Microsoft Internet Service Manager.

IIS üzerinden default web sitesine sağ tıklayıp özellikler seçeneğini seçtiğimiz zaman, açılacak olan “default web site özellikleri” ekranından “home directory” tabına tıklanır. Gelecek olan sekmeden “configration” butonuna basarak uzantılar ile ilişkilendirilen arabirimler görülebilir (ISAPI yapısı “Diyagram 1 : Microsoft Sunucu Yapısı.” de görüldüğü gibidir).

Resim 2 : ISAPI Yapısı.

Resimden de (Resim 2 : ISAPI Yapısı.) görülebileceği gibi asp uzantılı dosyalar asp.dll dosyası ile derlenmektedir. HTM ve HTML uzantılı html sayfaları ve XML uzantılı xml sayfaları direkt olarak diskten okunup (web sunucu tarafından) istemciye gönderilmektedir ama asp uzantılı dosyalar ISAPI yardımı ile asp.dll tarafından okunup derlenip sonuç çıktıları istemciye göderilmektedir.

Not : İstemci sunucudan url yardımı ile bir dosya isteğinde bulunduğu zaman istek paketi şu şekilde olacaktır:

11/11/02 02:49:16 Sent GET /deneme/ornek.asp HTTP/1.1 Accept: aplication/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-comet, */* Accept-Language: en-us Encoding: gzip, deflate Referer: http://www.akkoyun.net/kitap.asp Cookie: VisitCount=2&LastDate=6%2F4%2F99 User-Agent: Mozilla/4.0 (compatible; MSIR 6.0; Windows XP) Host: 212.98.198.111 Connection: Keep-Alive

Ve bu isteği takiben sunucu istemciye dosyayı gönderirken şu başlık kısmı ile beraber gönderecektir :

11/11/02 02:49:16 Recived HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Connection: Keep-Alive Date: Thu, 11 Nov 2002 10:22:21 GMT Content-Type: text/html Accept-Ranges: bytes Content-Lenght: 2946 Last-Modified: Thu, 11 Nov 2002 10:22:21 GMT Cookie: VisitCount=2&LastDate=6%2F4%2F99  --Sayfanın geri kalanı

Bu bilgileri dikkatli olarak incelemenizi istiyorum çünkü ilerideki konularımızda bu sunucu ve istemci değişkenlerini okutmak ve değiştirmek üzerine konular göreceğiz.

1.3.4. ASP dosyalarının işletilmesi
Asp uzantılı dosyaların “asp.dll” yardımı ile derlendiğini bilmekteyiz peki ya bu derlenme nasıl olmaktadır.

Birinci basamak olarak asp dosyası içerisinde server taraflı kod olup olmadığı denetlenir. Eğer dosya içerisinde sunucu taraflı işletilecek bir kod bulunmaz ise IIS tarafından direkt istemciye gönderilir. Bu “Windows 2000” de yeni bir özellik olarak eklenmiştir. Bu sayede “.asp” uzantılı dosyaları kullanmamıza olanak tanır (içerisinde sunucu taraflı çalışacak kod bulunmayan dosyalara bile “.asp” uzantısı verilebilmektedir).

Eğer DLL, içerisinde server taraflı çalışacak bir kod olan dosya ile karşılaşırsa; satır satır bu dosyayı işleterek script blokları içerisindeki komutları işletir ve çıktısını yine aynı yere gelecek şekilde bir çıkış dosyasına (hafızada bulunan bir tampon bölgeye) kaydeder. İçerisinde script komutu olmayan kısımlarda aynen değiştirilmeden tampona yazılır. Tüm bu işlemler tamamlandıktan sonra eğer herhangi bir hata oluşmamış ise bu dosya (tamponda tutulan) istemci bilgisayarına gönderilerek işlem tamamlanır. Bu gönderme işlemi sonucunda tampon bölge temizlenir.

Diyagram 2 : ASP Dosyalarının İşletilmesi ve İstemciye Gönderilmesi.

Bilgi : IIS in ilk versiyonlarında ASP komutlarımızı işletecek olan ASP.DLL, asp dosyalarını satır satır okuyup satır satır işleyip yine satır satır çıktı alırdı. Buda performansta ciddi bir düşme meydana getirirdi. Dinamik sunucu sayfalarının oluşturulması sırasında kullanılacak olan sistem kaynakları aşağıdaki grafikte resmedilmiştir.

Resim 3 : Sistem Kaynakları Kullanımı.

Asp script motoru (asp.dll) dosya içerisinde sunucu taraflı çalışacak kod olup olmadığını iki şekilde anlar.

Bilgi : Bazılarınızın bildiği gibi ASP’de FSO (File System Object) kullanarak yazılmış ve sunucudaki diğer dosyalara erişebilen bir script piyasada dolaşmaktadır. Çoğu programcının düşüncesinin aksine bu bir açık (güvenlik deliği) değildir. Bu script sunucu yöneticilerinin yaptığı yanlış veya yetersiz yetkilendirme sonucu kendi yetkisi dışındaki dosyalara da erişebilmektedir. Bu yanlış yetkilendirmeyi isterseniz adım adım düzeltelim.

Öncelikle web sunucunuzun “root” klasörüne (tüm web sitesi dosyalarının bulunduğu sanal olarak en üst dizin anlamında), bir klasör oluşturunuz. Örneğin bu klasörün ismi “guvenli” olsun. Daha sonra “Computer Management” dan “Local Users and Groups” a tıklayınız. Gelen menüden “Users” seçeneğini seçtiğiniz zaman sağdaki pencerede bilgisayarda kayıtlı tüm kullanıcıların listesi gelecektir. Listenin boş bir yerine sağ tıklayarak “new user” seçeneği ile yeni bir kullanıcı oluşturalım. Daha sonra tekrar “Computer Management” penceresinden “Services and Application” kısmına buradan da “IIS” sekmesine tıklayalım. Buradan “Default Web Site” sekmesini işaretleyelim. Sağ tarafta web sayfanız içerisindeki tüm klasörler gözükecektir (tabi ki bizim oluşturduğumuz “guvenli” klasörü de gözükecek) buradan oluşturduğumuz “guvenli” klasörüne sağ tıklayarak “Properties” seçeneğini seçiyoruz. Açılan penceredeki “Directory > Application Settings” bölümündeki “create” düğmesine tıklayınız. Bu seçili olan klasör için ayrı bir uygulama yaratacaktır. Artık bu klasöre yetkili bir kullanıcı seçebiliriz ayrıca bu kullanıcının “IUSER” (İnternet user) olması da gerekmiyor. "Directory Security>Anonymous access and auth.. control" bölümündeki "Edit" düğmesine tıklayın. Buradan açılacak pencereden "Anonymous access" bölümündeki "Edit" düğmesine tıklayın. "Browse" düğmesine tıklayarak önceden yarattığınız user'ı seçiniz. "Allow IIS to control password" seçeneğini aktif hale getirip her şeye OK deyip çıkınız. Şimdi "c:\inetpub\......" yada her neyse. Yarattığınız "guvenli" klasörünü bulunuz. Klasöre sağ tıklayarak "properties" seçeneğini seçiniz. "Security" yi seçip buradaki tüm userları siliniz. Sadece Administrator ve yarattığınız user'ı ekleyin. Eğer bu klasörde dosya yaratma izni verecekseniz kendi user'ınıza "modify,write veya full control" verebilirsiniz. Ok deyip buradan da çıkınız.

Evet artık "http://127.0.0.1/guvenli" klasörünün içinden FSO ile değil c:\ ye bir üst klasöre bile çıkamazsınız. Bir üst klasördeki “txt” dosyalarını bile okuyamazsınız.

1.3.4.1. <% ve %> kullanarak
En çok kullanılan yöntem olup script bloğu başlangıcına “<%” ve script bloğu bitişine “%>” yazılarak arasında kalan kısma sunucu taraflı kod yazılır (Örnek 1 : <% %> Kullanmak.).

||   Bu bir HTML metinidir <% Rem burasi script bloğudur %>   Örnek 1 : <% %> Kullanmak.

1.3.4.2. elementini kullanarak
Nadir olarak kullanılan bu yöntem ile sunucu taraflı kodun yer aldığı script bloğunu elementi ile açıp elementi ile bitirilmesi baz alınmıştır. Bu şekilde ki kullanımda element içerisine yazılacak olan “Runat” özelliği sayesinde istemci veya sunucu taraflı çalışma özelliği eklenmiştir (Örnek 2 : Elementi Kullanmak.).

||   Bu bir HTML metinidir  Rem burasi script bloğudur   Örnek 2 : Elementi Kullanmak.

Bunun yanında “Script” elementi kullanılarak sunucu üzerinde yer alan bir dosya script bloğu içerisine dahil edilebilir. Bu şekilde tüm sayfalarda kullanılan ortak kodlar bir defaya mahsus olmak üzere yazılır ve bu kodlar gereken yerlere dahil ettirilir. Bunu şu şekilde yapabilmekteyiz (Örnek 3 : Harici Kod Kullanımı.).

||      Örnek 3 : Harici Kod Kullanımı.

Bilgi : Server Side Includes (SSI  ) kullanarak harici dosyaları da asp dosyamız içerisine dahil edebiliriz. Böylece script blokları içerisinde yer alan kodları harici dosyalarda saklayabilmekteyiz. Bu konuyu ilerideki konularımızda ayrıntılı olarak ele alacağız.

Yukarıda anlatılan yöntemle yapılan bir uygulamada içeriği dahil edilen “script.inc” dosyasının içerisinde mutlaka geçerli bir script olmalıdır. Bu script metin (text) yada HTML olmamalıdır. Script elementinin içerisine (açılış ve kapanış tagları arasına) kesinlikle başka bir kod gelmemesi gerekmektedir.

1.3.5.1. Script Dilini Belirlemek
IIS standart olarak iki script motoru (scripting engine) ile beraber gelir. Bunlar “VBScript” ve “Jscript” dir. Bu motorlar birlikte bulunurlar. Bunlar dışında TCL ve PerlScript gibi diğer script motorları da mevcuttur fakat bunlar IIS ile beraber gelmez sadece sonradan eklenir.

ASP ye biz hangi script motorunu kullanması gerektiğini söyleyebiliriz. Bu genelde standart olarak IIS de ayarlanmış haldedir (bu işlem için ilk kurulumda tanımlanmış bazı varsayılan değerler mevcuttur). Bu tanımı yapmanın en kolay yolu ASP sayfamızın ilk satırında özel içerik tanımı yapmaktır (Örnek 4 : Language Kullanımı.).

||  <%@Language = “dil”%> Örnek 4 : Language Kullanımı.

Bu şekilde sayfanın VBScript mi yoksa Jscript mi kullanacağı tanımlanmış olur. VBScript için

||  <%@Language = “VBScript”%> Örnek 5 : Varsayılan Dili VbScript Yapmak.

Yazabiliriz (Örnek 5 : Varsayılan Dili VbScript Yapmak.). Aynı Mantıkta Jscript için

||  <%@Language = “JScript”%> Örnek 6 : Varsayılan Dili JScript Yapmak.

Şeklinde bir kod uygun olacaktır (Örnek 6 : Varsayılan Dili JScript Yapmak.).

Bu tanımlama yapılsın yada yapılmasın script bloğumuzu elementi ile tanımlamışsak istediğimiz dili orada da tanımlayabiliriz (Örnek 7 : Elementi İçerisinde Dil Belirlemek.).

||   Bu bir HTML metinidir

<script Runat = ”server” Language = “VBScript”> Rem burasi script bloğudur ve dil olarak VBScript Kullanılmıştır

<script Runat = ”server” Language = “JScript”> Rem burasi script bloğudur ve dil olarak JScript Kullanılmıştır

</Body> </HTML> Örnek 7 : Elementi İçerisinde Dil Belirlemek.

1.3.5.1.1. Varsayılan Script Dili
Script elementi içerisinde dil belirtilmemesi durumunda veya <% %> tagları arasında aksi bir ayar yoksa sunucunun varsayılan script dili geçerli olur. Bu varsayılan dil değerini IIS ayarları yardımıyla değiştirebiliriz bunun için, “Internet Service Manager” içerisinden web sitesi adı üzerine sağ tıklayınız, gelen menüden “Özellikler” (Properties) seçeneğine giriniz (Resim 4 : Sunucu Özellikleri.).

Resim 4 : Sunucu Özellikleri.

Özellikler öğesi seçildiği zaman gelecek olan pencerede yer alan “WWW Servis” seçeneğinin düzenle butonuna tıklayarak sistemin ana www servisi ayarlarına ulaşılır. “Home Directory” sekmesine tıklayınız. Gelen pencerede yer alan “Configration” butonuna tıklayınız. Gelen penceredeki “App Options” sekmesine yer alan “Default ASP Language” seçeneğini isteğimize göre düzenleyebiliriz. Bu alana ya “VbScript” yada “Jscript” değeri verilebilir. Aşağıda bu ayar ekranına ait ekran görüntüsü gösterilmektedir (Resim 5 : Varsayılan ASP Ayarları.).

Resim 5 : Varsayılan ASP Ayarları.

1.3.5.2. CodePage
Okunabilir ve yazılabilir bir değişken olan codepage sayfa başında özel biçimi ile kullanıldığı zaman içinde olduğu sayfaya ait gösterim ayarları verilmesini sağlar. Örneğin Amerika için “1252” olan bu değer Türkiye için “1254” olacaktır. Bu komutun sayfaya yazılması halinde “scriptengine” e bu çalışan sayfanın gösterim ayarlarının Amerika’ya göre ayarlanacağını belirtir (Örnek 8 : CodePage Kullanımı.).

||  <%@CODEPAGE = “1254”%> Örnek 8 : CodePage Kullanımı.

Bu komuttan sonra sayfamızda Türkçe karakterler sorunsuz olarak gösterilebilecektir. Bu kod aynı zamanda yukarıda anlatılan script dili belirleme ile beraber kullanılabilmektedir (Örnek 9 : CodePage ve Language Beraber Kullanımı.).

||  <%@CODEPAGE = “1254” LANGUAGE=”VbScript”%> Örnek 9 : CodePage ve Language Beraber Kullanımı.

1.3.5.3. LCID
Okunabilir ve yazılabilir bir değişken olan LCID (Local Identifier : Bölge Tanımlayıcı) sayfa başında özel biçimi ile kullanıldığı zaman içinde olduğu sayfaya ait özel bölgesel ayarların verilmesini sağlar. Örneğin LCID değeri “2057” şeklinde ayarlandığı zaman para birimi “₤” olarak ayarlanacaktır (Örnek 10 : LCID Kullanımı.). Türkiye için bu değer “1055” dir. Bu şekilde Türkiye’ye ait yerel saat ayarlanmış olacaktır.

||  <%@LCID = “2057”%> Örnek 10 : LCID Kullanımı.

Bu komuttan sonra sayfamızda Türkçe bölgesel ayarlar yapılmış olacak ve tamamen Türkiye ayarları kullanılacaktır. Bu kod aynı zamanda yukarıda anlatılan script dili ve kod sayfası belirleme ile beraber kullanılabilmektedir. Aşağıda bu kullanımın örneği görülmektedir (Örnek 11 : Özel Komutların Beraber Kullanımı.).

||  <%@CODEPAGE=“1254” LANGUAGE=”VbScript” LCID=”2057”%> Örnek 11 : Özel Komutların Beraber Kullanımı.

Aşağıda dünya çapında kullanılmakta olan bölgesel ayarları gösteren bir tablo bulunmaktadır. Bu tablodaki LCID değerini kullanarak o bölgeye ait ayarları aktif hale getirebilirsiniz.

|| __ Bölgesel Açiklama __ Tablo 1 : LCID Değerleri.
 * __ Kısaltma __ ||  __ Hex Değeri __  ||  __ Onluk Değeri (LCID) __  ||
 * Afrikaans  ||   af   ||   0x0436   ||   1078   ||
 * Albanian  ||   sq   ||   0x041C   ||   1052   ||
 * Arabic - U.A.E. ||  ar-ae   ||   0x3801   ||   14337   ||
 * Arabic - Bahrain ||  ar-bh   ||   0x3C01   ||   15361   ||
 * Arabic - Algeria ||  ar-dz   ||   0x1401   ||   5121   ||
 * Arabic - Egypt ||  ar-eg   ||   0x0C01   ||   3073   ||
 * Arabic - Iraq ||  ar-iq   ||   0x0801   ||   2049   ||
 * Arabic - Jordan ||  ar-jo   ||   0x2C01   ||   11265   ||
 * Arabic - Kuwait ||  ar-kw   ||   0x3401   ||   13313   ||
 * Arabic - Lebanon ||  ar-lb   ||   0x3001   ||   12289   ||
 * Arabic - Libya ||  ar-ly   ||   0x1001   ||   4097   ||
 * Arabic - Morocco ||  Ar-ma   ||   0x1801   ||   6145   ||
 * Arabic - Oman ||  Ar-om   ||   0x2001   ||   8193   ||
 * Arabic - Qatar ||  ar-qa   ||   0x4001   ||   16385   ||
 * Arabic - Saudia Arabia ||  ar-sa   ||   0x0401   ||   1025   ||
 * Arabic - Syria ||  ar-sy   ||   0x2801   ||   10241   ||
 * Arabic - Tunisia ||  ar-tn   ||   0x1C01   ||   7169   ||
 * Arabic - Yemen ||  ar-ye   ||   0x2401   ||   9217   ||
 * Basque ||  eu   ||   0x042D   ||   1069   ||
 * Belarusian ||  be   ||   0x0423   ||   1059   ||
 * Bulgarian ||  bg   ||   0x0402   ||   1026   ||
 * Catalan ||  ca   ||   0x0403   ||   1027   ||
 * Chinese ||  zh   ||   0x0004   ||   4   ||
 * Chinese - PRC ||  zh-cn   ||   0x0804   ||   2052   ||
 * Chinese - Hong Kong ||  zh-hk   ||   0x0C04   ||   3076   ||
 * Chinese - Singapore ||  zh-sg   ||   0x1004   ||   4100   ||
 * Chinese - Taiwan ||  zh-tw   ||   0x0404   ||   1028   ||
 * Croatian ||  hr   ||   0x041A   ||   1050   ||
 * Czech ||  cs   ||   0x0405   ||   1029   ||
 * Danish ||  da   ||   0x0406   ||   1030   ||
 * Dutch ||  nl   ||   0x0413   ||   1043   ||
 * Dutch - Belgium ||  nl-be   ||   0x0813   ||   2067   ||
 * English ||  en   ||   0x0009   ||   9   ||
 * English - Australia ||  en-au   ||   0x0C09   ||   3081   ||
 * English - Belize ||  en-bz   ||   0x2809   ||   10249   ||
 * English - Canada ||  en-ca   ||   0x1009   ||   4105   ||
 * English - Ireland ||  en-ie   ||   0x1809   ||   6153   ||
 * English - Jamaica ||  en-jm   ||   0x2009   ||   8201   ||
 * English - New Zealand ||  en-nz   ||   0x1409   ||   5129   ||
 * English - South Africa ||  en-za   ||   0x1C09   ||   7177   ||
 * English - Trinidad ||  en-tt   ||   0x2C09   ||   11273   ||
 * English - United Kingdom ||  en-gb   ||   0x0809   ||   2057   ||
 * English - United States ||  en-us   ||   0x0409   ||   1033   ||
 * Estonian ||  et   ||   0x0425   ||   1061   ||
 * Farsi ||  fa   ||   0x0429   ||   1065   ||
 * Finnish ||  fi   ||   0x040B   ||   1035   ||
 * Faeroese ||  fo   ||   0x0438   ||   1080   ||
 * French - Standard ||  fr   ||   0x040C   ||   1036   ||
 * French - Belgium ||  fr-be   ||   0x080C   ||   2060   ||
 * French - Canada ||  fr-ca   ||   0x0C0C   ||   3084   ||
 * French - Luxembourg ||  fr-lu   ||   0x140C   ||   5132   ||
 * French - Switzerland ||  fr-ch   ||   0x100C   ||   4108   ||
 * Gaelic - Scotland ||  gd   ||   0x043C   ||   1084   ||
 * German - Standard ||  de   ||   0x0407   ||   1031   ||
 * German - Austrian ||  de-at   ||   0x0C07   ||   3079   ||
 * German - Lichtenstein ||  de-li   ||   0x1407   ||   5127   ||
 * German - Luxembourg ||  de-lu   ||   0x1007   ||   4103   ||
 * German - Switzerland ||  de-ch   ||   0x0807   ||   2055   ||
 * Greek ||  el   ||   0x0408   ||   1032   ||
 * Hebrew ||  he   ||   0x040D   ||   1037   ||
 * Hindi ||  hi   ||   0x0439   ||   1081   ||
 * Hungarian ||  hu   ||   0x040E   ||   1038   ||
 * Icelandic ||  is   ||   0x040F   ||   1039   ||
 * Indonesian ||  in   ||   0x0421   ||   1057   ||
 * Italian - Standard ||  it   ||   0x0410   ||   1040   ||
 * Italian - Switzerland ||  it-ch   ||   0x0810   ||   2064   ||
 * Japanese ||  ja   ||   0x0411   ||   1041   ||
 * Korean ||  ko   ||   0x0412   ||   1042   ||
 * Latvian ||  lv   ||   0x0426   ||   1062   ||
 * Lithuanian ||  lt   ||   0x0427   ||   1063   ||
 * Macedonian ||  mk   ||   0x042F   ||   1071   ||
 * Malay - Malaysia ||  ms   ||   0x043E   ||   1086   ||
 * Maltese ||  mt   ||   0x043A   ||   1082   ||
 * Norwegian - Bokmål ||  no   ||   0x0414   ||   1044   ||
 * Polish ||  pl   ||   0x0415   ||   1045   ||
 * Portuguese - Standard ||  pt   ||   0x0816   ||   2070   ||
 * Portuguese - Brazil ||  pt-br   ||   0x0416   ||   1046   ||
 * Raeto-Romance ||  rm   ||   0x0417   ||   1047   ||
 * Romanian ||  ro   ||   0x0418   ||   1048   ||
 * Romanian - Moldova ||  ro-mo   ||   0x0818   ||   2072   ||
 * Russian ||  ru   ||   0x0419   ||   1049   ||
 * Russian - Moldova ||  ru-mo   ||   0x0819   ||   2073   ||
 * Serbian - Cyrillic ||  sr   ||   0x0C1A   ||   3098   ||
 * Setsuana ||  tn   ||   0x0432   ||   1074   ||
 * Slovenian ||  sl   ||   0x0424   ||   1060   ||
 * Slovak ||  sk   ||   0x041B   ||   1051   ||
 * Sorbian ||  sb   ||   0x042E   ||   1070   ||
 * Spanish - Standard ||  es   ||   0x040A   ||   1034   ||
 * Spanish - Argentina ||  es-ar   ||   0x2C0A   ||   11274   ||
 * Spanish - Bolivia ||  es-bo   ||   0x400A   ||   16394   ||
 * Spanish - Chile ||  es-cl   ||   0x340A   ||   13322   ||
 * Spanish - Columbia ||  es-co   ||   0x240A   ||   9226   ||
 * Spanish - Costa Rica ||  es-cr   ||   0x140A   ||   5130   ||
 * Spanish-Dominican Republic ||  es-do   ||   0x1C0A   ||   7178   ||
 * Spanish - Ecuador ||  es-ec   ||   0x300A   ||   12298   ||
 * Spanish - Guatemala ||  es-gt   ||   0x100A   ||   4106   ||
 * Spanish - Honduras ||  es-hn   ||   0x480A   ||   18442   ||
 * Spanish - Mexico ||  es-mx   ||   0x080A   ||   2058   ||
 * Spanish - Nicaragua ||  es-ni   ||   0x4C0A   ||   19466   ||
 * Spanish - Panama ||  es-pa   ||   0x180A   ||   6154   ||
 * Spanish - Peru ||  es-pe   ||   0x280A   ||   10250   ||
 * Spanish - Puerto Rico ||  es-pr   ||   0x500A   ||   20490   ||
 * Spanish - Paraguay ||  es-py   ||   0x3C0A   ||   15370   ||
 * Spanish - El Salvador ||  es-sv   ||   0x440A   ||   17418   ||
 * Spanish - Uruguay ||  es-uy   ||   0x380A   ||   14346   ||
 * Spanish - Venezuela ||  es-ve   ||   0x200A   ||   8202   ||
 * Sutu ||  sx   ||   0x0430   ||   1072   ||
 * Swedish ||  sv   ||   0x041D   ||   1053   ||
 * Swedish - Finland ||  sv-fi   ||   0x081D   ||   2077   ||
 * Thai ||  th   ||   0x041E   ||   1054   ||
 * Turkish ||  tr   ||   0x041F   ||   1055   ||
 * Tsonga ||  ts   ||   0x0431   ||   1073   ||
 * Ukranian ||  uk   ||   0x0422   ||   1058   ||
 * Urdu - Pakistan ||  ur   ||   0x0420   ||   1056   ||
 * Vietnamese ||  vi   ||   0x042A   ||   1066   ||
 * Xhosa ||  xh   ||   0x0434   ||   1076   ||
 * Yiddish ||  ji   ||   0x043D   ||   1085   ||
 * Zulu ||  zu   ||   0x0435   ||   1077   ||

2.1. Değişkenler
Bütün programlama dillerinde olduğu gibi vbscriptte de değişkenler terimi vardır. Bu terim sayesinde program içerisinde işleyeceğimiz sayısal veya metinsel değerleri kullanmaktansa bu değerlerin yerini tutan bir değişkeni kullanırız. Bu sayede program içerisinde daha esnek bir yapı kurabiliriz. Değişkenleri temsil eden adlar vardır, örneğin “isim” değişkeni (tarih, toplam… gibi) isim değerleri alır. Anlaşıldığı üzere değişkenin adı değişmiyor fakat değişken içerisinde tutulan değer değişebiliyor. (bu değişiklik programcının kontrolünde meydana geliyor). Verilen değer program akışına göre farklılaşabildiği için bu terime değişken diyoruz.

Piyasada kullanılan bütün programlama dillerinde değişkenler kullanılmadan önce tanımlanmalı ve boyutlandırılmalıdır. Fakat vbscript de bu dillerin aksine değişkenlerin tanımlanması ve boyutlandırılması zorunlu değildir. Vbscript tanımlanmamış değişkenleri hiç bir hata vermeden kabul eder. Fakat karmaşık programlarda sayfalar arası değişken problemleri yaşanabilir (daha önceden kullandığımız bir değişkene bir değer atamadan tekrar başka bir yerde kullanırsak eski değeri kalacağı için programda hatalar oluşacaktır). Bunu değişkenlerimizi kullanılmadan önce tanımlayarak engelleyebiliriz. (profesyonel bir programcı değişkenlerini kullanmadan önce mutlaka tanımlar böylece programın ilerleyen safhalarında değişken hatası yapmamış olacaktır) Bu alışkanlığı zorunluluk haline getirmek için vbscipt de “Option Explicit” komutu kullanılır. Komutu kullanmamız durumunda ASP yordamcısı her kullandığımız değişkeni kullanmadan önce tanımlanmasını zorunlu kılar, bu sayede sayfalar arası değişken karmaşası oluşmaz. Ve değişken adlarının yanlış yazılması bir nevi engellenmiş olur. Bu komutu mutlaka ASP programlarınızın ilk satırında kullanmalısınız, diğer hallerde program hata verecektir.

Asp de değişken tanıtma işlemi için “Dimension” (boyut) kelimesinin kısaltılmışı olan “DIM” komutu kullanılır. Bu komut yardımı ile, kullanılan değişkenler kod başlangıcında belirtilerek tanımlanır (iyi bir programlama için kod başında değişken tanımlaması yapmak daha iyidir. Ama sayfa içerisinde herhangi bir yerde değişken tanımlaması yapmak, bir hata meydana getirmeyecektir.).

|| <% Option Explicit Dim Ad %> Örnek 12 : Değişken Tanımlama.

Örnekte görüldüğü gibi “DIM” komutu ile “Ad” değişkenini tanımlamış olduk bu tanımlamayı yapmadan önce “option explicit” komutunu kullandık. Bu komutu kullanma amacımız Ad değişkenini programın ilerleyen aşamalarında bir daha kullandırtmamak (değişken adı olarak) ve karışıklık olmasını engellemektir (değişken değeri değiştirilebilir fakat bu isimde başka bir değişken kullanılamaz). Bu tanımlama işlemini:

|| <% Ad = “Günce Akkoyun” %>   Örnek 13 : Değişkene Değer Atama.

Şeklinde kullansak dahi program hatasız çalışacaktır. Fakat kullanım pratikliği ve kodlama sağlamlığı bakımından “Option Explicit” kullanımı daha iyi olacaktır. “Option Explicit” komutu ile,

|| <% Option Explicit Ad = “Günce Akkoyun” %>   Örnek 14 : Hatalı Değer Atama.

Şeklinde bir kullanım mutlaka hata verecektir.

|| Microsoft VBScript runtime (0x800A01F4) Variable is undefined: 'Ad' /asp/test.asp, line 3 Çıktı 1 : Tanımlanmamış Değişkene Değer Atama.

Bu hata bize değişkenimizin tanımlanmadan kullanıldığını belirtecektir. Doğru kullanımında mutlaka değişken tanımlanmalıdır.

|| <% Option Explicit Dim Ad Ad = “Günce Akkoyun” %>   Örnek 15 : Geçerli Değişken Tanımlama ve Değer Atama.

Şeklinde olacaktır. Bu şekilde yapılan değişken tanımlamalarında programın ilerleyen aşamalarında tekrar “Ad” isimli bir değişken kullanamayacağımız için bir karışıklık olmayacaktır. Bu size şu anda anlamsız gelebilir ama büyük kodlar (10000-20000 satır) olduğu zaman bu size anlamlı gelecektir.

Temelde kullanılandığımız değişken türleri sayısal, alfa-sayısal ve mantıksal olmak üzere üçe ayrılmaktadır. Ancak VbScript, her programlama dilinde karşımıza çıkan integer, real, string, boolean vs.. gibi temel veri tipi tanımlarından yoksun bir dildir. Peki VbScript bir değişkenin hangi türde olduğunu nasıl anlar? Bunu o değişkene değer atandığı zaman anlar. Aşağıdaki atamaları inceleyelim,

|| <% Option Explicit Dim x, y, z, t, u

x = 15 y = “15” z = “Zeytinyağlı yiyemem aman” t = True u = ASPgüncesi %>   Örnek 16 : Değişkene Değişik Veri Tipleri Atama.

Yukarıdaki örneğimizde “x” değişkenine sayısal bir değer atadığımız için o andan itibaren “x” değişkeni sayısal bir veri tipinde olacaktır (bu tip belirleme VbScript tarafından otomatik olarak yapılmaktadır). Bu nedenle tüm sayısal işlemlerde kullanılabilir. Durum “y” değişkeni için ise biraz farklıdır. “y” değişkeni tırnak içerisinde olduğundan dolayı alfa-sayısal bir veri tipinde olacaktır. Bu nedenle sayısal işlemlere girmeyecek ve sadece metinsel işlemlerde kullanılacaktır. “z” değişkeninde ise sayısal içeriğe sahip olmayan, metinsel bir değere sahip olan bir değişkeni temsil etmektedir. “t” değişkeninde ise sadece “doğru” (true - 1) veya “yanlış” (false - 0) değerini alabilen bir boolean veri tipi gösterilmektedir. “u” değişkeni de ne oluyor diye düşünüyor olmalısınız. Düşünmekte haklısınız çünkü metin değişkenleri sadece tırnak işareti içerisinde tanımlanabilir diğer hallerde hata verecektir.

2.1.1. Seri Değişkenler
Vbscript programları içerisinde bir değişkene birden çok değer verilebilmektedir. Bu olaya “Seri Değişken” denilmektedir. Örnek vermek gerekirse 7 kişilik bir sınıf içersindeki öğrencilerin isimlerini tek bir değişkende tutabiliriz.

|| <% Option Explicit Dim Ad( 7 )

Ad( 1 ) = “Günce” Ad( 2 ) = “Refiye” Ad( 3 ) = “Haldun” Ad( 4 ) = “Meral” Ad( 5 ) = “Alp” Ad( 6 ) = “Seda” Ad( 7 ) = “Gökçe” %>   Örnek 17 : Diziye Değer Atama.

Şeklinde bir tanımlama yaptığımız zaman “Ad” değişkenine 7 farklı değer vermiş olduk. Kaç farklı değer alabileceğini “DIM” komutu ile değişken tanımlarken parantez içerisinde boyutlandırmış olduk. Bu örnekte neden her isim için farklı değişken kullanmadık ta bir seri kullandık diyecek olursanız. Yani

|| <% Option Explicit Dim Ad1, Ad2, Ad3, Ad4, Ad5, Ad6, Ad7

Ad1 = “Günce” Ad2 = “Refiye” Ad3 = “Haldun” Ad4 = “Meral” Ad5 = “Alp” Ad6 = “Seda” Ad7 = “Gökçe” %>   Örnek 18 : Kullanışsız Değişken Dizisi.

Hemen cevabını verelim; dizi değişkenlerde bir değişkeni numarasıyla kullanabilirsiniz ve numara yerine başka bir değişken kullanabilirsiniz.

Bilgi : String özelliği taşıyan değişkenler (yani tırnak içerisinde tanımlanmış metinsel değere sahip değişkenler) hiçbir şekilde dönüştürme işlemi yapılmadan matematiksel işlem içerisinde kullanılamaz.

|| <% ...  numara = 6 response.write Ad(numara) ... %>    Örnek 19 : Dizi İçindeki Bir Öğenin Kullanımı.

Şeklinde bir kullanım ile 6 numaralı “Ad” değişkenini ekrana yazdırmak gibi bir işlem gerçekleşecektir. (bu programcıkta ilk olarak “numara” değişkenine 6 değerini atadık ve bu “numara” değişkenini “Ad(numara)” şeklinde seri içerisinde kullandık.)

Bir dizi değişkeni boyutu isteklerimizin altındaysa yani elimizdeki toplam dizi öğesi adedi, dizinin tanım aralığı dışında kalmış ise, dizimizin tanım aralığını yani boyutunu genişletebiliriz. Bunun için “redim” komutu kullanılır (yeniden boyutlandır). Fakat bu komutun şöyle bir özelliği vardır: yeniden tanımlanan bir dizi yeniden tanımlama öncesi kendisine verilen hiçbir değeri yeniden boyutlandırma sonrası vermez. Bir diğer değişke içeriği sıfırlanır.

|| <% Option Explicit Dim Ad( 5 )

Ad( 0 ) = “Günce” Ad( 1 ) = “Refiye” Ad( 2 ) = “Haldun” Ad( 3 ) = “Meral” Ad( 4 ) = “Alp”

ReDim Ad( 7 )

Ad( 5 ) = “Seda” Ad( 6 ) = “Gökçe” %>   Örnek 20 : Redim Komutu ile Diziyi Yeniden Boyutlandırma.

Verilen örnekte yeniden tanımlama sonrası “Ad(0) – Ad(4)” değişkenleri sıfırlanacak yani null içeriğe sahip olacaktır. Yeniden tanımlama sırasında eski dizi değerlerinin korunmasını istersek “Redim” komutunu “Preserve” komutuyla beraber kullanmalıyız. Bu şekilde eskiye dönük verinin korunacağını yeniden tanımlama sırasında belirtmiş oluruz.

|| <% Option Explicit Dim Ad( 5 )

Ad( 0 ) = “Günce” Ad( 1 ) = “Refiye” Ad( 2 ) = “Haldun” Ad( 3 ) = “Meral” Ad( 4 ) = “Alp”

ReDim Preserve Ad( 7 )

Ad( 5 ) = “Seda” Ad( 6 ) = “Gökçe” %>   Örnek 21 : Redim Preserve Komutu ile Diziyi Yeniden Tanımlama.

Bu şekilde yeniden tanımlanan dizi eski değerlerinden hiçbir veriyi kaybetmez. Böylece eski verilerde kullanılabilmektedir.

Dizi değişkenleri yukarıdaki örneklerdeki gibi tek boyutlu olabilmesinin yanında birden çok boyuta da sahip olabilirler. Örnek vermek gerekirse matematikte kullanılan matriks sistemini düşünün bu size iki boyutlu dizi hakkında fikir verecektir. Matriks üzerinde birinci satır birinci sütunda ki değer x(1,1) şeklinde ifade edilmektedir. Örneğin aşağıdaki 4x4 matriksi ASP içerisinde tanımlamamız için, ||      Option Explicit Dim x( 7,5 ) x( 1,1 ) = 25 x( 1,2 ) = 7 x( 2,1 ) = 19 x( 2,2 ) = 97 %> || ||  Örnek 22 : Çok Boyutlu Dizi Kullanımı.

Şeklinde bir değişken ataması yapabiliriz. Bu atamada iki boyutlu bir matriksi VbScript’imize tanımlamış olduk aynı yöntemle üç ve dört boyutlu seriler tanımlayabilmekteyiz.

2.2. Sabitler
Program içerisinde her zaman değişken değerleri değişebilir değil bazen de sabit olmaları istenebilir. Bu tip değişkenlere (değişken demek biraz yanlış ama..) bir kere değer atandıktan sonra bir daha değiştirilemez (sabit değer bütün program boyunca (hatta isterseniz bütün site boyunca) değişmeden kalır). Bu işlemi vbscript içerisinde “Constant” (Sabit) kelimesinin kısaltılmışı olan “Const” komutu yardımı ile yapılır. Const terimi ile değer verilmiş bir değişkenin tanımlanmasına gerek yoktur.

Sabit olduğu “Const” komutu ile belirtilmiş bir değişkene..

|| <% Option Explicit Const Url = “www.akkoyun.net” %>   Örnek 23 : Sabit Kullanımı.

Şeklinde kullanılan bir sabit değişkene başka bir veri atanmaya çalışıldığı zaman hata verecektir.

|| <% Option Explicit Const Url = “akkoyun.net” .... Url = “pcworld.com.tr” %>   Örnek 24 : Bir Sabite Değer Atamak.

Yani “Url” sabitine kendi değeri dışında bir değer verilmek istenmiştir fakat hata mesajı verecektir. (Illegal assignment: 'Url’ ).

Vbscript programlama dilinde kullanılan değişkenlere genel olarak variant denir. Variant genel olarak bir grubu temsil eder ve alt grupları mevcuttur. Bunlar değişkenin cinsine göre otomatik olarak tanınır. (diğer programlama dillerinde bu özellik yoktur ve değişken tanımlanırken veri tipi yani variant grubu tanımlanır fakat asp de bu olay yordamcı tarafından otomatik gerçekleşir).

VbScript içerisinde kullanıcıya kolaylık sağlamak için bazı hazır tanımlanmış sabitler mevcuttur. Bu sabitler kodlama sırasında istenildiği şekilde kullanılabilmektedir. Bu sabitler ve değerleri aşağıda verilmiştir.

2.2.1. Renk Sabitleri
|| __ Sabit __ Tablo 2 : Renk Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbBlack  ||   &h00   ||   Siyah   ||
 * vbRed  ||   &hFF   ||   Kırmızı   ||
 * vbGreen  ||   &hFF00   ||   Yeşil   ||
 * vbYellow  ||   &hFFFF   ||   Sarı   ||
 * vbBlue  ||   &hFF0000   ||   Mavi   ||
 * vbMagenta  ||   &hFF00FF   ||   Gül Kurusu   ||
 * vbCyan  ||   &hFFFF00   ||   Turkuaz   ||
 * vbWhite  ||   &hFFFFFF   ||   Beyaz   ||

2.2.2. Tarih ve Zaman Sabitleri
|| __ Sabit __ Tablo 3 : Tarih ve Zaman Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbSunday  ||   1   ||   Pazar   ||
 * vbMonday  ||   2   ||   Pazartesi   ||
 * vbTuesday  ||   3   ||   Salı   ||
 * vbWednesday  ||   4   ||   Çarşamba   ||
 * vbThursday  ||   5   ||   Perşembe   ||
 * vbFriday  ||   6   ||   Cuma   ||
 * vbSaturday  ||   7   ||   Cumartesi   ||
 * vbUseSystem  ||   0   ||   Sunucunun bölgesel ayarlarında yer alan tarih veya zaman biçimini kullan   ||
 * vbUseSystemDayOfWeek  ||   0   || ||
 * vbFirstJan1  ||   1   ||   1 Ocak gününün içerisinde yer aldığı haftayı kullan   ||
 * vbFirstFourDays  ||   2   ||   En az 4 günü yeni yılda olan ilk haftayı kullan   ||
 * vbFirstFullWeek  ||   3   ||   7 günüde yeni yıl içersinde yer alan ilk haftayı kullan   ||

2.2.3. Tarih Biçim Sabitleri
|| __ Sabit __ Tablo 4 : Tarih Biçim Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbGeneralDate  ||   0   ||   Sistem ayarlarındaki gösterim biçimi   ||
 * vbLongDate  ||   1   ||   Uzun tarih gösterimi (June 26, 1943)   ||
 * vbShortDate  ||   2   ||   Kısa tarih gösterimi (6/26/43)   ||
 * vbLongTime  ||   3   ||   Uzun zaman gösterimi (3:48:01 Pm)   ||
 * vbShortTime  ||   4   ||   Kısa zaman gösterimi (15:48)   ||

2.2.4. Çeşitli Sabitler
|| __ Sabit __ Tablo 5 : Çeşitli Sabitler.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbObjectError  ||   -2147221504   ||   Kullanıcı tarafından tanımlanan hata tipi numaraları   ||

2.2.5. Mesaj Kutusu Sabitleri
|| __ Sabit __ Tablo 6 : Mesaj Kutusu Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbOkOnly  ||   0   ||   Sadece OK butonu göster   ||
 * vbOkCancel  ||   1   ||   Ok ve İptal butonu göster   ||
 * vbAbortRetryIgnore  ||   2   ||   Abort, Retry ve Ignore butonu göster   ||
 * vbYesNoCancel  ||   3   ||   Yes, No ve Cancel butonu göster   ||
 * vbYesNo  ||   4   ||   Yes ve No butonu göster   ||
 * vbRetryCancel  ||   5   ||   Retry ve Cancel butonu göster   ||
 * vbCritical  ||   16   ||   Kritik mesaj iconu göster   ||
 * vbQuestion  ||   32   ||   Uyarı soru mesajı iconu göster   ||
 * vbExclamation  ||   48   ||   Uyarı mesajı iconu göster   ||
 * vbInformation  ||   64   ||   Bilgi mesajı iconu göster   ||
 * vbDefaultButton1  ||   0   ||   Ilk buton varsayılan   ||
 * vbDefaultButton2  ||   256   ||   Ikinci buton varsayılan   ||
 * vbDefaultButton3  ||   512   ||   Üçüncü buton varsayılan   ||
 * vbDefaultButton4  ||   768   ||   Dördüncü buton varsayılan   ||

2.2.6. Mesaj Kutusu Cevap Sabitleri
|| __ Sabit __ Tablo 7 : Mesaj Kutusu Cevap Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbOk  ||   1   ||   Ok butonu tıklandı   ||
 * vbCancel  ||   2   ||   Cancel butonu tıklandı   ||
 * vbAbort  ||   3   ||   Abort butonu tıklandı   ||
 * vbRetry  ||   4   ||   Retry butonu tıklandı   ||
 * vbIgnore  ||   5   ||   Ignore butonu tıklandı   ||
 * vbYes  ||   6   ||   Yes butonu tıklandı   ||
 * vbNo  ||   7   ||   No butonu tıklandı   ||

2.2.7. String Cevap Sabitleri
|| __ Sabit __ Tablo 8 : String Cevap Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbCr  ||   Chr(13)   ||   -   ||
 * vbCrLf  ||   Chr(13) & Chr(10)   ||   -   ||
 * vbFormFeed  ||   Chr(12)   ||   Form Besleme   ||
 * vbLf  ||   Chr(10)   ||   Satır Besleme   ||
 * vbNewLine  ||   Chr(13) & Chr(10) veya Chr(10)   ||   Yeni Satır   ||
 * vbNullChar  ||   Chr(0)   ||   0 değerine sahip karakter   ||
 * vbNullString  ||   -   ||   “”   ||
 * vbTab  ||   Chr(9)   ||   Horizantal Tab   ||
 * vbVerticalTab  ||   Chr(11)   ||   Vertical Tab   ||

2.2.8. Durum Sabitleri
|| __ Sabit __ Tablo 9 : Durum Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbTrue  ||   -1   ||   Doğru   ||
 * vbFalse  ||   0   ||   Yanlış   ||

2.2.9. Karşılaştırma Sabitleri
|| __ Sabit __ Tablo 10 : Karşılaştırma Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * VbBinaryCompare  ||   0   ||   Binary Karşılaştırma   ||
 * VBTextCompare  ||   1   ||   Metin Karşılaştırma   ||
 * VBDataBaseCompare  ||   2   ||   Veri Tabanı Karşılaştırması   ||

2.2.10. Değişken Tipi Sabitleri
|| __ Sabit __ Tablo 11 : Değişken Tipi Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * vbEmpty  ||   0   ||   Tanımsız data   ||
 * vbNull  ||   1   ||   Geçerli data içermeyen   ||
 * vbInteger  ||   2   ||   Integer   ||
 * vbLong  ||   3   ||   Long   ||
 * vbSingle  ||   4   ||   Single   ||
 * vbCurrency  ||   6   ||   Currency   ||
 * vbDate  ||   7   ||   Date   ||
 * vbString  ||   8   ||   String   ||
 * vbObject  ||   9   ||   Object   ||
 * vbError  ||   10   ||   Error   ||
 * vbBoolean  ||   11   ||   Boolean   ||
 * vbVariant  ||   12   ||   Variant   ||
 * vbDataObject  ||   13   ||   Data object   ||
 * vbDecimal  ||   14   ||   Decimal   ||
 * vbByte  ||   15   ||   Byte   ||
 * vbArray  ||   16   ||   Array   ||

2.2.11. Sürücü Tipi Sabitleri
|| __ Sabit __ Tablo 12 : Sürücü Tipi Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * Unknown  ||   0   ||   Tanımlanmamış sürücü   ||
 * Removable  ||   1   ||   Tüm taşınabilir medya aygıtları. Içerisinde disket sürücüleri de vardır   ||
 * Fixed  ||   2   ||   Sabit diskler   ||
 * Remote  ||   3   ||   Network sürücüleri   ||
 * CDROM  ||   4   ||   CdRom sürücüsü   ||
 * RamDisk  ||   5   ||   RAM üzerinde yer alan sanal disk alanı   ||

2.2.12. Dosya Özelliği Sabitleri
|| __ Sabit __ Tablo 13 : Dosya Özelliği Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * Normal  ||   0   ||   Normal dosya   ||
 * ReadOnly  ||   1   ||   Salt okunur   ||
 * Hidden  ||   2   ||   Gizli   ||
 * System  ||   4   ||   Sistem dosyası   ||
 * Directory  ||   16   ||   Dizin   ||
 * Archive  ||   32   ||   Arşiv   ||
 * Alias  ||   1024   ||   Link veya kısayol   ||
 * Compressed  ||   2048   ||   Sıkıştırılmış dosya   ||

2.2.13. Dosya Girdi Çıktı Sabitleri
|| __ Sabit __ Tablo 14 : Dosya Girdi Çıktı Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * ForReading  ||   0   ||   Dosyayı sadece okuma için aç. Bu tip açılan dosyaya yazılamaz.   ||
 * ForWriting  ||   1   ||   Dosyayı yazma için aç. Eğer bu dosya daha önceden varsa üzerine yazar.   ||
 * ForAppending  ||   8   ||   Dosyayı yazmak için açar ve sonuna yazar   ||

2.2.14. Özel Dizin Sabitleri
|| __ Sabit __ Tablo 15 : Özel Dizin Sabitleri.
 * __ Değer __ ||  __ Açıklama __  ||
 * WindowsFolder  ||   0   ||   Windowsun kurulu olduğu dizin   ||
 * SystemFolder  ||   1   ||   Fontların ve sürücülerin bulunduğu sistem dizini   ||
 * TemporaryFolder  ||   2   ||   Temprorary dizini   ||

2.3. Operatörler
Değişkenlerimiz arasında işlemler yaptırabiliriz. Bu işlemler için operatör dediğimiz işaretleri kullanırız. Bu operatörler bildiğiniz matematiksel operatörlerdir.

|||| ** Aritmetik ** Tablo 16 : Operatörler. Kullanımları ise şu şekildedir.
 * ** Karşılaştırma ** ||||  ** Lojik **  ||
 * ** Açıklama ** || ** Sembol **  || ** Açıklama ** ||  ** Sembol **  || ** Açıklama ** ||  ** Sembol **  ||
 * Üst Alma ||  ^   || Eşitlik ||   =   || Lojik Zıtlık ||   Not   ||
 * Çıkarma ||  -   || Eşitsizlik ||   <>   || Lojik ve ||   And   ||
 * Çarpma ||  *   || Küçüktür ||   <   || Lojik veya ||   Or   ||
 * Bölme ||  /   || Büyüktür ||   >   || Lojik özel veya ||   Xor   ||
 * Integer Bölme ||  \   || Küçük Eşittir ||   <=   || Lojik eşdeğer ||   Eqv   ||
 * Modüler ||  Mod   || Büyük Eşittir ||   >=   || Lojik içerme ||   Imp   ||
 * Toplama ||  +   || Obje Eşdeğeri ||   Is   ||   || ||
 * Metinsel Birleştirme ||  &   ||   || ||   || ||

2.3.1.1. Üst Alma
İstenilen sayısal değerin (integer) istenilen sayısal kuvvetini almaya yarayan operatördür. Üstü alınan sayı veya üst değeri “Null” ise sonuçta “Null” olacaktır. Üst alma operatörü SHIFT+3 tuşlarına basarak elde edilebilir.

||        Option Explicit Dim x, y, Sonuc x = 25 y = 7 Sonuc = x ^ y     respose.write Sonuc %>  ||   Örnek 25 : Üst Alma.

Sonuç “6103515625” olacaktır.

2.3.1.2. Matematiksel İşlemler (+,-,*,\,/)
Matematikte kullanıldığı gibi istenilen şekilde işlemlerde kullanılabilir fakat unutulmaması gereken bir kaç nokta vardır. Bunlardan birincisi işlem yapılacak değişkenin veya sabitin numerik sayı değerine sahip olduğundan yani değişken alt tipinin uygun olduğundan emin olunuz. Eğer emin olamıyorsanız dönüştürme işlemi ile bu veri tipine çeviriniz. İkinci dikkat etmeniz gereken nokta ise işlemlerin sırasıdır. Bu sıra çarpma, bölme, toplama ve çıkartma sırasına göre yapılamaktadır.

||        Option Explicit Dim a, b, c, d,Sonuc a = 1 b = 31 c = 11 d = 4 Sonuc =[( a + b )/( b * c )]* d     respose.write Sonuc %>  ||   Örnek 26 : Matematiksel Eşitlikler.

Sonuç olarak “0,3753” dönecektir.

2.3.1.3. Modüler Aritmetik
İstenilen bir sayının modüler aritmetiğe uygun olarak hangi sistemde hangi değeri alacağını veriri. Matematikte kullanılan “Mod” fonksiyonu ile aynıdır hiçbir farkı yoktur.

||        Option Explicit Dim a, b, Sonuc a = 25 b = 7 Sonuc = a Mod d     respose.write Sonuc %>  ||   Örnek 27 : Modüler Aritmetik.

Yukarıdaki örnekte 7'lik tabanda 25 değerini verecektir. Yani “4” değeri dönecektir.

2.3.1.4. Metin Birleştirme
Metin birleştirme işlemi temel olarak iki veya daha çok karakter tabanlı değişkenin tek bir değişken gibi birleştirilmesine dayanır. Bu işlemi yaparken operatör seçimimize dikkat etmemiz gerekecektir.

|| <% Option Explicit Dim Ad,Soyad,isim

Ad = “Günce ” Soyad = “Akkoyun” isim = Ad & Soyad

respose.write isim %>   Örnek 28 : Metin Birleştirme.

Sonuç “GünceAkkoyun” şeklinde olacaktır. Unutmamak gerekir ki her operatör her veri tipinde kullanılamaz. Sayısal veya metinsel özellikteki verilere göre kullanım alanları değişir. Son olarak operatörlerin kullanımı sırasında veri tipine uygun operatör kullanmak gereklidir. Örneğin iki karakter değişkenini toplarken (birleştirirken) “+” yerine metinsel işlemlerde birleştirme anlamına gelen “&” sembolü kullanılmalıdır.

Not : İki veya daha fazla metin birleştirilirken, örneğin bir “Ad” ve “Soyad”, bu ikisi arasında boşluk bırakılmadan birleştirilecektir. Oysaki çoğu durumlarda arada boşluk bırakılması istenebilir. Böyle durumlarda manuel olarak araya boşluk bırakılmalıdır.

2.3.2. Karşılaştırma Operatörleri
Programlarımız içerisinde kimi zaman iki farklı değişkeni birbirine göre kıyaslamamız (karşılaştırmamız) gerekebilmektedir. Bu gibi durumlarda karşılaştırma operatörleri kullanılmaktadır. Karşılaştırma operatörleri sayesinde iki değişken birbirine eşit mi?, eşit değil mi?, büyük mü?, küçük mü? veya bunların kombinasyonları şeklinde sınarız.

2.3.3. Lojik Operatörler
Lojik operatörler karşılaştırma gibi kullanılabildikleri gibi birden çok operatörü birleştirmek içinde kullanılabilir (and veya or ile). Bu kullanımın dışında pek fazla kullanımı yoktur daha çok mantıksal sorgularda birkaç şartı birleştirmek için kullanılır. Özellikle “and”, “or” veya “not” operatörleri çok fazla kullanılmaktadır.

2.4. Hazır Fonksiyonlar
Vbscript içerisinde değişkenlerimizi kontrol altında tutabilmemiz için bir dizi hazır fonksiyon bulunmaktadır. Bu fonksiyonları gruplar halinde inceleyeceğiz. Tüm bu fonksiyonları beş ana grupta toplayabiliriz.


 * 1) 1. Metin işlemleri
 * 2) 2. Sayısal işlemler
 * 3) 3. Tarih işlemleri
 * 4) 4. Test işlemleri
 * 5) 5. Dönüştürme işlemleri
 * 6) 6. Biçimlendirme işlemleri

2.4.1. Metin işlemleri
Metin işlemleri isminden anlaşılacağı metinler üzerinde işlemler yapmamıza olanak tanıyan fonksiyonlardır. Bu fonksiyonlar diğer programlama dillerinde de aynen vardır. Kullanımları sadece metinsel tabanlı değişkenler (string,char,byte..) üzerinde mümkündür.

2.4.1.1. Asc
__ Açıklama __

İçerisine gönderilen metinin (veya karakterin) ilk harfine ait ANSI karakter kodunu gönderir. ANSI karşılık tablosu bu kitap içerisinde yer alan tabloda sunulmuştur.

__ Yazım __

Deger = **Asc(**String**)**

Fonksiyon içerisine gönderilen değer mutlaka bir karakter tabanlı değer içermek zorundadır. Fonksiyona gönderilen string eğer boş olursa çalışma zamanı hatası oluşacaktır.

__ Örnek __

|| <% Option Explicit Dim Deger

Deger = ASC( “A” ) ‘ 65 değeri döner. Deger = ASC( “a” ) ‘ 97 değeri döner. Deger = ASC( “Armut” ) ‘ 65 değeri döner. %>   Örnek 29 : ASC Fonksiyonu.

2.4.1.2. Chr
__ Açıklama __

Asc fonksiyonunun tam tersini yapar ve verilen numerik değerleri ANSI karşılığı olan karaktere çevirir.

__ Yazım __

Deger = **Chr(**numeric**)**

Fonksiyon içerisine gönderilen değer mutlaka bir sayısal değer içermek zorundadır. Fonksiyona gönderilen numerik değer 0-31 aralığında olduğu zaman bir karakter görüntülenmez, bunun sebebi ise bu aralıktaki karakterlerin özel karakterler olmasıdır. Örneğin Chr(10) satır atlatma kodudur ve görüntülenmesi mümkün değildir (kullanıldığı satırın bir altındaki satıra geçiş sağlar).

__ Örnekler __

|| <% Option Explicit Dim Karakter

Karakter = Chr( 65 ) ‘ A değeri döner. Karakter = Chr( 97 ) ‘ a değeri döner. Karakter = Chr( 62 ) ‘ > değeri döner. Karakter = Chr( 37 ) ‘ % değeri döner. %>   Örnek 30 : Chr Fonksiyonu.

2.4.1.3. Lcase
__ Açıklama __

Lcase fonksiyonu içerisine gönderilen karakterleri veya karakter setlerini tamamen küçük harfe dönüştürülmüş olarak geri verir.

__ Yazım __

Deger = **Lcase(**string**)**

Fonksiyon içerisine gönderilen değer mutlaka bir metinsel değer içermek zorundadır. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır. Dikkat edilecek nokta şudur fonksiyona gönderilen metindeki sadece büyük harfler küçük harfe dönüştürülecektir. Metin içerisindeki küçük harfler veya metin tabanlı olmayan harfler bir dönüşüme uğramayacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken, KucukMetin

Degisken = “ VBScript ” KucukMetin = LCase( Degisken ) ‘ “vbscript” değeri döner. %>   Örnek 31 : LCase Fonksiyonu.

2.4.1.4. Ucase
__ Açıklama __

Ucase fonksiyonu çalışma olarak Lcase fonksiyonunun tamamen zıttıdır. Ucase fonksiyonu içerisine gönderilen karakterleri veya karakter setlerini tamamen büyük harfe dönüştürülmüş olarak geri verir.

__ Yazım __

Deger = **Ucase(**string**)**

Fonksiyon içerisine gönderilen değer mutlaka bir metinsel değer içermek zorundadır. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır. Dikkat edilecek nokta şudur fonksiyona gönderilen metindeki sadece küçük harfler büyük harfe dönüştürülecektir. Metin içerisindeki büyük harfler veya metin tabanlı olmayan harfler bir dönüşüme uğramayacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken, BuyukMetin

Degisken = “ VBScript ” BuyukMetin = UCase( Degisken ) ‘ “VBSCRIPT” değeri döner. %>   Örnek 32 : UCase Fonksiyonu.

2.4.1.5. Left
__ Açıklama __

Left fonksiyonu verilen bir metinsel değişkenin solundan belirtilen kadar karakteri alması için kullanılır. Soldaki birinci harf her zaman 1. harf olacaktır.

__ Yazım __

Deger = **Left(**string, sayı**)**

Fonksiyon içerisine gönderilen stringin solundan itibaren yine fonksiyona gönderilen sayı kadar karakterini alacaktır. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken, SolMetin

Degisken = “ VBScript ” SolMetin = Left( Degisken, 3 ) ‘ “VBS” değeri döner. %>   Örnek 33 : Left Fonksiyonu.

2.4.1.6. Right
__ Açıklama __

Right fonksiyonu verilen bir metinsel değişkenin sağından belirtilen kadar karakteri alması için kullanılır. Sağdaki ilk harf her zaman 1. harf olacaktır.

__ Yazım __

Deger = **Right(**string, sayı**)**

Fonksiyon içerisine gönderilen stringin solundan itibaren yine fonksiyona gönderilen sayı kadar karakterini alacaktır. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken, SagMetin

Degisken = “ VBScript ” SagMetin = Right( Degisken, 6 ) ‘ “Script” değeri döner. %>   Örnek 34 : Right Fonksiyonu.

2.4.1.7. Mid
__ Açıklama __

Bir string içerisinde başlangıç noktasını ve karakter olarak boyutunu verdiğimiz alanda yer alan stringi verecektir. Soldaki ilk harf 1. harf olarak kabul edilmektedir.

__ Yazım __

Deger = **Mid(**string, başlangıç[, uzunluk]**)**

Fonksiyon içerisine gönderilen stringin solundan itibaren yine fonksiyona gönderilen başlangıç değeri kadara içeriden, fonksiyona gönderilen uzunluk değeri kadar bir kısmı keser alır. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır. Uzunluk opsiyonu zorunlu değildir gönderilmediği zaman başlangıçtan son harfe kadar olan kısmı alır.

__ Örnekler __

|| <% Option Explicit Dim Degisken, Metin

Degisken = “ Erhan Arı ” Metin = Mid( Degisken, 7, 3 ) ‘ “Arı” değeri döner. %>   Örnek 35 : Mid Fonksiyonu.

2.4.1.8. Len
__ Açıklama __

Fonksiyon içerisine gönderilen metinsel değişkenin karaktersel olarak uzunluğunu bize verir.

__ Yazım __

Deger = **Len(**string**)**

Fonksiyon içerisine gönderilen stringin solundan itibaren boyu sayılacak ve fonksiyon çıktısı olarak verilecektir. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken, Uzunluk

Degisken = “ Arif Haldun Özer ” Uzunluk = Len( Degisken ) ‘ 16 değeri döner. %>   Örnek 36 : Len Fonksiyonu.

2.4.1.9. Ltrim
__ Açıklama __

Fonksiyon içerisine gönderilen metinsel değişkenin solunda yer alan boşlukları atar ve değişkenin solunda yer alan boşluklar hariç diğer kısımları alır.

__ Yazım __

Deger = **LTrim(**string**)**

Fonksiyon içerisine gönderilen stringin solundan itibaren kontrol ederek solda yer alan boşlukları yok eder. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = LTrim( “ Alp İlhan “ ) ‘ “Alp İlhan “ değeri döner. %>   Örnek 37 : LTrim Fonksiyonu.

2.4.1.10. Rtrim
__ Açıklama __

Fonksiyon içerisine gönderilen metinsel değişkenin sağında yer alan boşlukları atar ve değişkenin sağında yer alan boşluklar hariç diğer kısımları alır.

__ Yazım __

Deger = **RTrim(**string**)**

Fonksiyon içerisine gönderilen stringin sağından itibaren kontrol ederek sağda yer alan boşlukları yok eder. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = RTrim( “ Alp İlhan “ ) ‘ “ Alp İlhan“ değeri döner. %>   Örnek 38 : RTrim Fonksiyonu.

2.4.1.11. Trim
__ Açıklama __

Fonksiyon içerisine gönderilen metinsel değişkenin sağında ve solunda yer alan boşlukları atar ve değişkenin sağ ve sol boşlukları hariç diğer kısımları alır.

__ Yazım __

Deger = **Trim(**string**)**

Fonksiyon içerisine gönderilen stringin sağında ve solunda yer alan boşlukları yok eder. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Trim( “ Alp İlhan “ ) ‘ “Alp İlhan” değeri döner. %>   Örnek 39 : Trim Fonksiyonu.

2.4.1.12. Space
__ Açıklama __

Fonksiyon içerisine gönderilen sayı değeri kadar boşluktan oluşan bir metinsel değişken oluşturur.

__ Yazım __

Deger = **Space(**Sayı**)**

Fonksiyon içerisine gönderilen sayı değeri kadar boşluk olur. Fonksiyona gönderilen değer “Null” olursa geriye dönen değerde “Null” olacaktır.

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Space( 10 ) ‘ 10 adet boşluk değeri döner. Degisken = “ Merhaba ” & Space( 1 ) & “ Dünya ” ‘ “Merhaba Dünya” değeri döner. %>   Örnek 40 : Space Fonksiyonu.

2.4.1.13. String
__ Açıklama __

Fonksiyon içerisine gönderilen sayı değeri kadar yine fonksiyon içerisine gönderilen karakteri yan yana koyar. Mantık olarak “space” fonksiyonuna çok benzer.

__ Yazım __

Deger = **String(**Sayı, Karakter**)**

Fonksiyon içerisine gönderilen sayı değeri kadar karakteri yan yana koyar fakat fonksiyon içerisine gönderilen karakterin sadece ilk harfini alır yani karakter yerine bir metin girilirse sadece metnin ilk harfini alır. Bunun dışında karakter yerine karakterin ANSI kodunu da yazabilirsiniz.

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = String( 5, “*” ) ‘ “*****” değeri döner. Degisken = String( 5, 42 ) ‘ “*****” değeri döner. Degisken = String( 10, “ABC” ) ‘ “AAAAAAAAAA” değeri döner. %>

2.4.1.14. Replace
__ Açıklama __

Verilen string içerisinde istenilen bölümleri bulup başka bir string ile değiştirmeye yarar.

__ Yazım __

Deger = **Replace(**Metin, bulunacakmetin, değiştirilecekmetin**)**

Fonksiyon içerisine gönderilen metin içerisinde bulunacakmetini arayarak yerine değiştirilecekmetin i değiştirir.

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Replace( “XXpXXPXXp”, “p”, “Y” ) ‘ “XXYXXPXXY” değeri döner. %>   Örnek 41 : Replace Fonksiyonu.

2.4.1.15. InStr
__ Açıklama __

Uzun bir değişken içerisinde (string) daha kısa bir değişkenin (string) bulunup bulunmadığını arar; bulursa kısa değişkenin uzun değişken içerisinde kaçıncı karakterden itibaren başladığını belirtir.

__ Yazım __

Deger = **InStr(**Metin, aranacakmetin**)**

Fonksiyon içerisine gönderilen metin içerisinde aranacakmetin’i bulup soldan itibaren kaçıncı karakterden başladığını verir.

__ Örnekler __

|| <% Option Explicit Dim Degisken, Bul, Sonuc

Degisken = “ XXpXXpXXPXXP ” Bul = “ P ” Sonuc = Instr( Degisken, Bul ) ‘ 9 değeri döner. %>   Örnek 42 : Instr Fonksiyonu.

2.4.1.16. InStrRev
__ Açıklama __

Uzun bir değişken içerisinde (string) daha kısa bir değişkenin (string) bulunup bulunmadığını metinin sonundan itibaren arar; bulursa kısa değişkenin uzun değişken içerisinde sondan kaçıncı karakterden itibaren başladığını belirtir.

__ Yazım __

Deger = **InStrRev(**Metin, aranacakmetin**)**

Fonksiyon içerisine gönderilen metin içerisinde aranacakmetin’i bulup sağdan itibaren kaçıncı karakterden başladığını verir.

__ Örnekler __

|| <% Option Explicit Dim Degisken, Bul, Sonuc

Degisken = “ XXpXXpXXPXXP ” Bul = “ P ” Sonuc = Instrrev( Degisken, Bul ) ‘ 1 değeri döner. %>   Örnek 43 : Instrrev fonksiyonu.

2.4.1.17. StrReverse
__ Açıklama __

Fonksiyon içerisine gönderilen metinin tersten okunuşu olarak bize verir.

__ Yazım __

Deger = **StrReverse(**Metin**)**

Fonksiyon içerisine gönderilen metinin tersten okunuşunu verir.

__ Örnekler __

|| <% Option Explicit Dim Degisken, Sonuc

Degisken = “ VbScript ” Sonuc = StrReverse( Degisken ) ‘ “tpircSbV” değeri döner. %>   Örnek 44 : StrReverse Fonksiyonu.

2.4.2. Sayısal işlemleri
Kullanılan tüm sayısal fonksiyonların kullanım biçimi aynıdır. Fonksiyon sonucu bir değişkene atılır ve işlemlerimize devam edilir. Matematikte kullanılan tüm fonksiyonlar aynen geçerlidir bunların bazıları Cos, Sin, Tan, Exp, vb.. şeklindedir. Kısa kısa bu fonksiyonlara değinelim.

2.4.2.1. Abs
__ Açıklama __

Fonksiyon içerisine gönderilen sayının tam değerini verir. Negatif sayıları tam değer fonksiyonu ile kullandığımız zaman pozitif değer dönecektir.

__ Yazım __

Deger = **Abs(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Abs( 50.3 ) ‘ 50.3 değeri döner. Degisken = Abs( -50.3 ) ‘ 50.3 değeri döner. %>   Örnek 45 : Abs Fonksiyonu.

2.4.2.2. Atn
__ Açıklama __

Fonksiyon içerisine gönderilen sayının arctanjantını verir. Fakat bu işlemi radyan üzerinde yapar.

__ Yazım __

Deger = **Atn(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Pi Pi = Atn( 1 ) * 4 ‘ pi değeri (3.14159276) döner. %>   Örnek 46 : Atn Fonksiyonu.

2.4.2.3. Log
__ Açıklama __

Fonksiyon içerisine gönderilen sayının doğal logaritmasını verir.

__ Yazım __

Deger = **Log(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Log( 10 ) ‘ e tabanında logaritma 10 u hesaplar. %>   Örnek 47 : Log Fonksiyonu.

2.4.2.4. Exp
__ Açıklama __

Doğal logaritma tabanı olan “e” değerinin üstel fonksiyonu yapar. Yani logaritma işleminin tam tersi söz konusudur.

__ Yazım __

Deger = **Exp(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Exp( 10 ) ‘ e üstü 10 u hesaplar. %>   Örnek 48 : Exp Fonksiyonu.

2.4.2.5. Cos, Sin, Tan
__ Açıklama __

Sayının radyan degeri olarak trigonometrik fonksiyonunu hesaplar. Tüm trigonometrik fonksiyonların kullanımları aynıdır. Eğer derece olarak çalışılacaksa mutlaka dönüşüm işlemi yapılmalıdır.

__ Yazım __

Deger = **Cos(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Cos( 10 ) ‘ radyan olarak 10 un kosinisinü verir. %>   Örnek 49 : Cos Fonksiyonu.

2.4.2.6. Sqr
__ Açıklama __

Sayının karekökünü verir.

__ Yazım __

Deger = **Sqr(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Sqr( 25 ) ‘ 5 değerini verir. %>   Örnek 50 : Sqr Fonksiyonu.

2.4.2.7. Rnd
__ Açıklama __

Rastgele bir sayı geri döndürür.

__ Yazım __

Deger = **Rnd(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Rnd( 25 ) ‘ rastgele bir değer verir. %>   Örnek 51 : Rnd Fonksiyonu.

2.4.2.8. Round
__ Açıklama __

Fonksiyona gönderilen sayıyı istenilen basamak kadar yuvarlar.

__ Yazım __

Deger = **Round(**Sayı, basamak**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Round( 3.14159276, 2 ) ‘ 3.14 değerini verir. %>   Örnek 52 : Round Fonksiyonu.

2.4.2.9. Int, Fix
__ Açıklama __

Fonksiyona gönderilen sayının tam sayısını verir.

__ Yazım __

Deger = **Int(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Int( 99.8 ) ‘ 99 değerini verir. Degisken = Fix( 99.8 ) ‘ 99 değerini verir. Degisken = Int(- 99.8 ) ‘ -100 değerini verir. Degisken = Fix(- 99.8 ) ‘ -99 değerini verir. Degisken = Int(- 99.2 ) ‘ -100 değerini verir. Degisken = Fix(- 99.2 ) ‘ -99 değerini verir. %>   Örnek 53 : Int ve Fix Fonksiyonu.

2.4.2.10. Sgn
__ Açıklama __

Fonksiyona gönderilen sayının işaret fonksiyonu değerini verir.

__ Yazım __

Deger = **Sgn(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Sgn( 12 ) ‘ 1 değerini verir. Degisken = Sgn( -2.4 ) ‘ -1 değerini verir. Degisken = Sgn( 0 ) ‘ 0 değerini verir. %>   Örnek 54 : Sgn Fonksiyonu.

2.4.3. Tarih işlemleri
Visual basic programlama dilinin hemen hemen tüm zaman fonksiyonları vbscript’te de aynen kullanılır. Bunlara ek olarak ekstra birkaç fonksiyon eklenmiştir. Tüm tarih fonksiyonlarını sırasıyla inceleyelim;

2.4.3.1. Date
__ Açıklama __

Bu fonksiyon sunucuda ayarlı olan tarih formatına uygun olarak o güne ait tarihi verir.

__ Yazım __

Deger = **Date**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Date ‘ o günkü tarih değerini verir. %>   Örnek 55 : Date Fonksiyonu.

2.4.3.2. Time
__ Açıklama __

Bu fonksiyon sunucuda ayarlı olan zaman formatına uygun olarak o ana ait zamanı verir.

__ Yazım __

Deger = **Time**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Time ‘ o an ki zaman değerini verir. %>   Örnek 56 : Time Fonksiyonu.

2.4.3.3. Now
__ Açıklama __

Bu fonksiyon sunucuda ayarlı olan tarih ve zaman formatına uygun olarak o an ki tarih ve zamanı birlikte verir.

__ Yazım __

Deger = **Now**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Now ‘ o an ki tarih ve zaman değerini verir. %>   Örnek 57 : Now Fonksiyonu.

2.4.3.4. Day
__ Açıklama __

Bu fonksiyon içerisine gönderilen tarihe ait gün değerini sayısal olarak verir. Bu tarih başka fonksiyonların çıktıları olabildiği gibi metinsel tabanlı değişkende olabilmektedir.

__ Yazım __

Deger = **Day(**Tarih**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Day(“ 25.07.1997 ”) ‘ “25” değerini verir. %>   Örnek 58 : Day Fonksiyonu.

2.4.3.5. Month
__ Açıklama __

Bu fonksiyon içerisine gönderilen tarihe ait ay değerini sayısal olarak verir. Bu tarih başka fonksiyonların çıktıları olabildiği gibi metinsel tabanlı değişkende olabilmektedir.

__ Yazım __

Deger = **Month(**Tarih**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Month(“ 25.07.1997 ”) ‘ “7” değerini verir. %>   Örnek 59 : Month Fonksiyonu.

2.4.3.6. Year
__ Açıklama __

Bu fonksiyon içerisine gönderilen tarihe ait yıl değerini sayısal olarak verir. Bu tarih başka fonksiyonların çıktıları olabildiği gibi metinsel tabanlı değişkende olabilmektedir.

__ Yazım __

Deger = **Year(**Tarih**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Year(“ 25.07.1997 ”) ‘ “1997” değerini verir. %>   Örnek 60 : Year Fonksiyonu.

2.4.3.7. WeekDay
__ Açıklama __

Bu fonksiyon içerisine gönderilen tarihin haftanın kaçıncı günü olduğunun değerini sayısal olarak verir. Bu tarih başka fonksiyonların çıktıları olabildiği gibi tarih tabanlı değişkende olabilmektedir. Geriye donen değer sabitler bölümünde anlatılan değerler olacaktır.

__ Yazım __

Deger = **WeekDay(**Tarih**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = WeekDay(“ 25.07.1997 ”) ‘ “3” değerini verir. %>   Örnek 61 : Weekday Fonksiyonu.

2.4.3.8. WeekDayName
__ Açıklama __

Bu fonksiyon içerisine gönderilen tarihin haftanın kaçıncı günü olduğunun değerini gün ismi olarak verir. Bu tarih başka fonksiyonların çıktıları olabildiği gibi tarih tabanlı değişkende olabilmektedir. Geriye donen değer metin tabanlı olarak gün ismi olacaktır.

__ Yazım __

Deger = **WeekDayName(**Tarih**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = WeekDayName(“ 25.07.1997 ”) ‘ “Salı” değerini verir. %>   Örnek 62 : Weekdayname Fonksiyonu.

2.4.3.9. MonthName
__ Açıklama __

Bu fonksiyon içerisine gönderilen sayısal değere karşılık gelen ay adını verir. Geriye donen değer metin tabanlı olarak ay ismi olacaktır. Fakat bu isim sunucunun bölgesel ayarlarında ayarlandığı şekilde olacaktır.

__ Yazım __

Deger = **MonthName(**Sayı**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = MonthName( 11 ) ‘ “Kasım” değerini verir. %>   Örnek 63 : MonthName Fonksiyonu.

2.4.3.10. Hour
__ Açıklama __

Bu fonksiyon içerisine gönderilen zamana ait saat bilgisini sayısal olarak verir. Geriye donen değer sayısal olarak saati verecektir. Bu alınan saat bilgisi bölgesel ayarlara bağlı değildir.

__ Yazım __

Deger = **Hour(**Zaman**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Hour( “15:32:33” ) ‘ “15” değerini verir. %>   Örnek 64 : Hour Fonksiyonu.

2.4.3.11. Minute
__ Açıklama __

Bu fonksiyon içerisine gönderilen zamana ait dakika bilgisini sayısal olarak verir. Geriye donen değer sayısal olarak dakikayı verecektir. Bu alınan dakika bilgisi bölgesel ayarlara bağlı değildir.

__ Yazım __

Deger = **Minute(**Zaman**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Minute( “15:32:33” ) ‘ “32” değerini verir. %>   Örnek 65 : Minute Fonksiyonu.

2.4.3.12. Second
__ Açıklama __

Bu fonksiyon içerisine gönderilen zamana ait saniye bilgisini sayısal olarak verir. Geriye donen değer sayısal olarak saniyeyi verecektir. Bu alınan saniye bilgisi bölgesel ayarlara bağlı değildir.

__ Yazım __

Deger = **Second(**Zaman**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = Second( “15:32:33” ) ‘ “33” değerini verir. %>   Örnek 66 : Second Fonksiyonu.

2.4.3.13. DateAdd
__ Açıklama __

Bu fonksiyon içerisine gönderilen zamana, belirtilen miktarda belirtilen birimi ekleyecektir. Geriye dönen değer yine tarihsel bir değişken olacaktır. Kullanımda adı geçen birimler aşağıdaki şekillerde olabilir.

yyyy Yıl q Çeyrek yıl m Ay d Gün w Hafta h Saat n Dakika s Saniye

__ Yazım __

Deger = **DateAdd(**Birim, Miktar, Tarih**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = DateAdd( “m”, 1, “25.07.2002” ) ‘ “25.08.2002” değerini verir. Degisken = DateAdd( “yyyy”, 3, “25.07.2002” ) ‘ “25.07.2005” değerini verir. %>   Örnek 67 : DateAdd Fonksiyonu.

2.4.3.14. DateDiff
__ Açıklama __

Bu fonksiyon içerisine gönderilen iki farklı zaman arasında belirtilen birimle ne kadar fark olduğunu verecektir. Geriye dönen değer sayısal bir değişken olacaktır. Kullanımda adı geçen birimler aşağıdaki şekillerde olabilir.

yyyy Yıl q Çeyrek yıl m Ay d Gün w Hafta h Saat n Dakika s Saniye

__ Yazım __

Deger = **DateDiff(**Birim, Tarih1, Tarih2**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = DateDiff( “m”, “25.07.2001”, “25.07.2002” ) ‘ “12” değerini verir. %>   Örnek 68 : DateDiff Fonksiyonu.

2.4.3.15. DateSerial
__ Açıklama __

Bu fonksiyon içerisine gönderilen tarih değerlerini birleştirerek tarih formatında bir tarih değişkeni oluşturur. Geriye dönen değer tarihsel bir değişken olacaktır.

__ Yazım __

Deger = **DateSerial(**Yıl, Ay, Gün**)**

__ Örnekler __

|| <% Option Explicit Dim Degisken

Degisken = DateSerial( “1997”, “07”, “25” ) ‘ “25.07.1997” değerini verir. %>   Örnek 69 : DateSerial Fonksiyonu.