IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 17 Mart 2007, 20:34   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
ASP Anlatımı (Dökümandır)




ASP’YE GİRİŞ
Bir HTML sayfayı sınamak için sadece Browser programına ihtiyacınız var; bir HTML belgesini iki kere tıkladığınızda varsayılan Browser açılacak ve bu sayfayı yorumlayarak, görüntüleyecektir. Fakat uzatması .asp olan bir dosyayı iki kere tıkladığınızda ya Windows size bu dosyayı hangi programla açmak istediğinizi soracak; ya da MS Visual Studio veya Adobe Photoshop çalışacaktır. Bilgisayarınızda MS Visual Studio programı kurulu ise, onun açılması normal: çünkü MS’un ASP dahil hemen hemen bütün Web tasarım araçları Visual Studio’nun üyesi. Photoshop ise renk paletlerini belirlemek üzere kullandığı dosyalara .asp uzatmasını veriyor. Bilgisayarınızda MS Visual Studio kurulu değilse, fakat Photoshop varsa, ASP dosyalarınızın simgesi Photoshop’a ait olacaktır.
MS Visual Studio’dan yararlanmıyorsanız, ASP dosyalarınızı, (herhangi bir klasörün Görünüm menüsünden Klasör Seçenekleri maddesini seçerek ve üçüncü sekme olan Dosya Türlerini tıkladıktan sonra ASP satırını işaretleyerek ve Düzenle düğmesine basarak) Not Defteri ile ilişkilendirmek en doğru yoldur. Bu, bu kitapçıktaki örnek ASP dosyalarını oluşturmak, düzenlemek, değiştirmek için kullanacağımız başlıca programın da herhangi bir düzyazı programı olduğu anlamına gelir. ASP üretim işini herhangi bir ortamda yapabilirsiniz. Bunun için bilgisayarınızda mutlaka Windows kurulu olması gerekmez. Fakat ASP dosyalarının çalışıp çalışmadığını sınamak için sayfalarınızı gerçek Web Server’a göndermeden önce kendi bilgisayarınızda çalıştırmanız gerekir. Bunu Kişisel Web Server (PWS) veya IIS ile yapacağız.
Kişisel Web Server Kuralım
Bilgisayarınız Windows 95, 98, NT4 WorkStation veya NT4 Server ile çalışıyorsa, sisteminize bir Web Server programını siz kurmak zorundasınız. Windows 2000 Professional veya Windows 2000 Server ise Kişisel Web Server programını kendiliğinden kurar. Windows 98’e bir kişisel Web Server kurmaya geçmeden önce bilgisayarımıza bir kimlik vermemiz gerekir: Bilgisayarım/Denetim Masası/Ağ’ı tıklayarak açacağınız diyalog kutusunda ikinci sekme olan Tanımlama’yı açın ve “Bilgisayar adı” kutusuna istediğiniz adı yazın. Bilgisayarın ağ ortamında olması gerekmez.
Windows 98’e Kişisel Web Server kurmak için iki yol izleyebilirsiniz. Windows 98 CD-ROM’unda Add-ons klasöründeki PWS dizininde Kur.exe’yi tıklayın veya Windows NT Option Pack CD-ROM’unda Default.htm’i açın. Bilgisayarınızın Windows 98 ile çalıştığını algılayacak olan program size Personal (kişisel) Web Server (PWS) kurmayı önerecektir. Kişisel Web Server’ı kurarken her iki durumda da ikinci diyalog kutusunda Minimum/En az veya Typical/Tipik seçeneğini değil, Custom/Özel’i seçin ve açılacak yeni diyalog kutusunda Microsoft Data Access Components (MS Veri Erişim Bileşenleri) satırına işaret koyarak, Alt Bileşenleri Göster düğmesini tıklayın. Açılacak seçme kutusunda ise ADO Documentation satırına işaret koyun. Bu belgelerden daha sonra veri-yönlendirmeli Web Uygulaması yaparken yararlanacağız.
Kişisel Web Server kurulduktan sonra bilgisayarı yeniden başlatmak gerekir
------------
PWS Kurulurken Hata Verirse
Windows 98’e PWS kurarken, programın Microsoft Transaction Server bölümüne ilişkin sistem kayıtları yapılırken, iki hata mesajı ile karşılaşabilirsiniz (0x80004005 ve 0xfee662). Bu, orijinal Windows 98 CD-ROM’undaki PWS Kur programının, Windows Registry dosyasının büyük olması halinde hata vermesinden kaynaklanıyor. Böyle bir durumla karşılaşırsanız, Bilgisayarım/Denetim Masası/Program Ekle Kaldır aracılığıyla, Personel Web Server’ı kaldırın. Bilgisayar kapanıp açıldıktan sonra, Windows 98 CD-ROM’unda Add-ons/PWS dizinindeki bütün dosyaları, sabit diskinizde Temp dizinine kopyalayın.
Sonra [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] adresinde “Download Mstsetup.dll” satırını tıklayın. Mssetup.exe adlı bir dosya bilgisayarınıza indirilince; bu dosyayı iki kere tıklayın ve dosyanın genişletileceği yer olarak C:\Temp’i gösterin; program Mstsetup.dll dosyasının değiştirilmesini isteyip istemediğinizi sorduğu zaman “Tamam”ı tıklayın. Şimdi, C:\Temp’deki Kur.exe (Windows CD-ROM’unuz İngilizce ise Setup.exe) programını iki kere tıklayın. PWS şimdi hatasız kurulacaktır.
Windows NT4.0 Workstation veya Server’a IIS4.0 kurmak için Option Pack CD-ROM’undaki default.htm’i çalıştırmanız ve açılacak Browser penceresinde IIS’i kurma seçeneğini tıklamanız yeter. Burada da ADO Documentation’ı sabit diskinize aktarabilmek için gerekli seçenekği işaretleyin.
Windows 98’e Kişisel Web Server kurulduğunda Masaüstü’nde Yayımla (Publish) adlı bir simge belirecektir. NT sistemlerinde ise Başlat menüsünde Programlar bölümüne IIS Manager satırı eklenir. Bu yollardan biriyle PWS veya IIS’i çalıştırın.
Kişisel Web Server’da Personel Web Server Manager (Yönetici) kutusu açıldığında soldaki araç çubuğunda Yönetici’nin çeşitli bölümlerine gitmeniz için gereken gezinme simgelerini göreceksiniz. Şimdi, açılan ana pencerede iki unsura dikkat edin:
1. Kişisel Web Server’ınızın adı. Bilgisayarınızın adı buraya Server adı olarak yazılmış olmalı. Biraz sonra, Internet’e koymadan önce sınayacağımız ASP sayfalarını çağırırken, Browser’ın adres kutusuna burada gördüğümüz adı yazacağız.
2. Kişisel Web Server’ın bilgisayarımızda sabit diskteki gerçek adresi. Bu, sizin Kişisel Web Server’ınızın kök (root) dizinidir. Bu genellikle C:\inetpub\
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
klasörüdür. Kişisel Web sitesi yaparsanız, sitenin gerektirdiği bütün dizinleriniz ve dosyalarınız burada gördüğünüz dizinin içinde olmalıdır. Yapacağımız ASP dosyalarını işte bu dizinin içine koyacağız.
Bunları bir kenara not ettikten sonra, soldaki araç çubuğunda Gelişmiş simgesini tıklayın; ortadaki pencerede sanal dizinlerinizi görüyorsunuz. Bunlardan Home’u seçin ve sağdaki “Özellikleri düzenle” düğmesini tıklayın.
Ana dizinin okuma, yürütme ve makro erişim haklarının işaretli olmasına dikkat edin. İlerde kendinize Kişisel Web Server’ınızın kök dizininde yeni bir dizin oluşturursanız (örneğin “resimler” gibi) ve içine sitenizle ilgili dosyalar koyarsanız, Gelişmiş penceresinde Ekle düğmesini tıklayarak bu gerçek dizini de sitenin sanal dizinlerinden biri haline getirmeniz gerekir. Gerçek dizinin adı XYZ bile olsa, sanal dizin haline getirirken istediğiniz sanal adı verebilirsiniz. Ama unutmayın, Browser’ın adres hanesine gerçek dizin adını değil sanal dizin adını yazmanız gerekir.
Bu işlemleri IIS’te değişik araçlar ve diyalog kutularıyla, fakat temel ilkeler itibariyle aynı şekilde yapabilirsiniz. NT4 sistemlerine IIS’i kurmadan önce, Service Pack 3’ü uygulayın; Internet Explorer 5’i kurun. Elinizde varsa Service Pack 4, 5 veya 6’yı en son uygulayın.
Bu noktada, ASP sayfalarınızı sınayacağınız bilgisayarda Microsoft Internet Explorer programının kurulu bulunmasının şart olmadığını hatırlatalım. ASP sayfalarınızı Netscape ile de sınayabilirsiniz.
Bir Örnek Yapalım
Şimdi ilk ASP sayfamızı yapalım ve bununla kişisel Web Server programının çalışıp çalışmadığını sınayalım. Buraya kadar anlamış olduğunuz gibi ASP sayfası da HTML gibi düz yazı dosyasıdır; dolayısıyla beğendiğiniz bir düz yazı programı ile ASP yazabilirsiniz. Şimdi açın en beğendiğiniz düz yazı programını ve başlayın yazmaya. Eğer kelime-işlemci kolayınıza gidiyorsa, dosyayı ASCII veya ANSI biçiminde kaydetmeyi unutmayın (10’ncu satırın sonunda nokta olduğuna dikkat edin):
<HTML>
<HEAD>
<TITLE>ASP ILE ILK SAYFA</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>
<H1><CENTER>Merhaba Dünya!</H1>
<H2>Bugün:
<% Response.Write(Date) %>.
</CENTER
</H2>
</BODY>
</HTML>
Bu dosyayı merhaba.asp adıyla kaydedin ve kendi bilgisayarınızda kişisel Web Server’da veya ISS’te sınayacaksanız, bu programları çalıştırın. Browser’ınızın URL hanesine, kişisel Server’ınızın adıyla birlikte dosyanın adını yazın; ve ilk ASP programınız dünyaya Merhaba desin.
Internet’te ASP
ASP teknolojisi ile oluşturduğunuz sayfaları, yani içinde ASP teknolojisinin gerektirdiği kodlar bulunan HTML dosyalarını, .asp uzatmasıyla kaydederiz. Bu dosyalar talep edildiğinde, Web Server programı, eğer ASP teknolojisini tanıyorsa, talep edilenin ASP sayfası olduğunu dosya adının uzatmasından anlar; ve bu sayfayı ziyaretçiye yollamadan önce kendisi işleme tabi tutar. ASP sayfamızdaki kodlar büyük bir ihtimalle bir takım dinamik işler yapacak, örneğin hesaplamalar, araştırmalar, veri tabanından veri çekme, dosya sisteminden dosya isteme gibi görevlerini yerine getirecek, ve ortaya çıkacak olan HTML dosyasını ziyaretçiye gönderecektir. Diyelim ki bu kitapçıktaki örnekleri yaptınız ve ücretsiz Site yeri edinmiş olduğunuz Hosting firmasının bilgisayarındaki sitenize yerleştirdiniz. Sonra Browser’ınızın URL hanesine bu ASP dosyasının adını yazdınız ve sayfayı talep ettiniz. Karşınıza, ya ASP sayfasının içindeki kodları görüntüleyen veya sadece sayfanın HTML unsurlarına yer veren bir sayfa geldi! Bu Server’ınızın ASP anlamadığını gösterir. ASP sayfalarınızı ASP-uyumlu Web sunucularında çalıştırabilirsiniz. Sitenizde ASP sayfaları bulunacaksa ve ücretli evsahibi firmalardan site alanı edinecekseniz, sunucunun ASP-uyumlu olmasına dikkat edin.
Şimdi, ilk ASP’mizi çalıştırdığımıza göre, biraz teknikten söz edebiliriz. HTML’in ziyaretçinin bilgisayarında çalıştığını biliyorsunuz; istemci Browser, sizin URL hanesine adını yazdığınız HTML dosyasını yine adresteki sunucu Web Server’dan ister. Web Server da bu dosyayı bulur ve içinde kayıtlı resim ve diğer unsurlarla birlikte istek sahibine gönderir. Fakat kimi zaman Server’a bize sadece bir dosyayı göndermesini değil, fakat bu dosyanın içinde kayıtlı komutlar varsa onları icra etmesini de bildirebiliriz. Bunu yapmanın bir yolu CGI programlarıdır. Bir diğer yolu ise ASP’dir. Web Server, kendisinden bir ASP belgesi talep edildiğinde, kendi kendine “Dur bakalım! ASP istendiği zaman hemen alıp göndermek yok, önce bunu ASP.DLL programına gönderelim.. Ondan sonra işimize devam ederiz!” der.
ASP.DLL, kendisine bir .asp dosyasının geldiğini görünce, hemen ASP’lerin Anayasası olan global.asp’nin çalışıp çalışmadığına bakar. global.asa, tıpkı diğer ASP dosyaları gibi bir düz yazı dosyasıdır ve ASP programlarının çalışma koşullarını düzenleyen kuralları içerir. (Bu dosyayı sırası gelince ele alacağız.) Yukarıdaki örnekte gördüğümüz gibi ASP dosyası hem HTML kodları içerir, hem de içinde bir Script diliyle yazılmış kodlar vardır. ASP’ye “program” özelliği kazandıran bu Script dili ile yazılmış kodlardır. ASP.DLL, önce gelen .asp dosyasında hangi Script dilinin kullanıldığına bakar ve bunun için gerekli ortamı oluşturur; yani bu Script dilini yorumlayacak programı çalıştırır; bu program Script’i yorumlar ve icra edilecek komutları icra eder; ASP.DLL, icra edilen komutlar, işletim sisteminin yardımını istiyorsa (örneğin bir veritabanından veri çekmek gibi, veya dosya sistemine bir dosya açtırmak, yazdırmak, sildirmek gibi) bu yardımın edinilmesini de sağlar. Bütün bu işlerin sonunda sizin yazdığınız HTML kodlarına ek yapmak (örneğin bir tablonun içini, çekilen verilerle doldurmak veya dosya sisteminden edinilen bir dosyanın içeriğini sayfaya aktarmak gibi) gerekiyorsa bu ekleri ASP.DLL yapar.
ASP.DLL, kendisine sevk edilen dosyayı satır satır okur ve önce dosyadaki ASP kodlarının gerektirdiği HTML değerlerini bulur; yani önce ASP icra edilir, gereği yerine getirilir. Sonra HTML bölümleri ile birleştirilip sonuçta sunucuya saf ve temiz bir HTML sayfası gönderilir. Bu sayfanın içinde bir satır bile ASP kodu bulunmaz. Eğer sayfanıza ziyaretçinin Browser’ında çalışması amacıyla Javascript veya VBScript kodları koydu iseniz, elbette bu kodlar HTML’in parçası olarak ziyaretçiye gidecektir. Fakat giden sayfada artık ASP’ye ilişkin hiç bir şey kalmamış olacaktır.
Biliyorsunuz, mevcut sürümleri itibariyle Browser programları içinde Netscape VBScript dilini anlamaz. ASP sayfalarımızda istediğimiz Script dilini kullanabiliriz; VBScript de kullanabiliriz. Netscape’in VBScript anlamamasıyla, ASP sayfalarımızda VBScript kullanmamızın bir ilgisi yoktur; çünkü ASP sayfasının ortaya çıkartacağı HTML kodunda ASP dolasıyla VBScript bulunmayacaktır; dolayısıyla ASP sayfalarınız, Netscape tarafından da anlaşılıp, görüntülenebilecektir. Tabiî ortaya çıkacak HTML sayfasının Netscape tarafından arzu ettiğiniz gibi görüntülenebilmesi için Netscape’in anlayabildiği dinamik HTML unsurlarına yer verme zorunluğunuz hâlâ devam ediyor.
ASP tekniğinin nasıl çalıştığını anladığımıza göre şimdi biraz terminoloji serpiştirelim ki, Webmaster meslektaşlarınızla biraraya geldiğinizde, gerçekten ASP ile mesela Javascript arasındaki farkı bildiğiniz belli olsun. ASP bir Server-Side Script teknolojisidir. Internet’te istemci ile sunucu arasındaki çizginin sunucu tarafına Server-Side (Sunucu Tarafı), istemci tarafına da Client-Side (evet, doğru tahmin ettiniz: İstemci Tarafı) denir. Server-Side’da çalışan Script programları da “Server-Side Script” (Sunucu Tarafı Script’i) adını alır. Dolayısıyla şöyle bir sayfa yaparsanız (merhaba.htm), bu sayfada Client-Side Script teknolojisi kullanmış olursunuz:
<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>
<H1>Merhaba Dünya</H1>
<H2>Bugün:</H2>
<H3>
<SCRIPT LANGUAGE=JAVASCRIPT>
<!--
tarih = new Date();
document.write(tarih);
//-->
</SCRIPT>
.</H3>
</BODY>
</HTML>
HTML sayfanıza <SCRIPT>..</SCRIPT> etiketleri arasına yerleştireceğiniz bu kodun çalışması için Server’ın hiçbir şey yapması gerekmez; kodu Browser çalıştıracak ve günün tarihini size (Türkçeleştirmediğiniz için İngilizce olarak) bildirecektir. Şimdi, bir de Server tarafında çalışan Script içeren sayfaya örnek verelim (merhaba2.asp). Bu kodu yazarken kapanan Script etiketinden sonra nokta olduğuna dikkat edin:
<HTML>
<HEAD>
<TITLE>VBScript 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>
<H1>Merhaba Dünya</H1>
<H2>Bugün:</H2>
<H3>
<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
Response.write(Date)
</SCRIPT>.
</H3>
</BODY>
</HTML>
Bu sayfada kullandığınız Script’i VBScript ile yazdığınızı farkettiniz. Yani? Bu HTML sayfası, Netscape’de görüntülenemez! Hayıır. Görüntülenir, çünkü Script’i Netscape değil, Server çalıştıracak. Bunu <SCRIPT> etiketinin içindeki “RUNAT” özelliği ile belirtiyoruz. (“Run,” çalıştır; “at” ise “içinde, üzerinde” anlamına gelir. “RUNAT” “...de çalıştır” gibi bir anlama sahiptir.) Burada RUNAT’in karşısına yazdığımız SERVER ifadesi ile, Script’in Browser’a gönderilmeden önce Server’da çalıştırılmasını sağlıyoruz; Server’a “Bu Script’i Server’da Çalıştır!” demiş oluyoruz.
Netscape bu sayfayı görüntüleyecektir; ama galiba bir terslik var. merhaba.asp ile merhaba2.asp’nin ekran görüntülerini ve kodlarını karşılaştırırsanız, birinde noktanın olması gereken yerde olduğu halde diğerinde noktanın yanlış yerde olduğunu görüyoruz. Oysa iki kodu da karşılaştırırsanız, ikisinde de nokta işareti, kodun bittiği yerde yer alıyor. Yukarıda ASP’nin icrasında HTML sayfa Server’a verilmeden önce ASP.DLL tarafından içindeki ASP kodlarının icra edildiğini söylemiştik. Nitekim, burada gördüğünüz gibi, ASP.DLL, HTML sayfayı içinde Server’ın çalıştırması gereken bölümle birlikte Server’a gönderdi; Server kendisine gelen dosyada kendi icra etmesi gereken (RUNAT=SERVER özelliği verilmiş olan Script’i) bölümü icra etti ve sonucu Browser’a aktardı. Yani, Server’ın çalıştırdığı Script’in sonucu sayfaya ASP’den sonra eklendi. Dolayısıyla, nokta, yanlış yerde kaldı.
Bundan çıkartacağımız sonuç şu olacak: ASP sayfalarımıza, Browser, Server ve ASP.DLL tarafından çalıştırılacak kodları yerleştirirken, sırasına dikkat edeceğiz ve hangi sırada icra edilmelerini istiyorsak, o sırada koyacağız.
Server ile ASP.DLL’in ilişkisi sadece Script dilini çalıştırmaktan ibaret değildir. ASP, istemciden gelen HTTP İstemi (Request) ve HTTP’ye giden Karşılık (Response) unsurlarından tutun, ActiveX Data Objects (ADO, AcvtiveX Veri Nesneleri) aracılığıyla, işletim sisteminin sunacağı veritabanına erişim imkanını ve işletim sisteminin sunduğu dosya yönetimine kadar bir çok imkanı kullanır. Bu “imkanlar” ASP’nin eline geçtiği anda “nesne” (Object) sayılırlar Şimdi bu nesnelere biraz yakından bakabiliriz.
ODBC İşliyor Mu?
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 ([Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]) Microsoft Data Access Components (sürüm 2.1.1.3711.11 GA, 6.2 MB) güncelleme dosyasını indirin ve sisteminizi güncelleştirin. Windows 2000 kurulu sistemlerde bunu yapmaya gerek yok. Böylece sisteminiz, ilerde yazacağımız veri-yönlendirmeli Web uygulamaları için hazır hale gelmiş olacaktır.
ASP’nin Unsurları
ASP tasarımcısı olarak, biz gerçekte ASP’nin Nesneleri ile birşeyler yaparız; başka bir deyişle ASP kodlarımız bu nesnelere yöneliktir, onları kullanma ve onlardan bir sonuç alma veya onlara bir sonuç aktarma amacına yöneliktir. ASP’nin Nesneleri altı grupta toplanır:
Application/Uygulama: Bir ASP sitesi, gerçekte bir Uygulama Programı olarak görülür. Bu, HTML/CGI geleneğine aşina tasarımcı için yeni bir kavram. ASP’yi icad edenler; bir ziyaretçi bir ASP sayfasından girerek, bir sitede surfing’e 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 kazandırdığı imkanları ele alacağız.
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.
Request/Talep: Browser’dan Server’a ulaşan bütün bilgiler, Request (Talep) nesnesinin ögeleridir. Bu nesneyi kullanarak, istemciden gelen her türlü HTTP bilgisini kullanırız.
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 ögeleridir. Bu nesneyi kullanarak ziyaretçiye göndermek istediklerimizi göndeririz.
Server/Sunucu: ASP, Web Server programını bir nesne olarak ele alır ve onun bize sağladığı araçları ve imkanları 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.
ASP’nin Dili
ASP, bir teknolojidir. Kendi başına bir yazım kuralı yoktur. ASP tekniğini kullanabilmek için, ASP sayfasının talep edilmesi halinde ziyaretçiye gönderilmeden önce ASP.DLL’ye teslim edilmesi bu teknolojinin kullanılabilmesi için hemen hemen tek şarttır. Bunu, dosya uzantısını .asp yaparak sağlarız. ASP.DLL ise, dünyada mevcut bütün Script dilleri ile verilecek komutları kabul edebilir. Sadece ASP.DLL’e sayfadaki kodların hangi dilde olduğunu söylemeniz gerekir. Bunu, ASP sayfasının birinci satırında yaparız. Örneğin ASP’ye VBScript dilini kullanmasını belirtmek için bu satırı şöyle yazarız:
<% @Language=VBScript %>
ASP sayfalarında genellikle VBScript, JavaScript ve JScript kullanılır. Ancak örneğin Perl dilinden türetilen PerlScript, PHP’den türetilen PHPScript de giderek ilgi çeken ASP dilleri arasına giriyor. Bir ASP sayfası içinde farklı Script dilleri kullanılabilir. Biz bu kitapçıkta örneklerimizi VBScript diliyle yazacağız.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Alt 17 Mart 2007, 20:35   #2
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




VBSCRİPT’E GİRİŞ
Bu kitap&#231;ıktaki &#246;rneklerimizi VBScript diliyle yazacağımıza g&#246;re, &#246;nce hızlı bir VBScript kursu g&#246;rsek iyi olur. Visual Basic dilini biliyorsanız, VBScript biliyorsunuz sayılır. VBScript, g&#252;&#231;l&#252; bir dildir; ancak Netscape firmasının hi&#231; bir zaman Browser’ında istemci tarafında &#231;alıştırılabilecek diller arasında kabul etmemesi sebebiyle VBScript, Web’in istemci tarafında kendisinden bekleneni yapamadı. MS’un Browser’ı Internet Explorer ise VBScript ile yazacağınız İstemci-Tarafı kodları okuyabilir ve icra edebilir.
Ne var ki ASP kodlarımız hi&#231; bir zaman ziyaret&#231;inin Browser’ının y&#252;z&#252;n&#252; g&#246;remeyeceği ve sadece Server’da &#231;alışacağı i&#231;in Server’da VBScript desteği bulunduğu s&#252;rece, ASP sayfalarınızı VBScript ile yazabilirsiniz. Bir Server’da ASP desteği varsa, VBScript desteği de var demektir.
VBScript’in hemen hemen b&#252;t&#252;n komutlarını ve y&#246;ntemlerini ASP’de kullanabilirsiniz. Ancak bunun bir ka&#231; kısıtlaması vardır. VB veya VBScript’e ASP dışında aşina iseniz, mesaj kutusu (MsgBox) ve girdi kutusu (InputBox) aracılığı ile programlarınıza kullanıcının bilgi girmesini sağlayabileceğinizi biliyorsunuz demektir. Bu iki komutu ASP i&#231;indeki VBScript kodunda kullanamayız. Ayrıca ASP teknolojisi zaten VBScript’in b&#252;t&#252;n komutlarını ve deyimlerini kullanmanızı da gerekli kılmayacaktır. G&#246;receksiniz ki, m&#252;kemmel ASP sayfaları oluşturmak i&#231;in bile bir avu&#231; VBScript komutu kullanacağız.
ASP sayfalarımızdaki HTML kodları ile VBScript (veya diğer Script dillerinin) kodlarını birbirinden ayırmamız gerekir. Bu ASP.DLL’ye, HTML’in nerede bittiğini, Script diliyle yazılmış kodun nerede başladığını g&#246;sterebilmemiz i&#231;in gerekli. Bunu sağlamak i&#231;in Script diliyle yazılmış herşeyi “<%” ve “%>” işaretleri arasına alırız. ASP.DLL bu işaretleri g&#246;r&#252;nce, i&#231;indekileri “yazmak” yerine “yapar.” Bir ASP sayfanızda HTML’in klasik “<” ve “>” işaretleri arasındaki unsurlar, ASP.DLL tarafından ziyaret&#231;iye g&#246;nderilecek olan sayfaya aynen aktarılır; ancak “<%” ve “%>” arasındaki herşey, başta belirttiğiniz LANGUAGE etiketinde yazılı Script dilinin yorumlayıcısına verilir; yorumlatılarak, gereği yerine getirilir.
“<%” ve “%>” işaretlerine “sınırlayıcı” denir. Sınırlayıcının i&#231;inde bir veya daha &#231;ok satır kod bulunabilir. Sınırlayıcılar ve i&#231;indeki Script, HTML etiketlerinin i&#231;inde veya dışında yer alabilir. Sınırlayıcının i&#231;indeki kodlarımızı a&#231;ıklamak i&#231;in koyacağımız yorum satırlarının başına tek tırnak işareti (') koyarız. İşte bu kuralları uyguladığımız bir ASP sayfası &#246;rneği:
<% @LANGUAGE=VBscript %>
<html>
<head>
<title>Hoşgeldiniz!</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>
<center>
<%
' Yazı tipi boyutunu tutacağımız bir değişken tanımlayalım
Dim fontBoyut
%>
<%
' yazı tipi boyutunu 1'den 7'ye kadar değiştirelim
For fontBoyut = 1 To 7
%>
<font size = <%=fontBoyut%>>
Hoşgeldiniz!<br>
<% Next %>
</center>
<h3>Bug&#252;n <% =WeekdayName(Weekday(Date)) %>, <% = Date %>.
Şu anda Server'da saat: <% = Time %>.<p>
</h3>
</body>
</html>
Burada sınırlayıcı arasında tek veya &#231;ok satırlı VBScript kodları ile başında tek tırnak olan icra edilmeyen, yorum satırlarını g&#246;r&#252;yorsunuz. HTML etiketinin i&#231;ine g&#246;m&#252;lm&#252;ş VBScript kodu ise HTML’in <FONT> etiketinde yer alıyor: <font size = <%=fontBoyut%>>. Burada karşılaştığımız “<%=” ifadesi, ASP’ye, “Bu değişkenin değerini bul ve tam buraya yaz!” dememizi sağlıyor. Bu ifade daha sonra yakından ele alacağımız Response.Write metodunun kısaltılmış halidir. HTML etiketinin i&#231;ine yazdığımız VBScript b&#246;l&#252;m&#252;n&#252;n kendi sınırlayıcı işaretlerinin yine de kullanıldığına dikkat edin.
Bir iki yazım kuralı
VBScript komutları, anahtar kelimeleri ve değişken adlarının b&#252;y&#252;k harf-k&#252;&#231;&#252;k harf olması &#246;nemli değildir. Yani yukarıdaki ifadelerden birini şu bi&#231;imlerden birinde yazabilirdik; kodumuz yine de &#231;alışırdı:
For fontBoyut = 1 To 7
FOR FONTBOYUT = 1 TO 7
for fontboyut = 1 to 7
Fakat... Bu demek değildir ki, VBScript ile kodlamanın kendi gelenekleri yok! VBScript’&#231;iler genellikle komutların birinci harfini b&#252;y&#252;k yaparlar: For gibi. Değişken adlarında ise kendinize anlamlı gelen bir bi&#231;im tutturabilir ve &#246;yle devam edebilirsiniz.
Eğer bir kod satırı &#231;ok uzun geliyor ve daha sonra anlaşılması imkansız derecede uzuyorsa, bu satırı alt &#231;izgi (_) ile aşağı satırda devam ettirebilirsiniz. &#214;rnek:
<%
If degisken1 > 1 And _
değisken1 < 10 Then
%>
Değişkenler
Programcılıkta işlemlerimizi değişkenlerle yaparız. değişkeni bir kap gibi d&#252;ş&#252;nebilirsiniz. S&#246;zgelimi “G&#252;n,” değişkenin adı ise bu değişkenin değeri Pazar, Pazartesi, Salı, vd., olabilir. Her değişken, t&#252;r&#252;ne g&#246;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 yapabilir.
VBScript’te, bir &#231;ok başka bilgisayar programlama dilinden farklı olarak değişkenlerin tanımlanması veya “beyan edilmesi,” “boyutlandırılması” gerekmez. Belirtilmemiş, &#246;nceden tanımlanmamış bir değişkene değer atamaya kalkarsanız, VBScript bunu m&#252;kemmel şekilde kabul eder. Fakat bu k&#246;t&#252; bir programcılıktır. İyi programcılık değişkenlerin &#246;nceden beyan edilmesini gerektirir. Bunu DIM komutuyla yaparız. DIM, Dimension (boyutlandır) kelimesinden kısaltılmıştır. Pek akıllıca g&#246;r&#252;nmese de bu komut, bilgisayarın değişken yeri olarak bir bellek alanının boyutunu belirtmesini sağlar.
&#214;rnekler:
<%
DIM Gun, Ay, Ogrenci, Not
Gun = “Pazartesi”
Ay = “Ocak”
Ogrenci = “Necip”
Not = 5
%>
Şimdi burada Gun, Ay, Ogrenci, Not adıyla d&#246;rt değişken oluşturduğumuzu ve bunlara sırasıyla “Pazartesi,” “Ocak,” “Necip” ve “5” değerlerini atadığımızı g&#246;r&#252;yorsunuz. Bu noktada VBScript yorumlayıcısına sorsanız, “Peki, s&#246;yle bakalım, Gun değişkeninin değeri nedir?” diye, yorumlayıcı size “Bunu bilmeyecek ne var? Elbette Pazartesi’dir!” derdi. Belki bu noktada siz de kendi kendinize “Pazartesi, Ocak ve Necip kelimeleri tırnak i&#231;inde iken, acaba 5 rakamı neden tırnak i&#231;inde değil?” diye soruyorsunuz. G&#252;zel soru. Ama cevabı i&#231;in biraz bekleyeceksiniz.
Değişken isimleri, mutlaka harfle başlamalıdır; i&#231;inde noktalama işaretleri bulunamaz ve uzunluğu 255 karakteri ge&#231;emez.
-----------------
K&#246;t&#252; programcılığı &#246;nlemek i&#231;in!
Değişkenleri tanımlamadan kullanmak “k&#246;t&#252; programcılıktır” demek, ilerde kendi başınıza elinizle program hatası getirirsiniz demektir. Daha sonra &#246;rneklerini g&#246;receğiz; ASP, sitemize giren bir ziyaret&#231;iye bir oturum (Session) a&#231;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&#231;in, bu değişkenin değerinin yeni sayfada değişmemesi gerekir. ASP programı yazarken, bazen gelişi-g&#252;zel değişkenlere değer atayabilirsiniz. Neden? O anda aklınıza değişken adı olacak kelime gelmediği i&#231;in! Bu değişken adını daha &#246;nce kullanmışsanız ve i&#231;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ığı &#246;nlemek i&#231;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 &#231;ok yarayacağı bir diğer nokta, kodda değişken adını yazarken hata yapmanızı &#246;nlemektir. VBScript sizin hata yaptığınızı bilemeyeceği i&#231;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&#246;r&#252;nen işlemler yapar, fakat beklediğiniz sonucu elde edemezsiniz. OPTION EXPLICIT, yanlış yazdığınız değişkeni yeni değişken sayarak &#246;nceden tanımlanmamış değişken kullandığınızı d&#252;ş&#252;nerek, duracaktır.
Peki, ş&#246;yle bir değişken tanımlama acaba ortaya nasıl bir değişken &#231;ıkartır:
<%
DIM Gunler(31), Aylar(12), Ogrenciler(210), Notlar(10)
%>
Bu y&#246;ntemle oluşturduğumuz kodlarla elde edilecek “kaplar,” birden fazla değer tutabilir. Yani:
<%
DIM Gunler(7), Aylar(12), Ogrenciler(21), Notlar(10)
Gunler(1) = “Pazartesi”
Aylar(3) = “Mart”
Ogrenciler(12) = “Necip”
Notlar(5) = 5
%>
Bu durumda i&#231;inde 7 ayrı değişken tutabilecek olan G&#252;nler değişkeninin 1 numaralı olanının değeri “Pazartesi,” 12 değer tutabilecek olan Aylar değişkeninin 3 numaralı olanının değeri “Mart,” 21 ayrı değer tutabilecek olan Ogrenciler değişkeninin 12 numaralı olanının değeri “Necip” ve nihayet 10 ayrı değer tutabilecek olan Notlar değişkeninin 5 numaralı olanının değeri ise 5 olacaktır. B&#246;yle, birden fazla değer tutabilen değişkenlere Dizi Değişken veya Array denir.
Array Fonksiyonu
VBScript’in kullanılmaya hazır bir &#231;ok fonksiyonu vardır; bunlardan biri olan Array ile, kolayca dizi değişken oluşturabiliriz.
Diyelim ki, Gunler(7) dizi-değişkenini g&#252;n adları ile doldurarak oluşturmak istiyoruz:
<%
Dim Gunler = Array (“Pazartesi” , “Salı” , “&#199;arşamba” , “Perşembe” , “Cuma” , “Cumartesi”, “Pazar”)
%>
ile hem dizi-değişkeni oluşturabiliriz; hem de değerlerini atayabiliriz.
Bu suretle oluşturduğumuz dizi değişkenin &#252;yelerine daha sonra sıra numaraları ile atıfta bulunabilirsiniz. &#214;rneğin:
<%=Gunler(6)%>
bize Pazar’ı verir. Neden? &#199;&#252;nk&#252; hayatlarının b&#252;y&#252;k b&#246;l&#252;m&#252;n&#252; penceresiz ortamlarda ge&#231;iren kişiler olan dil tasarımcıları, sayı saymaya biz normal insanlar gibi 1’den değil 0’dan başlarlar; dolayısıyla Gunler dizi-değişkeni Gunler(0)’dan başlar!
Şimdi, aklınıza şu soru gelebilir: Dizi değişken oluşturacağımıza, neden “ogrenci1,” “ogrenci2,” “ogrenci3” diye değişkenler oluşturmuyoruz ve bunlara değerler atamıyoruz? K&#246;t&#252; soru! Dolayısıyla cevabını hemen verelim. Dizi değişkenlerde bir değişkene numarasıyla atıfta bulunabilirsiniz. Ve numara yerine bir başka değişkeni kullanabilirsiniz. &#214;rneğin, OgrenciNo değişkeninizin değeri 12 ise
<%
....
If Ogrenciler(OgrenciNo) = “Necip”
...
%>
şeklinde bir d&#246;ng&#252; ile aradığınız &#246;ğrencinin Necip olup olmadığını sınayabiliriz. (D&#246;ng&#252;lere birazdan geliyoruz!)
Başka programlama dillerine &#246;zellikle Visual Basic’e aşina olanların aklına ş&#246;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&#252;merik, karakter değerler) denir. Programlama dillerinde bir de matematik işlem yapmaya elverişli değişken t&#252;r&#252; vardır: Sayı (Number). VBScript, bir değişkene alfan&#252;merik (karakter, metin) olarak atadığınız değeri &#231;ift tırnak i&#231;ine almanızı ister. S&#246;zgelimi Ogrenci(12) değişkeni i&#231;in Necip değerini atamak istiyorsunuz: Necip kelimesini &#231;ift tırnak i&#231;ine almak zorundasınız. Sayı olarak kullanacağınız değerleri ise tırnak i&#231;ine almazsınız. (Sayı olarak kullanacağınız değerlerin sadece rakam olabileceğini s&#246;ylemek gerekmez!) Fakat, işleri karıştıran nokta, VBScript a&#231;ısından değişken t&#252;r&#252; diye bir şey olmamasıdır. Visual Basic, k&#252;&#231;&#252;lt&#252;l&#252;p Script dili haline getirilirken, değişken t&#252;r&#252; &#246;zelliği alınmayınca, ortaya işleri karıştıran (veya kolaylaştıran) b&#246;yle bir durum &#231;ıkmış bulunuyor. Karışıklık, &#231;ift tırnak i&#231;inde verdiğiniz bir değeri matematik işlemde kullanmaya kalktığınızda karşınıza &#231;ı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&#246;yleyerek, duracaktır. VBScript’in bu eksikliğini gidermek i&#231;in bazı ASP programcıları değişken adlarının &#246;n&#252;ne karakter-dizileri i&#231;in “str” harflerini koyarlar: strAy, strOgrenciler, gibi.
İsterseniz, VBScript’in karakter-dizisi ve sayı değişkenleri nasıl ayırt ettiğini veya etmediğini bir ka&#231; &#246;rnekle g&#246;relim. Şu kodu yazarak, &#231;alıştırın:
<% Option Explicit %>
<HTML>
<%
Dim Degisken(2), Toplam
Degisken(1) = "Necip"
Degisken(2) = "Dayanır"
Toplam = degisken(1) + Degisken(2)
%>
<% =Toplam %>
</HTML>
Sonu&#231;: “NecipDayanır” değil mi? (Arada boşluk olmamasına aldırmayın şimdilik!) Peki; şimdi Degisken(1) değeri olarak tırnak i&#231;ine alarak 5, Degisken(2) değeri olarak yine tırnak i&#231;inde 10 yazın. Programı tekrar &#231;alıştırın. Sonu&#231;? 510!? Peki; tırnakları kaldırın 5 ve 10’un &#231;evresinden. Sonu&#231;? 15. Oh, neyse! Bir an i&#231;in VBScript matematik bilmiyor sandık! Bu durum VBScript’in matematik bilgisinin kıtlığından değil, tırnak i&#231;indeki değerlerin, VBScript ayrım yapmıyor bile olsa, karakter-dizisi (String) iken toplama işleminde ard 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&#231;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ı &#231;alıştırın. Ne sonu&#231; aldınız?
VBScript’in kullandığı tek t&#252;r değişkene variant denir. Variant, karakter-dizini (String) de olabilir, sayı (Number) da. Fakat bir variant’ın i&#231;indeki değer, veri olarak nitelendiğinde şu t&#252;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&#252;zen noktalı değer denilen veri t&#252;r&#252;d&#252;r. Pozitif sayılar i&#231;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: &#214;nceden belirlenmiş bi&#231;imlerde tarih ve zaman bilgisi i&#231;erir.
Empty: Tanımlanmış ancak hen&#252;z değer atanmamış (boş) değişken t&#252;r&#252;d&#252;r.
Error: Programın hata mesajlarını ve hata değerlerini tutar.
Integer: Noktalık b&#246;l&#252;m i&#231;ermeyen tamsayı verilerdir; değeri -32.768 ile +32.767 arasında olabilir.
Long: Noktalık b&#246;l&#252;m i&#231;ermeyen tamsayı verilerdir; değeri -2.147.483.648 ile 2.147.483.648 arasında olabilir.
Null: İ&#231;inde veri bulunmamak &#252;zere tanımlanmış değişkenlerdir.
Object: Windows OLE Nesnelerini tutmak &#252;zere tanımlanmış değişkenlerdir.
Single: Y&#252;zen noktalı değer denilen veri t&#252;r&#252;d&#252;r. Pozitif sayılar i&#231;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
Sabit Değerler
VBScript’te bir kere verdiğiniz değeri hi&#231; değişmeyen unsurlar (değişken diyemezdik, değil mi?) vardır. Sabit değer, b&#252;t&#252;n ASP sayfası boyunca (hatta isterseniz, b&#252;t&#252;n site, yani Uygulama boyunca) değişmeden kalır. Bu değerleri Const (constant, sabit kelimesinden t&#252;retilme) komutuyla belirtiriz:
Const DolarDeger = 560780
Const SirketinAdi = “Web Tasarım ve Site Onarım A.Ş.”
Const Slogan = “Siteler ve Kırık Kalpler Onarılır”
VBScript’te İşlemciler (Operat&#246;rler)
Bilgisayar Operat&#246;r&#252; ile program Operat&#246;r&#252; arasında fazla bir fark yoktur. Her ikisi de verdiğiniz değerleri ya karşılaştırır bir sonu&#231; bulurlar; ya da bu değerlerle aritmetik işler yapar ve bir sonu&#231; ortaya &#231;ıkartırlar. Bilgisayar Operat&#246;r&#252; daha sonra bu iş i&#231;in sizden para ister; program operat&#246;r&#252; istemez! VBScript’in operat&#246;rleri ve yaptıkları işler ş&#246;yle sıralanır:
Operat&#246;r İşlev Sınıfı
+ Toplama Aritmetik
- &#199;ıkartma
* &#199;arpma
/ B&#246;lme
^ &#220;ss&#252;n&#252; alma
\ Tamsayı b&#246;lme
Mod Mod&#252;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&#252;y&#252;k veya k&#252;&#231;&#252;k olduğunu sınar (and kelimesi var)
>= and <= Bir değişkenin diğerinden b&#252;y&#252;k veya eşit, veya k&#252;&#231;&#252;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&#231;in hangi koşulun oluşması gerektiğini sınar
Not Bir ifadeyi negatif hale getirir
XoR Sadece bir koşulun 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&#231;in kullanım sıraları &#246;nemlidir. Bunu bir &#246;rnekle a&#231;ıklayalım. 100’den 6’yı &#231;ıkarmak ve sonucu 2’ye b&#246;lmek istiyorsunuz; sonu&#231; 47 olacaktır. Yani: 100-6/2. Değil mi? Bu işlemin VBScript’teki sonucu 97 olacaktır. &#199;&#252;nk&#252;, VBScript &#246;nce 6’yı 2’ye b&#246;lecek ve elde ettiği sonucu 100’den &#231;ıkartacaktır. VBScript’te, aritmetik işlemlerin yapılma sırası ş&#246;yledir:
Operat&#246;r İşlev &#214;ncelik
+ Toplama 3
- &#199;ıkartma 3
* &#199;arpma 2
/ B&#246;lme 2
^ &#220;ss&#252;n&#252; alma 1
VBScript ile hesap işlemi yaparken, aritmetik işlem sırasını karıştırarak hatalı sonu&#231; almamak i&#231;in sık sık parantez kullanmak yerinde olur. Yukarıdaki &#246;rnek ş&#246;yle yazılabilirdi: (100-6)/2. Tabii amacınız 100’&#252; 6/2’ye b&#246;lmek ise bu işlemi ş&#246;yle yazmalısınız: 100-(6/2).
VBScript’de Program Kontrol&#252;
İster Script diliyle, ister ger&#231;ek programlama diliyle yazılsın, bir bilgisayar programının varlık sebebi, &#231;eşitli durumları değerlendirerek, belirli durumlarda belirli kararlar verebilmesidir. Bunu programın kontrol &#246;ğelerini kullanarak yaparız. Programlar, bu &#246;ğeler sayesinde karşılaştırma yaparlar; belirli durumların oluşup oluşmadığını sınarlar; veya belirli bir durumun oluşmasına veya sona ermesine bağlı olarak bir iş yaparlar veya yapmazlar. Bunu sınamalarla (koşullu ifadelerle) veya d&#246;ng&#252;lerle sağlarız. Kimi zaman da, programa (programın mantığı &#231;er&#231;evesinde) istediğimiz anda yapmakta olduğu işi durdurarak, başka bir işi yapmasını bildirebiliriz. Bunlara da S&#252;re&#231;ler (veya Prosed&#252;rler) denir. (Adındaki Basic’e bakarak, VBScript’i basit bir dil sanmıyordunuz, umarım!)
Mantıksal Sınamalar
VBScript’te programın karar vermesini sağlayan ilk kontrol &#246;gesini “eğer ... ise... yap!” şeklinde &#246;zetleyebiliriz. VBScript bu işlemi iki ayrı ifadeyle yaparız:
If.. Else
VBScript’in vereceğiniz bir durumun bulunup bulunmadığını sınamasını sağlar. Genel yazım kuralı ş&#246;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 &#246;rnekle ifade edelim: Eğer saat 12’den &#246;nce ise sayfaya “G&#252;naydın” yazdır; saat 12’den sonra ise “T&#252;naydın” yazdır.
Fakat burada bir eksiklik var: Saat 18’den sonra ise sayfaya “İyi akşamlar!” yazdırmamız daha doğru olmaz mı? If d&#246;ng&#252;s&#252; kendi i&#231;inde sınırsız Elseif (ikinci şartlı d&#246;ng&#252
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
imkanı vererek bize bunu sağlar. Her Elseif’i yeni bir If gibi d&#252;ş&#252;nebilirsiniz. İşte şu senaryoyu ger&#231;ekleştirecek kod &#246;rneği (hosgeldiniz01.asp):
<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>
<BODY>
<H2>
<CENTER>
<%
If Hour(Now) <12 Then
Response.Write "G&#252;naydın! "
ElseIf Hour(Now) >= 18 Then
Response.Write "İyi akşamlar! "
Else
Response.Write "T&#252;naydın! "
End If
Response.Write "<BR>"
Response.Write "Site Onarım Sitesine Hoşgeldiniz"
%>
</CENTER>
</H2>
</BODY>
</HTML>
Bu programı &#231;alıştırdığınız zaman, &#231;alıştırdığınız saate g&#246;re sayfadaki selamın değiştiğini g&#246;receksiniz. (Bu &#246;rnekte, sadece şartlı d&#246;ng&#252; işlemi yapmıyoruz; fakat aynı zamanda Hour(Now) fonksiyonu ile tanışıyoruz ve sayfadaki b&#252;t&#252;n unsurları ASP y&#246;ntemiyle yazdırıyoruz! Fakat şimdilik bu iki unsurun &#252;zerinde de durmayın.) Programımız nasıl &#231;alışıyor? Yukarıda başka vesile ile VBScript’in kullanılmaya hazır fonksiyonları vardır, demiştik. Bunlardan biri de o andaki saati ve tarihi bildiren Now() fonksiyonudur. Bu fonksiyondan d&#246;nen değerle bu andaki saati &#246;ğreniyoruz; ve bunu &#246;nce 12 ile karşılaştırıyoruz. Fonksiyondan d&#246;nen değer, eğer 12’den k&#252;&#231;&#252;kse, programımız Response (Karşılık) Nesnesi’nin .Write Metodu’nu kullanarak (Nesneler ve Metodlar meselesi &#252;zerinde de durmayın!) ziyaret&#231;inin Browser penceresine “G&#252;naydın” yazdırıyor.
D&#246;nen Değer
Fonksiyonlar, kendilerini g&#246;reve &#231;ağıran VBScript komutlarına ve işlemlerine bir değer sunarak karşılık verirler. Buna fonksiyondan d&#246;nen değer denir. Yani diyelim ki Now() fonksiyonunu g&#246;reve &#231;ağırdınız. Bu fonksiyon derhal işletim sisteminden saati ve tarihi &#246;ğrenerek kendisini g&#246;reve &#231;ağıran işleme bildirir. Daha sonra VBScript’in kullanılmaya hazır diğer bir &#231;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 bimemiz 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 icra edecektir. Yani eğer saat 12’den k&#252;&#231;&#252;k değilse, ElseIf satırı icra edilecektir. ElseIf de tıpkı If gibi işlediği i&#231;in bu kez yeni bir sınav yapılacak ve saatin 18’e eşit veya b&#252;y&#252;k olup olmadığı sınanacaktır. Eğer saat 18’e eşit veya b&#252;y&#252;kse, (sınav sonucu doğru ise) ilk satır icra edilecek ve ziyaret&#231;inin Browser penceresine “İyi akşamlar!” yazdırılacaktır. 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&#252;&#231;&#252;k değilse, 18’den k&#252;&#231;&#252;k veya 18’e eşit değilse, yani 12 ile 17 arasında ise, ekrana “T&#252;naydın” yazılacaktır.

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:35   #3
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Select Case
VBScript’in bir diğer duruma bakarak karar verme ifadesi, Select Case (Durum Se&#231
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
yapısıdır. Bu kontrol &#246;ğesinin nasıl &#231;alıştığını ş&#246;yle &#246;zetleyebiliriz:
Durum Se&#231; (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&#231;meyi Bitir
VBScript, verdiğiniz durum listesine veya i&#231;inde &#231;eşitli değerler bulunan 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. Yukarıdaki sayfamızı bu kez bu yapıyı kullanarak yazalım (hosgeldiniz02.asp):
<HTML>
<HEAD>
<TITLE>ASP ILE SAATE G&#214;RE 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>
<BODY>
<H2>
<CENTER>
<%
Select Case Hour(Now)
Case 0,1,2,3,4,5,6,7,8,9,10,11
Response.Write "G&#252;naydın!"
Case 12,13,14,15,16,17
Response.Write "T&#252;naydın"
Case Else
Response.Write "İyi Akşamlar!"
End Select
Response.Write "<BR>"
Response.Write "Site Onarım Sitesine Hoşgeldiniz"
%>
</CENTER>
</H2>
</BODY>
</HTML>
Select Case komutuna, i&#231;indeki değerleri “durum” sayacağı dizi veya değişken olarak VBScript’in kullanılmaya hazır fonksiyonlarından Hour(Now)’ı veriyoruz. Bu fonksiyondan, 0 ile 24 arasında bir değer d&#246;necektir. Bu değer Select Case i&#231;in bir durum demektir. Select Case, bu değer ile altta sıralanan Case’leri karşılaştıracak ve elindeki değer hangi Case’i tutuyorsa ona ait komutları icra edecektir. Sonuncu Case’e l&#252;tfen dikkat edin: Burada Case olarak Else (başka) veriliyor. Bu bizi, 17’den 23’e kadar olan saatleri sıralamaktan kurtarır. 0’dan 11’e kadar olan saatlerle 12’den 17’ye kadar olan saatleri sıraladığımıza g&#246;re başka hangi saat olursa olsun, ziyaret&#231;imize “İyi akşamlar!” dileyebiliriz. Eğer 24’den sonra ve 04’den &#246;nce ziyaret&#231;inize “İyi geceler!” dilemek isterseniz, bu programı nasıl değiştirirdiniz?
D&#246;ng&#252;ler
Sınama bir programın akışını kontrol i&#231;in kullanacağımız birinci en &#246;nemli unsur ise, d&#246;ng&#252; de ikinci en &#246;nemli unsur sayılır. Hatta programcının tembellik katsayısına g&#246;re, belki de birinci en &#246;nemli unsuru bile sayılabilir! &#199;&#252;nk&#252; D&#246;ng&#252; (Loop) programa, bir işi biteviye yaptırmaya yarar. Tabi&#238; bu iş sonsuza kadar s&#252;recek olursa, buna Endless Loop (Sonsuz D&#246;ng&#252
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
denir; en iyi program ve Windows dondurma y&#246;ntemidir! VBScript’te kullanabileceğimiz d&#246;ng&#252; y&#246;ntemleri şunlardır:
For..Next d&#246;ng&#252;s&#252;
Programın bir işi belirli kere yapmasını istiyorsak, ona yapacağı işi bir saya&#231; değişkeniyle birlikte, For d&#246;ng&#252;s&#252;yle bildiririz:
For saya&#231; = başlangı&#231; To son Step adım
yapılacak işler
Next
Burada, “saya&#231;” yerine istediğiniz bir değişken adını, “başlangı&#231;” yerine sayacın başlamasını istediğiniz sayıyı, “son” yerine sayacın durmasını istediğiniz sayıyı, ve “adım” yerine, sayacın ka&#231;ar-ka&#231;ar artmasını istediğinizi yazabilirsiniz. En sondaki Next deyimi ise d&#246;ng&#252;n&#252;n bir sonraki adıma ge&#231;mesini sağlar. Bu adımda saya&#231;, Step kelimesi varsa, karşısındaki değer kadar arttırılır ve yapılacak işler yeniden yapılır. Bir &#246;rnek yapalım (gunler.asp):
<HTML>
<HEAD>
<TITLE>ASP ILE G&#220;NLERI SAYMA</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>
<H2>
<CENTER>
<%
Dim Gunler
Gunler = Array("Pazartesi", "Salı", "&#199;arşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar")
For sayac = 0 to 6
Response.Write Gunler(sayac)
Response.Write "<BR>"
Next
%>
</CENTER>
</H2>
</BODY>
</HTML>
Bu ASP kodunda, Gunler adıyla bir dizi-değişken oluşturuyoruz ve bu değişkenin yedi hanesine, g&#252;nlerin adlarını atıyoruz. Sonra, sayac adlı sayacı 0’dan 6’ya kadar arttırıyoruz (Bir saya&#231; birer birer artsın istersek, Step b&#246;l&#252;m&#252;ne adım sayısı yazmayız). Şimdi kendimizi bir an i&#231;in VBScript’in yerine koyalım ve birinci adımda yapacağımız işi d&#252;ş&#252;nelim: “Hmm.. Programcı bey, benim sayac’ı &#246;nce 0 yapmamı istiyor; peki sayac 0 olsun. Sonra, Gunler dizi-değişkeninden saya&#231; değeri ile aynı sayıyı taşıyan değişkeni alıp, bunu ziyaret&#231;inin Browser’ına yazmamı istiyor. Peki, Gunler(0) ne imiş, bakalım. Hmm Gunler(0) Pazartesi imiş. o halde ziyaret&#231;inin ekranına bir Pazartesi kelimesi yazalım. Sonra bir de <BR> kodu yazmamı istiyor. Onu da yazalım.. Şimdi, sırada Next var. Yani bir sonraki adıma devam edeceğiz. Step değeri olmadığına g&#246;re sayacı bir arttırayım. Saya&#231; b&#246;ylece 1 oldu. ...”
Ve b&#246;ylece VBScript, sayacın son değeri olan 6’ya ulaşıncaya kadar, biteviye Gunler dizi-değişkeninden sayacın değerine g&#246;re değer se&#231;erek ve bunu ekrana yazdırarak, işini yapacaktır. Bu bakımdan VBScript, g&#252;venilir ve &#231;alışkan bir arkadaştır!
While...Wend
Ne var ki, program mantığı bazen bize b&#246;yle a&#231;ık ve se&#231;ik bir saya&#231; kurma imkanı vermez. Saya&#231; olarak kullanacağımız değer, programın başka bir b&#246;l&#252;m&#252; tarafından &#252;retiliyor olabilir. Veya bu değer ziyaret&#231;i tarafından belirlenmiş olabilir. &#214;zetle yapılmasını arzu ettiğimiz işin ancak saya&#231; bir değerden azsa, &#231;oksa veya eşitse yapılmasını, bu durum değişirse durmasını isteyebiliriz. Bunu While (..iken) komutuyla yapabiliriz. While d&#246;ng&#252;s&#252;n&#252; kullandığımız zaman sayacı bizim arttırmamız gerekir.
S&#246;zgelimi, yukarıdaki programın 7 g&#252;n&#252;n t&#252;m&#252;n&#252; ekrana yazmasını değil de, mesela g&#252;n sayısı 5’den k&#252;&#231;&#252;k ise yazmasını istiyor olabiliriz. Bu durumda kodumuzda For.. Next arasında kalan b&#246;l&#252;mde şu değişikliği yapabiliriz:
While sayac <= 5
Response.Write Gunler(sayac)
Response.Write "<BR>"
sayac = sayac + 1
Wend
Burada While d&#246;ng&#252;s&#252;n&#252;n Wend kelimesiyle sonlandırıldığına dikkat edin. While satırındaki sayacı değiştirdik, programın saya&#231; 5’den k&#252;&#231;&#252;k veya 5’e eşit iken işlemesini sağladık. For’dan farklı bir diğer ifade ise sayacı arttıran “sayac = sayac + 1” ifadesidir. Bu ifade, ilk bakışta garip g&#246;r&#252;nebilir. Fakat bilgisayar a&#231;ısından bu “sayac’ın o andaki değerini al, 1 ile topla ve bulduğun yeni değeri sayacın mevcut değerinin yerine yaz!” demektir. VBScript sayacı bir arttırdıktan sonra &#246;nce While satırındaki şartın ger&#231;ekleşip ger&#231;ekleşmediğine bakar; ger&#231;ekleşmiş ise Wend’i izleyen ilk satıra gider; ger&#231;ekleşmemişse While d&#246;ng&#252;s&#252;n&#252;n i&#231;indeki işi yapmaya devam eder. Kendinizi VBScript’in yerine koyup, birinci ve ikinci adımda nasıl d&#252;ş&#252;nd&#252;ğ&#252;n&#252;z&#252; ve ne iş yaptığınızı s&#246;yleyebilir misiniz?
Do..Loop
Do (Yap) komutu ile kuracağımız d&#246;ng&#252;ler iki ayrı t&#252;rde olabilir: bu d&#246;ng&#252; ile bir dizi komutu, bir koşul doğru iken veya doğru oluncaya kadar yaptırabiliriz. Bu y&#246;ntemlerden her biri iki ayrı şekilde yazılabilir. Bir koşul doğru iken bazı işlerin biteviye yapılmasını istiyorsak, Do While y&#246;ntemini kullanırız:
Do While koşul
koşul doğru iken yapılacak işler
Loop
Bu ifade ile VBScript koşul doğru olduğu s&#252;rece istediğimiz işi yapacaktır. Buradaki Loop kelimesi, d&#246;ng&#252;n&#252;n başa d&#246;nmesini sağlar. Bu y&#246;ntemden şu şekilde de yararlanabiliriz:
Do
koşul doğru iken yapılacak işler
Loop While koşul
Burada, Loop komutu şartın h&#226;l&#226; doğru olup olmadığını sınar ve doğru ise verilen işleri yapar; artık değilse bir sonraki satıra ge&#231;er.
D&#246;ng&#252;n&#252;n bir şart ger&#231;ekleşinceye kadar bir işi yapmasını ise Do Until y&#246;ntemiyle sağlarız. Bu durumda d&#246;ng&#252; ş&#246;yle yazılır:
Do Until koşul
koşul ger&#231;ekleşinceye kadar yapılacak işler
Loop
Bu ifade ile VBScript koşul doğru oluncaya kadar istediğimiz işi yapacaktır. Buradaki Loop kelimesi, d&#246;ng&#252;n&#252;n başa d&#246;nmesini sağlar. Bu y&#246;ntemden şu şekilde de yararlanabiliriz:
Do
koşul ger&#231;ekleşinceye kadar yapılacak işler
Loop Until koşul
Burada, Loop komutu şartın hen&#252;z ger&#231;ekleşip ger&#231;ekleşmediğini sınar ve hen&#252;z ger&#231;ekleşmemişse verilen işleri yapar; ger&#231;ekleşmişse bir sonraki satıra ge&#231;er.
Visual Basic metinlerinde bu d&#246;ng&#252;ye verilen klasik &#246;rnek, bilgisayara yazı-tura attırmaktır! Biz de ASP sayfamıza yazı-tura attırabiliriz. Bunun i&#231;in şu kodu yazın ve yazi-tura.asp adıyla kaydedin:
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE YAZI-TURA</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>
<H2>
<CENTER>
<%
Dim ParaAt, Yazi, Tura, Atis
Randomize
Yazi = 0
Tura = 0
Atis = 0
Do While Tura < 3
atis = Atis + 1
ParaAt = Int(Rnd * 2) + 1
If ParaAt = 1 Then
%>
Yazı!<P>
<%
Yazi = Yazi + 1
Else
%>
Tura!<P>
<%
Tura = Tura + 1
End If
Loop
%>
3 Tura getirebilmek i&#231;in parayı <%=Atis%> kere atmak gerekti!
</HTML>
Bu kodda şu ana kadar karşımıza &#231;ıkmamış olan Randomize (Tesad&#252;f&#238; sayı bulma) Fonksiyonu’nun kullanıldığını g&#246;r&#252;yoruz.
Tesad&#252;f&#238; Sayı
Bilgisayarın matematik işlemlerde, &#246;zellikle istatistik hesaplamalarla kullanılması tesad&#252;f&#238; (rastlantısal) sayı &#252;retmeyi gerekli kılmıştı. Fakat daha sonra bilgisayar oyunları bu işlemi adeta zorunla hale getirdi. Rastlantısal sayı, bir dizide tekrar etmesi belirli bir d&#252;zene tabi olmayan sayı demektir. Bilgisayar yokken, tesad&#252;f&#238; sayı tabloları matematik&#231;iler tarafından uzun uğraşlarla &#252;retilirdi.
VBScript, bu ama&#231;la Visual Basic’in Randomize ve Rnd komutlarını almıştır. Randomize, tesad&#252;f&#238; sayı &#252;retme s&#252;recini başlatır; Rnd da bu sayıyı size verir. Kodunuzda bir yerde Rnd kullanacaksınız, ondan &#246;nce bir yerlerde mutlaka Randomize komutunun yer alması gerekir. Bunun bir uygulaması şu olabilir:
<% OPTION EXPLICIT %>
<HTML>
<%
Dim TesadufiSayi
Randomize
TesadufiSayi = Rnd
%>
<%=TesadufiSayi%>
</HTML>
Bu dosyayı tesaduf.asp adıyla kaydedip &#231;alıştırın; Browser’ın Yenile d&#252;ğmesini her tıkladığınızda ekranda yeni bir sayı g&#246;receksiniz. Bu sayıların rastlantısal olması, bir kere daha gelmeleri i&#231;in hi&#231; bir kural (&#246;rneğin her rakamın 123 kerede bir gelmesi veya 1 milyon 245 bin kerede bir gelmesi gibi) bulunmamasıdır. İşin tekniğini bilmek isterseniz, VBScript, her Rnd komutu icra edildiğinde bilgisayarın saatini &#246;ğrenir; i&#231;inden se&#231;eceği bir rakamı son derece karmaşık bir form&#252;lden ge&#231;irerek size bir rakam verir. bu rakam daima 0 ile 1 arasında olur. “(Rnd*6)+1” form&#252;l&#252; bize 1 ile 6 arasında (yani bir zarın değerlerinden her hangi biri), “(Rnd*13)+1” form&#252;l&#252; ise 1 ile 13 arasında (yani bir iskambil destesindeki kağıt değerlerinden herhangi biri) bir değer verir. Fakat dikkat: bu değerler tam sayı değildir!
Programımızın b&#252;t&#252;n işlemi Do d&#246;ng&#252;s&#252; b&#246;l&#252;m&#252;nde yapılıyor ve bilgisayarın bir tesad&#252;f&#238; sayı &#252;retmesi esasına dayanıyor. Bunu Randomize ve Rnd fonksiyonları ile yapıyoruz. Rnd’un verdiği tesad&#252;f&#238; rakamı, iki ile &#231;arpıyor ve &#231;ıkan sayıyı 1 ile topluyoruz; b&#246;ylece ortaya 1’den b&#252;y&#252;k 3’den k&#252;&#231;&#252;k bir kesirli rakam &#231;ıkmış oluyor (Neden?). Bu rakamı Int() fonksiyonundan ge&#231;irerek, kesirinden kurtarıyoruz.
Tam Sayı Elde Etmek i&#231;in: Int ve Round
Rnd fonksiyonu ile ilgili yukarıdaki &#246;rneği yaptıysanız, d&#246;nen sayının 0 ile 1 arasında, yani daima kesirli olduğunu g&#246;rm&#252;ş olmalısınız. Bazen bizim sayfalarımızdaki hesaplamalar veya veritabanından alınan değerler de kesirli olabilir. &#214;rneğin &#246;ğrencilerin not ortalamalarını hesaplattırırken VBScript size sonu gelmez kesirler verecektir. Oysa &#231;oğu zaman bu rakamların ya yukarı “yuvarlanması”, ya da sadece tam sayı b&#246;l&#252;m&#252; gerekir.
VBScript’te Int() fonksiyonu, bize bir sayının tam sayı b&#246;l&#252;m&#252;n&#252; verir. Diyelim ki elimizdeki KesirliSayi değişkeninin değeri 123,234567 olsun.
Tamsayi = Int(KesirliSayi)
işleminden sonra Tamsayi değişkenin değeri 123 olur.
Fakat kimi zaman bir sayının kesirli b&#246;l&#252;m&#252;n&#252; b&#246;yle bı&#231;akla kesip atmak işimize gelmeyebilir. Round() fonksiyonu, kesirli bir sayıyı yukarı veya aşağı “yuvarlayarak” tam sayı haline getirir. Bu kez ki elimizdeki KesirliSayi değişkeninin değeri 5,6 olsun.
Tamsayi = Int(KesirliSayi)
işleminden sonra Tamsayi değişkenin değeri 6 olur. Kesirli sayı 56,2 ise, Round() fonksiyonu bize 56 değerini verir.
Programımız, elde ettiği ve Paraat değişkenine kaydettiği bu sayı 1 ise, Yazı gelmiş sayıyor; ve Browser Penceresine “Yazı!” yazıyor. Bu arada yapılan atış sayısını kaydettiğimiz Atis ve gelen tura sayısını tuttuğumuz Tura değişkenlerinin değeri bir arttırılıyor. ParaAt değişkeninin değeri başka bir şeyse (ne olabilir?), programımız bu kez tura geldiğine h&#252;kmediyor ve Browser penceresine “Tura!” yazıyor. Do d&#246;ng&#252;s&#252;, Tura gelen atışların sayısı 3 oluncaya kadar devam ediyor. &#199;&#252;nk&#252; Do d&#246;ng&#252;s&#252;n&#252; While Tura < 3 (Tura 3’den az iken) deyimi ile &#231;alıştırıyoruz. Ve program sonunda 3 tura gelinceye kadar ka&#231; atış yaptığını yazıyor.
Bu ASP sayfası g&#246;r&#252;nt&#252;lenirken Browser’ın Yenile d&#252;ğmesini tıklarsanız, her seferinde Tura getirmek i&#231;in farklı sayıda atış yapmak gerektiğini; aynı sayıda atış yapılsa bile turalarla yazıların yerinin değiştiğini g&#246;receksiniz.
Dizi değişkenler i&#231;in d&#246;ng&#252;: For Each..Next
For..Next gibi &#231;alışan bu &#246;zel d&#246;ng&#252;, saya&#231; değeri kullanmaz, fakat bir dizi değişkenin b&#252;t&#252;n değerleri i&#231;in bir kere icra edilir. Dizi-değişkenler, VBScript ile yapacağımız işlemlerde &#246;nemli bir yer tutar. &#214;rneğin bir sınıftaki &#246;ğrencilerin veya m&#252;şterilerimizin listesi bir dizi değişkenin elemanları olabilirler. Yapmak istediğimiz işlem, dizi-değişkenin b&#252;t&#252;n elemanları i&#231;in tekrar edilecekse, For Each..Next d&#246;ng&#252;s&#252; daha elverişli olabilir. Bir dizi-değişkenin eleman sayısı ilerde değişirse ve siz d&#246;ng&#252;y&#252; For..Next ile kurmuşsanız d&#246;ng&#252;n&#252;n sayacı i&#231;in verdiğiniz i&#231;in alt ve &#252;st sınırı değiştirmek zorunda kalırsınız. Oysa For Each, ka&#231; kere tekrar edeceğine ilişkin değeri her zaman dizi-değişkenin elemanların sayısından alır. &#214;rneğin, b&#252;t&#252;n &#246;ğrencilerin listesini tutan &#214;grenciler dizi-değişkeninin b&#252;t&#252;n elemanlarının değerini ekrana yazdıralım:
For Each Ogrenci In Ogrenciler
Response.Write Ogrenci
Next
Burada “Ogrenci” Ogrenciler dizi-değişkeninde d&#246;ng&#252;n&#252;n her adımında okunan bir elemanın değerini tutar. For Each d&#246;ng&#252;s&#252; tarafından “okunmakta olan” dizi-değişkenin her bir değeri sırayla bu değişkene yazılacaktır. Bunu bir t&#252;r endeks değişken olarak d&#252;ş&#252;nebilirsiniz.
D&#246;ng&#252;y&#252; durdurmak isterseniz
Bir d&#246;ng&#252;den belirlediğiniz koşul ger&#231;ekleşsin-ger&#231;ekleşmesin &#231;ıkmanız gerekebilir. Bunu bir başka değişkendeki değişiklik zorunlu kılabilir. Bir d&#246;ng&#252;den &#231;ıkmak i&#231;in Exit (&#231;ık) ifadesini kullanabilirsiniz. Bu ifade, d&#246;ng&#252;n&#252;n yaptığı işler arasında, genellikle bir If deyimi ile birlikte yer alır. &#214;rneğin:
For sayac = 1 to 10
[..bir takım işler yap..]
If Degisken1 > Degisken 2 Then Exit For
[..bir takım işlere devam et..]

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:36   #4
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Next
Bu durumda For..Next d&#246;ng&#252;s&#252;, Degisken1’in değerinin Degisken2’den y&#252;ksek olduğunu belirlerse, derhal d&#246;ng&#252;y&#252; durdurarak, Next’ten sonraki satıra gidecektir.
Do d&#246;ng&#252;s&#252;nden ise Exit Do ile &#231;ıkababiliriz. Bu ifadenin kullanımı da Exit For gibi olur.
S&#252;re&#231;ler (Prosed&#252;rler)
VBScript’te programın akış kontrol&#252;nde kullanacağınız bir diğer grup ara&#231; ise &#246;rneğin Javascript veya Perl’de fonksiyon dediğimiz gruplandırılmış ve isimlendirilmiş işlem k&#252;meleridir. Bu k&#252;meler programın bir yerinde topluca dururlar ve programın başka bir yerinden isimleriyle &#231;ağrılırlar; veya bu k&#252;melere isimleriyle referans yapılır.
VBScript’te bu k&#252;melenmiş kod gruplarına Prosed&#252;r (S&#252;re&#231
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
denir. iki t&#252;rl&#252; olur: fonksiyon (Function) ve Subroutine (sab-rutin okunur; kısaca Sub diye yazılır ve sab diye okunur). Bu iki s&#252;re&#231; arasındaki başlıca fark, fonksiyondan kendisini &#231;ağıran komuta daima bir değer d&#246;ner; Sub’dan d&#246;nmeyebilir. Sub, yapacağı işi yapar ve programın kontrol&#252;n&#252; kendine atıf yapılan noktaya devreder. VBScript’de bir programa farklı yerlerde sık sık aynı işi yaptırıyorsak, bunu bir Sub ile yaptırırız; fakat programımıza bir değer gerekiyorsa, bu değeri bir fonksiyona hesaplattırırız. Her ikisi de kendilerine atıfta bulunan veya kendilerini g&#246;reve &#231;ağıran satırdan (komuttan, deyimden) verilebilecek değerleri kabul edebilirler.
Biraz karışık oldu; ama bunu ilerde ger&#231;ek ASP uygulamaları yazarken daha iyi anlayacağız. Şimdilik bir iki noktayı &#246;ylece &#246;ğrenmeye bakalım. Bir fonksiyonun adı, tıpkı bir değişken adı gibi, fonksiyonun &#252;rettiği değeri tutar; ve bu değer kendisini &#231;ağıran komuta verilir. Diyelim ki, programımızın &#231;eşitli noktalarında yazı-tura atıp, elde edilecek sonuca g&#246;re bir iş yapmak zorundayız. Bu ihtiyacın doğduğu yerde, yazı-tura komutlarını yazabiliriz. Ancak bu ortaya &#231;ok uzun bir programın &#231;ıkmasına sebep olur. Oysa yazı-tura işlemlerini bir fonksiyonda toplar ve ihtiya&#231; halinde sadece bu fonksiyonu &#231;ağırırsak ve fonksiyon bize o anda yazı mı geldiğini, yoksa tura mı geldiğini bildirirse, işimiz &#231;ok kolaylaşmış olur.
B&#246;yle bir fonksiyon, yukarıdaki &#246;rnekten hareketle, ş&#246;yle olabilir:
<%
Function YaziTura
Dim ParaAt
Randomize
ParaAt = Int(Rnd * 2) + 1
If ParaAt = 1 Then
YaziTura = “Yazı”
Else
YaziTura = “Tura”
End If
End Function
%>
Bu fonksiyonu, ASP programının herhangi bir yerinden, ş&#246;yle bir y&#246;ntemle &#231;ağırabilir; ve vereceği sonucu programın akışına uygun şekilde kullanabilirsiniz:
<%
NeGeldi = YaziTura
Response.Write NeGeldi
%>
Fonksiyonun sonunda End Function ifadesinin bulunduğuna ve fonksiyonun elde ettiği sonucu kendi adına atadığımıza dikkat edin. DIM ifadesiyle b&#246;yle bir değişken tanımlamadığımız halde VBScript, fonksiyonu &#231;ağırdığınız anda bunu kendiliğinden yapacaktır.
Aynı işlemi Subroutine (Sub) olarak yazabiliriz. Fakat bu kez Sub, elde edeceği değeri kendisi kullanacak ve bittiği anda kontrol programa geri d&#246;necektir:
<%
Sub YaziTura()
Dim ParaAt
Randomize
ParaAt = Int(Rnd * 2) + 1
If ParaAt = 1 Then
Response.Write “Yazı”
Else
Response.Write “Tura”
End If
End Sub
%>
Fonksiyon adlarının sonuna, bizden beklediği değer varsa onları belirleyen değişken adlarını parantez i&#231;inde yazarız. Fonksiyon bizden bir değer beklemiyorsa a&#231;ılan kapanan (boş) parantezlere ihtiya&#231; yoktur. ancak bir &#231;ok VBScript programcısı bunu adet edinmiştir.
Sub’ların &#231;ağrılması, fonksiyondan farklıdır. Sub’ın icra edilmesini istediğiniz noktaya sadece adını yazarız. Sub’lar işleyebilmek i&#231;in bizden değer bekliyorsa, bu değerleri Sub adının yanına, parantez i&#231;ine almadan ve virg&#252;lle ayırarak, yazarız. &#214;rneğin, Hesapla isimli ve bizden iki değer bekleyen bir Sub ş&#246;yle &#231;ağrılır:
Hesapla 10, 20
Bu Sub işini bitirdiği anda programın akışı, Sub’a atıf yaptığımız noktada devam eder.
Sık Kullanacağımız Hazır Fonksiyonlar
VBScript’te kullanabileceğimiz bir iki hazır-fonksiyona yukarıda değindik. Tesad&#252;f&#238; sayı &#252;reten Rnd() fonksiyonu bunlardan biriydi; ayrıca Int() fonksiyonu ile kesirli bir sayının tam b&#246;l&#252;m&#252;n&#252; alabildiğimizi g&#246;rd&#252;k. VBScript’in kullanılmaya hazır daha bir &#231;ok fonksiyonu vardır; ancak ASP uygulamalarında sık kullanacağımız ve &#246;zellikle metin d&#252;zenlemeye ait olan bir ka&#231;ını burada sıralayalım.
Tarih ve saat
Belki de Web’in zamana &#231;ok bağlı oluşu dolayısıyla, Visual Basic’in hemen hemen b&#252;t&#252;n zaman-tarih fonksiyonları VBScript’te de kullanılır.
Date: Bug&#252;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&#252;n&#252
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
, WeekdayName (g&#252;n&#252;n adı) ve Monthname (ayın adı) fonksiyonları da vardır. Bu fonksiyonlar değerlerini Date fonksiyonuna g&#246;re alırlar. &#214;rneğin,
<%= WeekdayName(Weekday(Date))%>
komutu bize bug&#252;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&#252;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&#246;lgesel ayarları T&#252;rkiye i&#231;in yapılmışsa, g&#252;n adları T&#252;rk&#231;e olarak d&#246;necektir. Ayrıca, tarih ve saat bi&#231;imleri de b&#246;lgesel ayarlara bağlı olarak, ay &#246;nde, g&#252;n arkada veya tersi, saat de 12 saat veya 24 saat esasına g&#246;re d&#246;ner. ASP programlarınızı kişisel Web Server’da denerken kendi bilgisayarınızın tarih ve saatini; ger&#231;ek Internet’te &#231;alıştırırken Server’ın tarih ve saatini alırsınız. Sayfalarınızda ay ve g&#252;n adlarını T&#252;rk&#231;e g&#246;r&#252;nt&#252;lemek i&#231;in, &#246;nce Server’ın b&#246;lgesel ayarlarını sınamanız ve eğer isimler T&#252;rk&#231;e gelmiyorsa, bunları &#231;eviren Sub’lar veya fonksiyonlar yazmanız gerekebilir.
Karakter-dizisi D&#252;zenleme
Karakter-dizisi veya String, VBScript i&#231;in herşey olabilir. “Sana Sevdanın Yolları Bana Kurşunlar” bir String’dir. “Bug&#252;n 7 Ağustos 2000” bir String’dir. “Doğum G&#252;n&#252;n Kutlu Olsun!” bir String’dir. Web sitemizi ziyaret eden kişinin formlarımıza yazacağı ve G&#246;nder tuşunu tıklayarak Server’a g&#246;ndereceği bilgiler String’dir. Fakat bunların hepsi olduğu şekliyle işimize yaramaz. Bunları yeniden d&#252;zenlemek, i&#231;inden se&#231;meler yapmak veya bi&#231;imlerini değiştirmek gerekebilir. VBScript bu ama&#231;la kullanılmaya hazır bir dizi fonksiyon verir:
InStr Uzun bir String’in i&#231;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, “Sana Sevdanın Yolları Bana Kurşunlar” String’ini Kayahan değişkenine, “Sevda” kelimesini de Ara değişkenine atadınız. InStr fonksiyonu ile Ara’nın değerinin yerini Kayahan’ın değerinin i&#231;inde bulabilirsiniz:
Yer = InStr(Kayahan, Ara)
Yer’in değeri 6 olacaktır; &#231;&#252;nk&#252; “Sevda” kelimesi, uzun String’de 6’ncı karakterden başlamaktatır.
Len Bir String’in uzunluğunu belirler. Yukarıdaki &#246;rnekte yer alan Kayahan değişkenin uzunluğunu ş&#246;yle belirleyebiliriz:
Uzunluk = Len(Kayahan)
Uzunluk değişkeninin değeri 36 olacaktır.
UCase Vereceğiniz bir String’in t&#252;m karakterlerini b&#252;y&#252;k harfe &#231;evirir.
YeniString = UCase(Kayahan)
Yeni String’in değeri: “SANA SEVDANIN YOLLARI BANA KURŞUNLAR” olacaktır.
LCase Vereceğiniz bir String’in t&#252;m karakterlerini k&#252;&#231;&#252;k harfe &#231;evirir.
YeniString = LCase(Kayahan)
Yeni String’in değeri: “sana sevdanın yolları bana kurşunlar” 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 İ&#231;inde, vereceğiniz sayı kadar boşluk olan boş bir String oluşturur. &#214;rneğin
Bosluk = Space(20)
Bosluk değişkenin değeri “ “ (20 boşluk) 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&#231;inde soldan (baştan) veya sağdan (sondan) verdiğiniz sayıya kadar olan karakterleri verir. &#214;rneğin, yine yukarıdaki Kayahan değişkenini kullanırsak:
Solda = Left(Kayahan, 4)
Solda değişkeninin değeri “Sana” olacaktır; &#231;&#252;nk&#252; Kayahan değişkeninin soldan itibaren d&#246;rt harfi “Sana“ kelimesine denk geliyor.
Mid Bir String’in i&#231;inde başlangı&#231; noktasını ve karakter olarak boyunu verdiğiniz alanda yer alan String’i verir.
Ortada = Mid(Kayahan, 5, 8)
Ortada değişkeninin değeri “Sevdanı” olacaktır; &#231;&#252;nk&#252; Kayahan değişkeninin soldan 5’nci değişkeninden itibaren 8 karakterlik alanda “Sevdanı” karakterleri yer alıyor.
Dizi-Değişken (Array) Fonksiyonu
VBScript’in dizi-değişken oluşturmada Array() fonksiyonu ile sağladığı kolaylıklara kısaca değindik. Fakat Array ile daha bir &#231;ok iş yapabiliriz; ve dizi değişken oluşturmakta VBScript’in diğer bazı kolaylıklarından yararlanabiliriz. Dizi-değişkenler, &#246;zellikle Web ziyaret&#231;ilerimizden gelecek bilgilerin kaydedilmesinde; veritabanından &#231;ekeceğimiz verilerin kullanılır hale getirilmesinde yararlı bir ara&#231;tır. Dolayısıyla ASP sayfalarınızda sık sık &#231;ok-boyutlu dizi değişkenlerden yararlanacaksınız. Bunun i&#231;in gerekli ara&#231;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; ve daha sonra elemanlarının değerleri sonradan belirtilebilecek ve eleman sayısı sonradan arttırılabilecek bir dinamik dizi-değişken oluşturur. (“VBScript iyi huyludur,” demiş miydim?) &#214;rnek:
Dim Ogrenciler()
Bu komutla, Ogrenciler dizi-değişkeni oluşturulur; ancak eleman sayısı belirtilmediği i&#231;in dizi dinamiktir; yani 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&#252;zel soru! Cevabı şu olabilir mi? Dizi-değişkenimizin eleman sayısını hen&#252;z bilmiyoruz; ve programın akışı i&#231;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&#231;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&#231;indeki elemanları korumasını, ve eleman sayısını 20’ye &#231;ıkartmasını bildirir. Buna neden gerek olabilir? Ziyaret&#231;inin tercihleri değişebilir; &#246;rneğin bir elektronik alışveriş sitesinde ziyaret&#231;iniz yeni şeyler alabilir; daha &#246;nceki alışverişlerine ilişkin verileri tuttuğunuz dizi-değişkenin eleman sayısını, daha &#246;nceki bilgileri silmeden arttırmanız gerekir.
VBScript’in dizi-değişkenlerini t&#252;m&#252; aynı adı taşıyan bir liste olarak d&#252;ş&#252;nebilirsiniz; sadece değişken adının yanında dizinin ka&#231;ıncı elemanı olduğunu belirten sayı bulunur:
Ogrenciler(1): Necip
Ogrenciler(2): Serap
Ogrenciler(3): Neslihan
Fakat VBScript &#231;ok boyutlu dizi değişken de oluşturabilir. İki boyutlu dizi-değişkeni tablo gibi d&#252;ş&#252;n&#252;n; dizinin elemanları aynı adı taşıyan değişkenler fakat bu kez sadece tek sayı değil sıra ve s&#252;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 &#252;&#231; sıralı, &#252;&#231; s&#252;tunlu bir tablo getirebilirsiniz g&#246;z&#252;n&#252;z&#252;n &#246;n&#252;ne. Bu dizi-değişkeni şu komutla oluşturabiliriz:
Dim Ogrenciler(3,3)
B&#246;yle bir değişkende s&#246;zgelimi birinci sıra (numarası 1,x olanlar) &#231;alışkanları, ikinci sıradakiler (2,x’ler) daha az &#231;alışkanları vs., belirtebilir. VBScript, &#252;&#231;, d&#246;rt ve hatta beş boyutlu dizi-değişken oluşturur. Ama 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; fakat mesela bir d&#246;ng&#252; i&#231;in bu değişkenin ka&#231; elemanı olduğunu bilmek gerekir. &#214;rneğin 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 Fonksiyonları
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&#246;zgelimi bir değişkenin değeri boş ise, ziyaret&#231;imizin formu tam olarak doldurmadığını d&#252;ş&#252;nebiliriz. VBScript, bize değişkenlerin durumunu sınamamız i&#231;in bazı &#246;zel fonksiyonlar sağlar. Bu &#246;zel fonksiyonlardan d&#246;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) &#231;evrilip &#231;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&#231;erli bir değer tutup tutmadığını sınar.
IsNumeric Bir değişkenin sayı olarak işleme tabi tutup tutulamayacağını sınar
IsObject Bir ifadenin ge&#231;erli bir ActiveX veya OLE nesnesine referansta bulunup bulunmadığını sınar.
TypeName Bir değişkenin t&#252;r&#252;n&#252; belirtir.
VarType Bir değişkenin t&#252;r&#252;n&#252; belirten sayıyı verir.
***
Şimdi ASP i&#231;in gerekli VBScript bilgisi bu kadar değil tabi&#238;. Ama bu, işe başlamamız i&#231;in yeter. İlerde yeni VBScript komutları, veya fonksiyonları ile karşılaşırsak (ki size garanti ederim, karşılaşacağınızı!) onları orada kısaca ele alırız. Ama yukarıdaki VBScript bilgisi, her zaman lazım!

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:37   #5
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




ASP’NİN NESNELERİ
Masa, nesnedir. Notebook bilgisayarınız da nesnedir! Arkadaşınız da bir nesnedir. Tabi&#238; bunu onun y&#252;z&#252;ne karşı s&#246;ylemeseniz, iyi olur. Her nesnenin &#246;zellikleri vardır. Masa serttir. Su, i&#231;ine konulduğu nesnenin bi&#231;imi alır.
ASP tekniğinde de amacımız nesnelerin &#246;zelliklerini kullanarak, ya bu &#246;zellikleri belirlemek, ya da değiştirmektir. Nesne Y&#246;nelimli Programlama (Object Oriented Programming, OOP) kavramını daha &#246;nce &#231;ok duymuş olmalısınız. Bir &#246;nceki b&#246;l&#252;mde fonksiyonlarla, Sub’larla, değişkenlerle tanıştık. Diyelim ki &#246;ğretmensiniz (ah, nerede o g&#252;nler!) ve ASP programınızda her &#246;ğrencinin notunu veritabanına işleyen, veritabanından notları alarak ge&#231;eni-kalanı belirleyen veya &#246;ğrencilerle ilgili daha yapılması gereken bir &#231;ok işi yapan fonksiyonlarınız ve Sub’larınız var; bunların kullandığı bir &#231;ok değişkeniniz var: demek ki sizin ASP programınızda “&#246;ğrenci” diye bir nesneniz var. Ve siz bu nesneye y&#246;nelimli program yapmışsınız!
Her “program nesnesi” iki unsura sahiptir:
&#214;zellik (Property, Attribute): Bir nesnenin &#246;zellikleri, onun değişkenleridir. “&#214;ğrenci” nesnesinin “&#214;ğrencinin Adı,” “Notları,” “Adresi” gibi değişkenleri, yani &#246;zellikleri vardır.
Metod (Method): Bir nesnenin işlemesi, &#231;alışması i&#231;in, kısaca kendisinden bekleneni yerine getirebilmesi i&#231;in &#231;alışma y&#246;ntemlerine ihtiyacı vardır. Dolayısıyla bir ASP nesnesinin fonksiyonları, onun metodlarıdır.
Fakat ASP’de nesneler sadece sizin &#246;bekler halinde toplayacağınız fonksiyonlar ve değişkenlerden ibaret değildir. Bir kere, ASP programında kullandığınız Script dilinin getirdiği 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. Bunlara birazdan ayrıntılı ele alacağız. Sonra Web Server’ın size hazır sunduğu nesneler vardır. Bunları daha sonraki b&#246;l&#252;mde g&#246;receğiz. Ve tabi&#238;, Browser’ın bir HTML sayfasının b&#246;l&#252;mlerini nesne sayarak oluşturduğu nesneler vardır. Bunlara da diğer nesneleri ele alırken sırası geldik&#231;e değineceğiz. (Tabi&#238; bir de ASP programınızı Javascript ile yazarsanız, VBScript’ten farklı olarak kendisi nesne-y&#246;nelimli bir dil olan Javascript’in oluşturmanıza imkan vereceği nesneler vardır. Fakat bu nesneler, bu kitap&#231;ığın kapsamı dışında kalıyor.)
Nesneler nasıl oluşmuş olursa olsunlar, daima size bir değer verirler:
Nesne.&#214;zellik = Değer
Bir nesnenin bir &#246;zelliğinin değeri, bizim i&#231;in bir değişken değeri gibi &#246;nem taşır:
If Nesne.&#214;zellik > Değer Then ...
Nesnelerin &#246;zelliklerinin değerlerini değişkenlere atayabiliriz; ancak bunu yaparken Nesne’nin bir metoduna (fonksiyonu) g&#246;ndermede bulunmamız ve gerekiyorsa bu fonksiyona kullanması i&#231;in veri g&#246;ndermeliyiz (bir fonksiyona kullanması i&#231;in g&#246;nderilen değere arg&#252;man/argument denir):
Degisken = Nesne.Metod(arg&#252;man1, arg&#252;man2...)
Daha sonra bu değişkeni istediğimiz yerde kullanırız. Bu kadar teoriden sonra bir &#246;rnek nesne oluşturursak, belki işin i&#231;inden daha kolay &#231;ıkabiliriz.
Nesneler, diğer yararlarının yanı sıra, birbiri ile ilgili Sub’larımızı, fonksiyonlarımızı ve değişkenlerimizi birarada 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
%>
Bir dakika! 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. &#199;ok kolay; &#246;nce bu nesneden yeni bir olgu (instance) oluşturacağız; sonra.. Ama &#246;nce bunu nasıl yapacağımızı yazalım:
<%
Dim Ogr1
Set Ogr1 = New Ogrenci
Ogr1.Adi = “Necip”
Ogr1.Soyadi = “Fazıl”
Ogr1.No = “181”

Response.Write Ogr1.AdiSoyadi
%>
Her nesne, New (yeni) komutu ile yeni bir değişkene b&#252;t&#252;n &#246;zelliklerini verir. Burada Ogr1 değişkeni, yukarıda oluşturduğumuz Ogrenci nesnesinin b&#252;t&#252;n &#246;zelliklerini kazanmış oluyor. Ogrenci nesnesinin “.Adi”, “.Soyadi” ve “.No” &#246;zellikleri olması gerekir; nitekim Ogr1’e bu &#246;zelliklerini burada veriyoruz. Ogrenci nesnesinin bir de metodu (fonksiyonu) var; Ogr1 bunu da kazanabilir mi? Tabi&#238;; hem kazanır, hem de bunu ziyaret&#231;inin Browser penceresine yazdırabilir.
Nesne kavramını kavramak zordur. Fakat yukarıdaki &#246;rnekte g&#246;r&#252;ld&#252;ğ&#252; gibi, ASP sayfalarınızda nesne oluşturarak &#231;alışmaya alıştığınız zaman bunun sağladığı kolaylıktan kolayca vazge&#231;meyeceksiniz.
Hata (Err) Nesnesi
Hangi dille olursa olsun program yazarken hata yapmak ka&#231;ınılmaz bir kuraldır. Dolayısıyla kullandığınız programlama dili hatalarınızı kolayca yakalamanıza imkan vermelidir.
ASP programlarınızda yazım yanlışlığı, olmayan değişkene g&#246;nderme gibi Script hatası olmaması gerekir. Bu t&#252;r hatalar, program Web’e g&#246;nderilmeden mutlaka ayıklanmalıdır. Fakat programcı olarak &#246;ng&#246;remeyeceğiniz, ve &#231;oğu Web ziyaret&#231;isinden veya ziyaret&#231;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 edecektir. Fakat oluşan hata, programın daha sonra vermesi beklenen sonucu vermesini &#246;nleyebilir. VBScript, Err (Hata) Nesnesi’nin bir &#231;ok &#246;zelliğinden &#246;zellikle hata sayısı (Number), tanımı (Description) ve kaynak (Source) &#246;zellikleri ile size hatanın ne olduğunu ve nereden kaynaklandığını s&#246;yleyebilir. Bu &#246;zellikleri kullanarak, programlarınızda, en azından geliştirme aşamasında, &#246;rneğin,
If Err:Number = xx Then
şeklinde bir ifade ile hatanın t&#252;r&#252;ne g&#246;re programın kazasız y&#252;r&#252;mesini sağlayabilirsiniz. Burada xx yerine 108 ayrı hata numarası yapabilirsiniz. Hata numaraları, Microsoft’un VBScript sitesinden edinilebilir.
Nesneler hakkında aşağı yukarı bir fikir edindiğimize g&#246;re, şimdi kullanılmaya hazır Nesne’lerden başlayarak, VBScript kullanırken, ASP sayfalarımızda yararlanabileceğimiz Nesne’leri ele alabiliriz.
Dosya Sistemi Nesnesi
Dosya Sistemi Nesnesi (FileSystemObject), ASP programının, Web Sunucusunun sabit disk sisteminde, s&#252;r&#252;c&#252;leri, klas&#246;rleri ve dosyaları y&#246;netmekte kullanacağımız temel ara&#231;tır. Burada, ne denli g&#252;&#231;l&#252; bir ara&#231;tan s&#246;z ettiğimizi hemen g&#246;rebilmek i&#231;in şu kodu yazalım ve dosya_yaz.asp adıyla kaydedelim:
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE DOSYA YAZMA</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>
<%
Dim YaziFSO, yaz
Set YaziFSO = CreateObject("Scripting.FileSystemObject")
Set yaz = YaziFSO.CreateTextFile("c:\yazi_deneme.txt",True)
yaz.WriteLine("Bu bir denemedir.")
yaz.Close
%>
<H2><CENTER>Bu Web sayfası sabit diske yazı yazdırır!!
<BR>Şimdi C: s&#252;r&#252;c&#252;s&#252;nde yazi_deneme.txt adlı bir dosya olması gerekir!
<BR>L&#252;tfen bakar mısınız?</H2></CENTER>
</BODY>
</HTML>
Kodumuzun Dim satırında iki değişken belirlediğimizi g&#246;r&#252;yorsunuz. Fakat bu iki değişkeni sistem nesnesi olan Scripting’in yeni bir olgusu olarak kullanacağımız i&#231;in daha &#246;nce standart değişkenlere değer atadığımız gibi değil, fakat Set komutundan yararlanıyoruz, ve YaziFSO değişkeninde bir “Scripting.FileSystemObject” nesnesi oluşturulmasını sağlıyoruz. (ASP uzmanları arasında gelenek, nesne değeri tutan değişkenlere, ilgili nesnenin baş harflerini eklemektir. B&#246;ylece bir değişkenin adına bakarak, işlevini anlamak m&#252;mk&#252;n olur.)
“yaz” değişkeni YaziFSO’da yeni bir olgusunu oluşturduğumuz FileSystemObject’in CreateTextFile (D&#252;zyazı dosyası oluştur) metodunu kullanıyoruz; bu metod oluşturulacak dosyanın adını ve eğer bu dosya varsa &#252;zerine yazılmasına izin veren True (doğru) veya buna izin vermeyen False (yanlış) kelimesini arg&#252;man olarak alır. “yaz” değişkeni şimdi kendisi bir metod kullanabilecek şekilde, FileSystemObject’in bir &#246;rneğidir; nitekim WriteLine metodu ile biraz &#246;nce oluşturulan dosyaya, arg&#252;man olarak verdiğimiz metni yazdırmaktadır. Bu kodu &#231;alıştırdıktan sonra, sabit diskinize bakarsanız, d&#252;zyazı dosyasını g&#246;receksiniz:
Bug&#252;ne kadar Web tekniği olarak Browser’da bir sayfayı g&#246;r&#252;nt&#252;leyebileceğimizi sanıyor idiysek, sistem nesneleri kullanarak &#231;ok daha farklı şeyler yapabileceğimizi g&#246;rm&#252;ş olduk. Şimdi FileSystemObject’i daha yakından tanıyabiliriz. Bu nesne bize sabit diske erişme ve onun kaynaklarını kullanma imkanı verir. B&#252;t&#252;n nesneler gibi kullanılabilmesi i&#231;in &#246;nce bir değişkenin b&#252;nyesinde oluşturulması gerekir:
<%
Dim DosyaSistemi
Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”)
%>
Dosya Sistemi Nesnesi’nin 20’den fazla metodu vardır; fakat bunlardan &#246;nemlileri ş&#246;yle sıralanabilir:
CopyFile (dosya kopyala), MoveFile (Dosya taşı), CopyFolder (klas&#246;r kopyala), MoveFolder (klas&#246;r taşı), Create Folder (klas&#246;r oluştur), DeleteFile (dosya sil), DeleteFolder (klas&#246;r sil).
Şimdi bunlardan birinin nasıl kullanılabileceğine bir &#246;rnek verelim:
<%
Dim DosyaSistemi
Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”)
DosyaSistemi.DeleteFile “c:\belgelerim\test.*”
%>
Bu program ile “Belgelerim” klas&#246;r&#252;ndeki “test” isimli b&#252;t&#252;n dosyaları silmiş olursunuz. (Bu programı &#231;alıştırmadan &#246;nce bir ka&#231; kez d&#252;ş&#252;nmeniz, sanırım iyi olur; &#231;&#252;nk&#252; ASP yoluyla sildiğiniz dosyalar, Geri D&#246;n&#252;ş&#252;m Kutusu’na gitmez!) Daha az zararlı bir diğer &#246;rnek ise ş&#246;yle olabilir:
<%
Dim DosyaSistemi
Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”)
DosyaSistemi.CopyFile “c:\belgelerim\*.*”, “c:\yedekler\”
%>
Bu program “Belgelerim” dizinindeki b&#252;t&#252;n dosyaları “Yedekler” dizinine kopyalar.
FileSystemObject’in sadece bir &#246;zelliği (Property) vardır: Drives (s&#252;r&#252;c&#252;ler). Fakat bu &#246;zellik, bir değil bir &#231;ok elemandan oluşan bir dizi-değişken gibi Kolleksiyon (Collection) sayılır. Nede? &#199;&#252;nk&#252; bir Web Server’da birden &#231;ok s&#252;r&#252;c&#252; bulunur. Her s&#252;r&#252;c&#252;, bu kolleksiyonun &#252;yesidir (FileSystem.Drives) ve her birinin s&#252;r&#252;c&#252; harfi (.DriveLetter), disk adı (.VolumeName), byte olarak boş alanı (.FreeSpace) &#246;zellikleri vardır. suruculer.asp adıyla kaydedeceğiniz şu program, denediğiniz sistemin disk-disket-CD-ROM durumunu size listeleyecektir.
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE S&#220;R&#220;C&#220; KOLLEKSİYONU</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>
<%
Dim DosyaSistemi, Surucu, Suruculer
Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")
Set Suruculer = DosyaSistemi.Drives
For Each Surucu In Suruculer
%>
<b>S&#252;r&#252;c&#252;:</b> <%=Surucu.DriveLetter%><br>
<% If Surucu.IsReady = True Then%>
<b>Disk Adı:</b> <%=Surucu.VolumeName%><br>
<b>Boş alan:</b> <%=Surucu.FreeSpace%><br>
<% Else %>
<i>S&#252;r&#252;c&#252; hazır değil!</i><br>
<% End If
Next %>
</BODY>
</HTML>
Burada &#246;zelliklerini ve metodlarını DosyaSistemi adlı değişkene atadığımız Dosya suistemi Nesnesi’nin s&#252;r&#252;c&#252;ler kolleksiyonunun dizi-değişken gibi olduğunu s&#246;ylemiştik. For..Next akış kontrol&#252; ile bu kolleksiyonun b&#252;t&#252;n &#252;yelerinin sırayla s&#252;r&#252;c&#252; harfi, ve hazırsa disk adı ve boş alanı bilgilerini alıyoruz. Drives kolleksiyonunun diğer &#246;zellikleri arasında toplam y&#252;zey genişliği (TotalSize), s&#252;r&#252;c&#252; t&#252;r&#252; (DriveType; 0=bilinmiyor; 1=&#231;ıkartılabilir; 2=sabit; 3=ağ; 4=CD-ROM; 5= RAM-Drive), ve dosya sistemi (FileSystem; FAT, NTFS, CDFS), k&#246;k dizin (RootFolder) vardır. Bu program bir PWS’da &#231;alıştığında, şu sonucu alıyoruz:
VBScript a&#231;ısından, her s&#252;r&#252;c&#252;de klas&#246;rler (Folders) ve onların i&#231;inde alt-klas&#246;r (Subfolders) ve dosya (Files) kolleksiyonları bulunur. (Her klas&#246;r&#252;n i&#231;inde i&#231;inde bir alt-klas&#246;r nesnesi bulunduğu i&#231;in ASP ile sonsuza kadar b&#252;t&#252;n klas&#246;rlere g&#246;nderme yapabilirsiniz. Klas&#246;r nesnesinin bazı &#246;zellikleri şunlardır:
Adı (Name), oluşturulma (DateCreated), erişim (DateLastAccessed), değiştirme (DateLastModified) tarihleri, i&#231;indeki dosyalar ve alt-klas&#246;rlerdeki dosyalarla birlikte boyutu (Size), bulunduğu s&#252;r&#252;c&#252; (Drive), i&#231;inde bulunduğu klas&#246;r (ParentFolder), alt-klas&#246;rler (SubFolders), k&#246;k dizin olup olmadığı (IsRoot).
Klas&#246;r nesnesinin kopyala (Copy), sil (Delete) ve Taşı (Move) metodları vardır.
Dosya (File) nesnesinin de ad, oluşturma, erişim, değiştirme, boyut, s&#252;r&#252;c&#252; ve i&#231;inde bulunduğu s&#252;r&#252;c&#252; &#246;zellikleri, ve kopyala, sil, taşı metodları vardır.
PWS’ınızın bulunduğu sistemde, s&#246;z gelisi C: s&#252;r&#252;c&#252;s&#252;n&#252;n k&#246;k dizinindeki b&#252;t&#252;n dosyaların listesini size veren bir kod ş&#246;yle yazılabilir (dosyalar.asp):
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE KLASOR - DOSYA KOLLEKSİYONU</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>
<%
Dim DosyaSistemi, Surucu, Dosya, KokDizin, KokDosyalar, DosyaNesnesi
Dim SurucuHarfi
SurucuHarfi = "C:"
Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")
Set Surucu = DosyaSistemi.GetDrive(SurucuHarfi)
Set KokDizin = Surucu.RootFolder
Set KokDosyalar = KokDizin.Files
For Each DosyaNesnesi In KokDosyalar
%>
<%
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
osyaNesnesi.Name%><br>
<% Next %>
</BODY>
</HTML>
Burada SurucuHarfi değişkenin değerini değistirerek, arzu ettiğiniz disk/disket veya CD-ROMa ulaşabilirsiniz. GetDrive metodu dikkatinizi &#231;ekmiş olmalı; bu metodla, VBScript, fiilen disk/disket sistemine erişir.
Daha sonra yapacağımız ASP sayfalarında dosya sistemi nesnesinden ve disk s&#252;r&#252;c&#252;leri kolleksiyonundan yararlanacağız.
Metin (TextStream) Nesnesi
Dosya sistemi nesnesi bize disk sistemine, klas&#246;rlere ve dosyalara erişme imkanı verir ama yeni dosyaları oluşturmak veya mevcutlara ek yapmak i&#231;in yeterli &#246;zellik ve metoddan yoksundur. Bunu TextSream nesnesi sağlar.
Bilgisayar işletim sistemlerinin anası, Unix’e aşina iseniz, klavyeden sabit diske kadar bir bilgisayara girdi akımı bulunduğunu, bunlardan birinin de metinler olduğunu hatırlayacaksınız (Aşina değilseniz, şimdi oldunuz!). Bir işletim sistemi, metin dosyalarını okurken, yazarken bir metin akışı olur; TextStream nesnesinin adı da bunu anlatıyor: Metin Akımı. Web Server ve dolayısıyla ASP a&#231;ısından sabit diske bir metin yazarken, veya sabit diskten bir metin okurken, bir metin akışı nesnesi oluşur. Bu nesnenin &#246;zellikleri ve metodlarını kullanarak, &#246;rneğin ziyaret&#231;ilerin sitemize bırakacakları form bilgilerini Web Server’ın sabit diskine yazdırabiliriz. Veya mevcut metinleri okuyabilir ve bunların i&#231;eriğini ziyaret&#231;imize g&#246;ndereceğimiz HTML sayfanın etiketlerinin i&#231;eriği olarak kullanabiliriz. Metin dosyası okumak ve yazmak disk sistemini ilgilendiren bir eylem olduğu i&#231;in yine Scripting nesnelerinden FileSystemObject nesnesinden yararlanacağız; fakat bu kez değişik metodlar kullanacağız.
Metin Dosyası Oluşturma (CreateTextFile)
Aslında biraz &#246;nce, ASP nesnelerinin neler yapabileceğine &#246;rnek olarak yazıp dosya_yaz.asp adıyla kaydettiğimiz program, bir metin dosyasını yazdırma işlemiydi. Oradaki kodlara yeniden g&#246;z atarsanız, CreateTextFile (metin dosyası oluştur) metodunu yardıma &#231;ağırıyor ve bu metoda arg&#252;man olarak yeni metin dosyasının yolunu ve adını veriyorduk. Bu metod TextStream nesnesinindir; ve otomatik olarak bu nesnenin diğer metodlarını kullanmamızı sağlar. kullandığımız metodlar ise WriteLine (satır yaz: bir String’i sonuna yeni satır karakteri koyarak dosyaya yazar) ve Close (kapat: a&#231;ılan metin dosyasını kapatır).
TextStream’in burada kullandığımız ikisinin dışında iki metodu daha vardır:
Write (yaz): Bir String’i dosyaya yazdırır; satır sonuna yeni batır karakteri (Return kodu) koymaz.
WriteBlankLines (boş satır yaz): Bir metin dosyasına arg&#252;man olarak vereceğiniz sayıda boş satır yazdırır.
Varolan Metin Dosyasına Ek Yapma (OpenTextFile)
Metin yazdırma işlerinde sık sık uygulayacağımız bir senaryo, mevcut bir metin dosyasına ek yapmak olacaktır. &#214;rneğin b&#252;t&#252;n ziyaret&#231;ilerimizin sitemizdeki konuk defterine yazdıklarını, bir metin dosyasında toplamak isteyebiliriz.
Bunu OpenTextFile metodu ile yapacağız. Bu metod, tahmin edeceğiniz gibi, a&#231;ılacak dosyanın yolunu ve adını isteyecektir. &#214;rneğin, dosya_yaz.asp’nin ilgili satırı ş&#246;yle olacak:
Set yaz = YaziFSO.OpenTextFile("c:\yazi_deneme.txt",8,0)
Burada dosya yolunu ve adını veren birinci arg&#252;mana ek olarak iki yeni arg&#252;man g&#246;r&#252;yorsunuz: “8,0” şeklinde. Bunlardan birinicisi girdi/&#231;ıktı durumu (I/O Mode), ikincisi ise bi&#231;im (Format) ile ilgilidir. I/O Mode parametreleri şunlardır:
1: okumak i&#231;in a&#231;
8: eklemek i&#231;in a&#231;
A&#231;ılacak dosyanın bi&#231;imini belirttiğimiz son arg&#252;man ise şu değerlerden birini alabilir:
0: ASCII dosyası olarak a&#231;
-1: Unicode dosyası olarak a&#231; (&#214;rneğin i&#231;inde T&#252;rk&#231;e karakterler varsa)
-2: Sistemin varsayılan dosya t&#252;r&#252; olarak a&#231;
Buna g&#246;re, bir dosyayı salt okumak i&#231;in a&#231;mak amacıyla “1,0” arg&#252;manlarını kullanmamız gerekir. Diyelim ki bir dosyayı a&#231;tık. İ&#231;indekileri nasıl okuyabiliriz? Bir d&#246;ng&#252;yle. İşte &#246;rneği:
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>ASP ILE DOSYADAN METİN OKUMA</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>
<%
Dim DosyaSistemi, MetinDosyasi, Satir
Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")
Set MetinDosyasi = DosyaSistemi.OpenTextFile("c:\yazi_deneme.txt",1, 0)
Do
Satir = MetinDosyasi.ReadLine
%>
<%=Satir%>
<%
Loop Until MetinDosyasi.AtEndOfStream
MetinDosyasi.Close
%>
</BODY>
</HTML>

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:37   #6
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Burada kullandığımız metod dikkatinizi &#231;ekmiş olmalı: ReadLine. Bu, a&#231;ılan metin dosyasından bir satır okutmamızı sağlar. İkinci ve son satırları okutmamızı ise Do..Loop kontrol&#252; sağlıyor. Bu d&#246;ng&#252; ne kadar s&#252;r&#252;yor? MetinDosyası nesnesi, AtEndOfStream (akımın sonunda) oluncaya kadar. Bu, dosyanın sonuna geldiğimiz anda ortaya &#231;ıkan bir durum; bu durumla karşılaştığı anda Do..Loop, yaptığı işi durdurup, bir sonraki komuta ge&#231;ecektir. Burada kullandığımız ReadLine metoduna ek olarak yararlanabileceğimiz diğer metodlar ise şunlardır:
Read (oku): Bir sayı &#246;rg&#252;manı ile &#231;alışır ve verdiğiniz sayı kadar karakter okur.
ReadLine (satır oku): Bir satır okur ve String olarak verir.
ReadAll (t&#252;m&#252;n&#252; oku): B&#252;t&#252;n satırları okur ve tek String olarak verir.
Skip (atla): Bir sayı arg&#252;manı ile &#231;alışır ve verdiğiniz sayı kadar karakteri atlar.
SkipLine (satır atla): Bir sonraki satıra atlar.
Bu metodlarla sağladığımız okuma işinin kontrol&#252; amacıyla şu &#246;zellikleri de kullanabiliriz:
AtEndOfStream (akımın sonunda): Okutulan dosyanın sonuna gelinmesi halinde True (doğru) olur.
AtEndOfLine (satırın sonunda): Okutulan satırın sonuna gelinmesi halinde True (doğru) olur.
Sunucu (Server) Nesneleri
Buraya kadar ele aldığımız nesneler bir anlamda bizim sadece tek tek sayfalarda yararlanacağımız ara&#231;ları sağlıyor. Oysa ASP’yi diğer CGI teknolojilerinden ayıran başlıca &#246;zelliklerden biri tek tek Web sayfalarını sanki bir bilgisayar programının &#231;eşitli pencereleri, diyalog kutuları, mesaj kutuları, girdi kutuları gibi, birarada bir “uygulama programı” olarak bağlayabilmesidir. Başka bir deyişle bize, ziyaret&#231;inin sitemize bağlandığı ve ana sayfamızı a&#231;tığı andan itibaren sitemizin bir program b&#252;t&#252;nl&#252;ğ&#252;nde &#231;alışmasını sağlayacak ara&#231;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&#238; &#246;nce Sunucu’nun kendisi yer alır; sonra ziyaret&#231;i ile kurduğumuz ilişki gelir. Ziyaret&#231;i ile ilişkimizi iki y&#246;nl&#252; trafiğe benzetebilirsiniz: ondan bize gelen talepler, bizim ona karşılıklarımız.
Ziyaret&#231;iden bize gelen trafiğe neden “Talep” diyoruz? Ziyaret&#231;i, Browser’ının URL hanesine yazdığı her adresle, veya formlardaki bir d&#252;ğmeyi veya sayfalarımızdaki herhangi bir k&#246;pr&#252;y&#252; tıklamakla, Server’a “Bana şunu g&#246;ndersene!” demiş olur. Bu taleptir. Ziyaret&#231;i taleplerinin t&#252;m&#252; Talep Nesnesi (Request Object) olarak bir arada ele alınabilir. Server’ın bu taleplere verdiği karşılıklar, yani ziyaret&#231;inin Browser’ına g&#246;nderdiği sayfalar, resimler, sesler, videolar ise karşılıktır ve ASP a&#231;ısından Karşılık Nesnesi’ni (Response Object) oluşturur.
Bu b&#246;l&#252;mde bu nesneleri daha yakından tanıyacağız.
Server Nesnesi
Web Server, ASP i&#231;in bir nesnedir, ASP’nin bir &#231;ok işini bu nesnenin &#246;zellikleri ve metodları halleder. Server nesnesinin bir &#246;zelliği (ScriptTimeout) ve d&#246;rt metodu (CreateObject, HTMLEncode, URLEncode, MapPath) vardır. Web Server &#231;alıştığı bilgisayarın sizin siteniz adına y&#246;netiminden sorumludur; dolayısıyla bu kadar az &#246;zellik ve metodu var diye bu nesneden &#231;ok yararlanmayacağımızı sanmayın. ActiveX ve COM bileşenlerini &#231;alıştırmak Server’ın g&#246;revidir.
ScriptTimeout &#214;zelliği: Diyelim ki bir ASP Script’i ya bizim, ya ziyaret&#231;inin, ya da Server’ın bir hatası &#252;z&#252;nden sonsuz d&#246;ng&#252;ye girdi! D&#246;ng&#252;n&#252;n durması i&#231;in gerekli şart asla yerine gelmiyor ve Script bir t&#252;rl&#252; yapacağı işi yapıp, sonlandırmıyor. Bu durumlarda ziyaret&#231;inin ve tabi&#238; Server’ın sonsuza kadar beklemesi m&#252;mk&#252;n değil! Programın bir şekilde durdurulması gerekir. Bunu hemen hemen b&#252;t&#252;n Web server programlarının Script Timeout (Script s&#252;re sınırı) diyalog kutusuna bir değer girilerek yapılır. &#214;reğin MS-Internet Information Server i&#231;in varsayılan Script Timeout s&#252;resi 90 saniyedir. Yani ISS, herhangi bir Script’in &#231;alışıp-durmasını 90 saniye bekler; bu s&#252;renin sonunda Script’in &#231;alışması tamamlanmazsa ziyaret&#231;iye arzu ettiği sayfanın veya unsurun bulunamadığını bildirir. Bu s&#252;reyi (Server’ın varsayılan değerinin altında) kısaltmak değilse bile uzatmak elimizdedir. Bunu ScriptTimeout &#246;zelliğini kullanarak yaparız. ASP sayfasının herhangi bir yerine &#246;rneğin şu kodu koymak yeter:
<% Server.ScriptTimeout = 100 %>
Bu &#246;rneğe g&#246;re Server’ın varsayılan Script Timeout s&#252;resi 90 saniye ise 100 saniyeye &#231;ıkmış olur.
B&#246;yle bir şeyi neden yapmak isteyebiliriz? Script’iniz &#231;ok karmaşık veya başka bir Server’daki veritabanından veri &#231;ekiyor, olabilir. Ger&#231;i bu anlamda 90 saniye bilgisayar milleti i&#231;in bir asır anlamına gelir, ama yine de durdurulmasaydı işini başarıyla tamamlayacak bir Script, bu s&#252;renin kısalığı y&#252;z&#252;nden Server tarafından durdurulabilir. ASP sayfalarınız &#231;ok karmaşıksa ve s&#252;rekli Timeout hatası veriyorsa, hata aramadan &#246;nce bu s&#252;reyi uzatabilirsiniz.
CreateObject Metodu: İlk ASP kodunu yazdığımız andan beri bu metodu kullandığımızı g&#246;r&#252;yorsunuz. CreateObject (nesne oluştur) olmasa idi, d&#246;rt mevsim birbirini izleyebilir, D&#252;nya G&#252;neş’in etrafında d&#246;nebilir miydi? Hi&#231; sanmam. Fakat l&#252;tfen o CreateObject ile bu CreateObject’i birbirine karıştırmayın. Yukarıda kullandıklarımız Scripting nesnesinin bir metodu idi; bu Server nesnesine aittir. Diyelim ki sayfanızda reklam ama&#231;lı banner grafiklerini belirli zaman aralığı ile veya ziyaret&#231;iye g&#246;nderdiğiniz Cookie (&#231;erez) bilgilerine g&#246;re değiştirmek istiyorsunuz. Bunun i&#231;in diyelim ki MS-Web Server Programının AdRotator bileşininden yararlanacaksınız; ş&#246;yle bir kod işinizi g&#246;rebilir:
<% Set Reklam = Server.CreateObject (“MSWS.AdRotator”)%>
<%= Reklam.GetAdvertisement(“/reklamlar/buyukbanka.txt”)%>
Burada GetAdvertisement, Server’ın AdRotator bileşininin bir metodudur. Server’ın CreateObject metodundan, veritabanına ulaşırken de yararlanacağız.
MapPath (Yolu belirle) Metodu: Web Server a&#231;ısından “k&#246;k dizin” (root directory) Server’ın bulunduğu bilgisayarın sabit diskinde, herhangi bir klas&#246;r olabilir. &#214;rneğin IIS i&#231;in bu varsayılan değer olarak “C:\inetbup\
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
klas&#246;r&#252;d&#252;r. &#214;zellikle ASP ile “program niteliğinde siteler” yapmaya başladığımızda, sitenin ilgili b&#252;t&#252;n dosyalarının bulunduğu bir dizin i&#231;in yol belirlemek isteyebiliriz. Bunu Server nesnesinin MapPath (Yolu belirle) metodu ile yapabiliriz:
WebDizini = Server.MapPath(“/benim_site”)
Bu komutla WebDizini değişkenin değeri muhtemelen ş&#246;yle olacaktır:
“C:\inetbup\
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Fakat bu metodun sadece b&#246;yle duragan bi&#231;imde kullanılması gerekmez; bazen sayfalarımızda ziyaret&#231;i ile etkileşmenin sonucu olarak varsayılan Web dizinimizi değiştirmek isteyebiliriz. S&#246;zgelimi biri T&#252;rk&#231;e, diğeri İngilizce iki sitemiz varsa, ve ana sayfamızda ziyaret&#231;i T&#252;rk&#231;e’yi se&#231;tiyse, o noktadan itibaren Web uygulamamız i&#231;in Web k&#246;k-dizini, “/turkish/” olacak ve mesela resimlerimiz i&#231;in verdiğimiz “/resimler/” dizini k&#246;k dizinde değil, “/turkish/resimler/” klas&#246;r&#252;nde aranacaktır. Web yolunu dinamik olarak, yani ziyaret&#231;inin tercihine bağlı şekilde değiştirebilmek i&#231;in, &#246;nce ziyaret&#231;iden gelecek bilgileri nasıl kullanacağımıza, yani Request (talep) nesnesine değinmemiz gerekir.
HTMLEncode, URLEncode: İ&#231;inde HTML a&#231;ısından kod par&#231;ası veya &#246;zel işaret sayılan karakterler bulunan metinleri sayfamıza i&#231;erik olarak g&#246;ndereceğimiz zaman Server’ın işaretleri aynen metin gibi g&#246;ndermesini sağlamak i&#231;in, &#246;rneğin:
Server.HTMLEncode(“Değisken1 < Değisken2”)
yazarsak, ASP bu metni HTML kodu olarak yorumlamaz, metin olarak algılar.
Internet’te bazen &#246;zellikle sayfa adresleri belirtilirken bazı değerlerin “URL Kodu“ dediğimiz şekilde kodlanmış olarak g&#246;nderilmesi gerekir. Bu kodlama t&#252;r&#252;nde boşlukların yerine + işareti konmuş olması şarttır. Bu t&#252;r bilgiler g&#246;ndereceğimiz zaman:
Server.URLEncode(“kelime 1 kelime2 kelimeme2”)
şeklindeki bir kod Bunu hemen şu şekle sokacaktır:
kelime1+kelime2+kelime3
Talep (Request) Nesnesi
Web Server &#231;ok akıllı bir programdır; bir Web ziyaret&#231;isi herhangi bir talepte bulunduğu, yani bir sayfanın g&#246;nderilmesini istediği anda, bu talebi, bir nesne halinde ele alır; kolleksiyonlar oluşturur. Bu kolleksiyonlar, HTTP protokol&#252; ile iletişimin sonucu olarak ziyaret&#231;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&#246;l&#252;m&#252;n&#252; oluşturur.
Request nesnesi kendi i&#231;inde d&#246;rt ana nesne barındırır:
QueryString ve Form
Web ziyaret&#231;isinin bilgisayarından kalkıp Server’a gelen herşey, QueryString kolleksiyonunu oluşturur. Bu ziyaret&#231;inin Browser’ın URL adresi hanesine yazdığı bir basit HTML sayfası yolu ve adı olabilir; bir Form’un G&#246;nder d&#252;ğmesini tıkladığında gelen bilgiler olabilir. Bu bilgilerin şu &#246;zelliklerini kullanabiliriz:
Content_Length: Bir Form’dan gelen bilgilerin t&#252;m&#252;m&#252;n byte olarak boyutudur.
Remote_Host: Ziyaret&#231;inin IP adresini verir; ancak Internet’e &#231;evirmeli ağ ile bağlanan ziyaret&#231;ilerimiz her seferinde farklı bir IP bildirebilirler. Bu y&#252;zden bu bilgiyi ziyaret&#231;inin kimliği sayamayız.
Request_Method: Form’da kullandığımız GET veya POST metodunu bildirir. İki y&#246;ntemle gelen bilgi farklıdır. Form’un oluşturduğu bilgileri GET y&#246;ntemi ile alırsak bu, &#231;evre değişkenlerinden QUERY_STRING değişkeninin i&#231;ine yazılır. Başka bir ifade ile Form’daki b&#252;t&#252;n değişkenlerin adları ve bu değişkenin i&#231;erdiği değer yumak yapılır (bu yumağın niteliğine ve nasıl &#231;&#246;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 kolleksiyonunun i&#231;inde Form’un değişken adları ve ziyaret&#231;inin bu değişkenler i&#231;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 &#231;alıştırılmakta olan ASP sayfasının adını verir.
ServerVariables (Server Değişkenleri)
Request nesnesinin bir diğer kolleksiyonu, bizim kendi Web Server’ımızın o anda &#231;alışmakta olan ASP sayfası i&#231;in oluşturduğu ortamın değişkenleridir. Bunların arasında ziyaret&#231;inin Browser’ına ilişkin bilgiler de vardır. &#214;nvc şU kısa ASP sayfasını &#231;alıştırarak kendi Server’ımızın şu andaki değişkenlerini g&#246;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ı &#231;alıştırdığımız zaman g&#246;r&#252;nt&#252;lenecek tabloda, Bir HTTP Server’ın SerDeg.asp sayfasını &#231;alıştırdığı anda oluşturduğu ortama şekil veren b&#252;t&#252;n değişkenleri g&#246;receksiniz. Bu değişkenleri programlama yoluyla değiştiremeyiz; sadece okuyup, yararlanabiliriz. HTTP Server Değişkenleri Kolleksiyonunun elemanları ş&#246;yle sıralanır:
Değişkenin adı ve değeri
ALL_HTTP HTTP Header i&#231;inde yer alan b&#252;t&#252;n değişkenler ve değerleri. Header adlarının &#246;n&#252;nde “HTTP_” &#246;neki vardır.
ALL_RAW HTTP Header i&#231;inde yer alan b&#252;t&#252;n değişkenler ve değerleri. Header adları ve değerleri istemci Browser’ın verdiği şekilde g&#246;sterilir.
APPL_MD_PATH Web Server’ın ISAPI.DLL dosyası i&#231;in varsaydığı k&#246;k dizin
APPL_PHYSICAL_PATH Web Server’ın varsaydığı k&#246;k dizinin ger&#231;ek yolu
AUTH_PASSWORD Kullanıcı Web Server’a kullanıcı adı/parola y&#246;ntemiyle bağlanabiliyorsa, kullanılan parola
AUTH_TYPE Kullanıcı Web Server’a kullanıcı adı/parola y&#246;ntemiyle bağlanabiliyorsa, kullanılan yetkilendirme y&#246;ntemi
AUTH_USER Kullanıcı Web Server’a kullanıcı adı/parola y&#246;ntemiyle bağlanabiliyorsa, kullanıcı adı
CERT_COOKIE Kullanıcı siteye bağlanmak i&#231;in yetkilendirme sertifikası kullanıyorsa kendisine verilen kimlik (ID)
CERT_FLAGS Sertifikanın varlığını g&#246;steren bit değeri
CERT_ISSUER Sertifika varsa veren kurum
CERT_KEYSIZE Secure Socket Layers kullanılıyorsa, bağlantı i&#231;in anahtar değeri
CERT_SECRETKEYSIZE &#214;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&#246;nderdiği bilgi yumağının boyutu
CONTENT_TYPE Ziyaret&#231;iden gelen bilgilerin GET veya POST metoduna g&#246;re edindiği t&#252;r
GATEWAY_INTERFACE Web Server’ın ziyaret&#231;i ile etkileşim aray&#252;z&#252;n&#252;n adı ve s&#252;r&#252;m&#252;. Genellikle: CGI/1.1
HTTPS Ziyaret&#231;i ile bağlantı g&#252;venli ise ON, değilse OFF
HTTPS_KEYSIZE Secure Sockets Layer i&#231;in bağlantı anahtar sayısı
HTTPS_SECRETKEYSIZE &#214;zel Server sertifikasının gizli anahtar sayısı
HTTPS_SERVER_ISSUER &#214;zel Server sertifikasının veren merci
HTTPS_SERVER_SUBJECT &#214;zel Server sertifikasının konusu
INSTANCE_ID Web Server’ın aynı anda ka&#231; kere &#231;alışmakta olduğu
INSTANCE_META_PATH Şu anda &#231;alışmakta olan Web Server’ın Meta yolu
LOCAL_ADDR İstemcinin IP numarası
LOGON_USER İstemci Windows NT sisteminde ise oturum a&#231;ma adı
PATH_INFO &#199;alışmakta olan ASP’nin g&#246;reli yolu ve adı
PATH_TRANSLATED &#199;alışmakta olan ASP’nin ger&#231;ek yolu ve adı
QUERY_STRING İstemcinin g&#246;nderdiği bilgi k&#252;mesi
REMOTE_ADDR İstemcinin Host’unun (ISS’inin) IP’si
REMOTE_HOST İstemcinin Host’unun (ISS’inin) adı
REMOTE_USER İstemcinin ger&#231;ek adı
REQUEST_METHOD İstemciden bilgi isteme y&#246;ntemi (GET veya POST)
SCRIPT_NAME &#199;alışmakta olan ASP’nin adı
SERVER_NAME Sunucu’nun adı
SERVER_PORT Sunucuya bağlantının geldiği TCP kapı numarası
SERVER_PORT_SECURE TCP kapısı g&#252;venli ise 1, değilse 0
SERVER_PROTOCOL Server’ın &#231;alıştırdığı HTTP’nin s&#252;r&#252;m&#252;
SERVER_SOFTWARE Server programının adı ve s&#252;r&#252;m&#252;
URL Şu anda ge&#231;erli URL
Cookie (&#199;erez)
Daha &#246;nce ne kadar &#231;ok olursa olsun tek-tek Web sayfalarından oluşan siteler yaptıysanız bile, Cookie (&#199;erez) ile ilginiz olmamış olabilir. Ya da sadece Internet ziyaret&#231;isi olarak başkalarının size g&#246;nderdiiği Cookie’lere sinirlenmekle yetinmiş olabilirsiniz. Fakat şimdi ASP ile Web Programı oluşturmaya hazırlanan kişi olarak Cookie’lerle daha yakından ilgilenmeniz gerekiyor. &#199;&#252;nk&#252; artık siz de başkalarına &#231;erez g&#246;ndereceksiniz!
Tabi&#238; bunun i&#231;in &#246;nce “Cookie neden gereklidir?” sorusunu yanıtlamak gerekir. HTTP ile yapılan iletişim, belirgin olmayan durum bağlantısına dayanır: yani ne istemci sunucunun, ne de sunucu istemcinin o anda hatta (on-line) olduğunu bilmek zorunda değildir; birbirlerinden istedikleri ve g&#246;nderdikleri şeyleri karşı tarafından almaya hazır olduğunu bilmeden g&#246;nderirler. Oysa s&#246;zgelimi elektronik alışveriş gibi ziyaret&#231;inin bir yerlere birşeyler kaydettiği, ge&#231;ici değişkenler oluşturduğu durumlarda sitemizde kimin ne yaptığıını bilmek zorundayız. Ziyeret&#231;inin bir sayfada yaptığı tercihler diğer sayfalarda ona sunacağımız i&#231;eriği etkileyebilir, belirleyebilir. Oysa aynı ziyaret&#231;i bir sayfadan diğerine ge&#231;erken Server ile ilişkisini kaybedebilir. Bunun i&#231;in ziyaret&#231;inin Internet’ten kopması gerekmez; sadece TCP/IP protokol&#252; gereği bizimle bağlantısı kesilebilir. Bunu ziyaret&#231;i farketmeyebilir; ama Server etmek zorundadır. Heryeni ilişkiye yeni bir “application” (uygulama programı) başlatamayız; ziyaret&#231;inin bir &#246;nceki sayfada yaptığı tercihlerin devam etmesi gerekir. Bu devamlılığı ziyaret&#231;iyi işaretleyerek yaparız; bu işareti de Cookie sağlar.
ASP tekniğiyle tasarladığımız sitede, ziyaret&#231;ilerimize Cookie g&#246;ndermek zorunluktur diyebiliriz. ASP a&#231;ısından Cookie’ler bir nesne oluştururlar. Aslında, Cookie’ler ASP i&#231;in iki ayrı grup Cookie nesnesi oluştururlar: verilenler, ve hakkında bilgi alınan varolan Cookie’ler. Birinci grup Request (talep) nesneleri, ikinci grup ise Response (karşılık) neslereni i&#231;inde ele alınabilir. Cookie konusunun *devamını Response nesnelerine değindiğimiz yere bırakalım.
Sertifika Nesnesi
Sertifika, HTTP bağlantısında “Ben filancayım!” diyen istemcinin, ger&#231;ekten filanca olup olmadığını g&#246;sterir. Bir yazılımdan ibaret olan sertifikaları yetkili bir kurum veya şirket verir; bir seri numarası olur. Şifreleme teknikleri gelişmiş olduğu i&#231;in taklit edilmesi zordur. Sertifika uygulaması i&#231;in Web Server’ın Secure Socket Layers denen g&#252;venli HTTP protokol&#252;n&#252; kullanması gerekir. Bu durumda Server’ın URL’i, http:// diye değil https:// diye yazılır.
ASP a&#231;ısından sertifika ile ilgili her t&#252;rl&#252; bilgi ClientCertificate kolleksiyonunda durur. S&#246;zgelimi, bir ziyaret&#231;inin ger&#231;ekten sitenize girmeye yetkili olup olmadığını anlamak i&#231;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.

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:38   #7
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Karşılık (Response) Nesnesi
Ve geldik Web Server’in &#199;ıktı (Output) sağladığı istemciye giden karşılıkların oluşturduğu nesneye. Server’dan Browser’a giden herşey karşılıktır. Bu bir ASP veya HTML sayfası olabilir, sayfanın i&#231;indeki GIF, JPG veya PNG grafiği, bir Flash, video veya ses dosyası olabilir. B&#246;ylesine zengin i&#231;eriği olmakla birlikte Response nesnesinin sadece bir kolleksiyonu vardır: Cookie’ler. Buna karşılık Response nesnesinin kullanabileceğimiz &#231;ok sayıda &#246;zelliği ve metodu bulunur. &#214;nce Cookie kolleksiyonunu ele alalım; sonra &#246;nemli Response nesnesi &#246;zellikleri ve metodları &#252;zerinde duralım.
Cookie’ler
Request nesnesinin Cookie kolleksiyonuna değinirken, ziyaret&#231;ilerimizi Browser’larına Cookie g&#246;ndererek tabir yerinde ise işaretleriz, demiştik. Bu işaretleme, s&#246;z gelimi, ziyaret&#231;inin bir Form’a yazdığı adı ve soyadı ile elektronik posta adresini Cookie olarak onun bilgisayarına kaydetmek şeklinde olur. Bir kişi sayfamızı talep ettiği anda, ASP programımız bu kişinin bilgisayarında daha &#246;nce koyduğumuz Cookie’yi arar ve bulur; Cookie’den bu kişinin adını &#246;ğrenir ve mesela sayfamız “Sayın Filanca, sitemize hoş geldiniz!” başlığını g&#246;r&#252;nt&#252;ler.
Cookie’ler sadece b&#246;yle fiyaka ama&#231;lı olarak kullanılmaz; ziyaret&#231;inin daha &#246;nce sitemizde ziyaret ettiği sayfaları veya elektronik ticaret sitemizden satın aldığı kitap t&#252;rlerini Cookie’ye kaydedebiliriz. Ziyaret&#231;inin ikinci ziyaretinde ona &#246;nce bu sayfaların veya kitapların k&#246;pr&#252;lerini sunabiliriz. Bir Cookie’nin adı ve anahtarları (key) ile bu anahtarlara karşılık değerler olur. &#214;rneğin:
<% Response.Cookie(“Bizim_Cerez”)(“Adi_Soyadi”)= “Necip Fazıl” %>
Bu, ziyaret&#231;inin Browser’ına (yani sabit diskine) “Bizim_Cerez” isimli bir Cookie g&#246;nderir; bu Cookie’nin “Adi_Soyadi” adlı bir anahtarı vardır; bu anahtarın değeri ise “Necip Fazıl” olur.
Cookie kolleksiyonunun iki &#246;zelliği bulunur:
Expires (zaman aşamı s&#252;resi): Bir cookie’nin artık ge&#231;ersiz olduğu tarihi g&#246;sterir.:
<% Response.Cookie(“Bizim_Cerez”).CookieExpires = “August 7, 2000” %>
Bu Cookie, 7 Ağustos 2000 tarihinden sonra kullanılmaz olacak demektir.
HasKeys: Cookie’nin String mi i&#231;erdiği yoksa anahtarları ve değerleri mi bulunduğunu belirtir, “HasKeys = False” birinci, ““HasKeys = True” ise ikinci durumu belirtir. Bir Cookie’de birden fazla anahtar ve değer bulunuyorsa, t&#252;m&#252;n&#252; bir ASP kodu i&#231;inde yazmak, Cookie’nin g&#246;nderilmesini kolaylaştırır
Metodlar
Response nesnesinin bir &#231;ok metodu vardır; bunlardan .Write’ı yukarıdaki &#246;rneklerde sık sık kulandık:
<%
DIM Adi_Soyadi
Adi_Soyadi = “Necip Fazıl Dayanır”
Response.Write(“Merhaba, benim adım, “ & Adi_Soyadi)
%>
&#246;rneği, ziyaret&#231;inini Browser penceresine: “Merhaba, benim adım Necip Fazıl Dayanır” 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 = “Necip Fazıl Dayanır”
%>
<%= “Merhaba, benim adım, “ & Adi_Soyadi %>
&#214;zellikler
Response nesnesinin bir &#231;ok &#246;zelliğini kullanarak ziyaret&#231;imize g&#246;ndereceğimiz sayfaları ve diğer unsurları y&#246;netiriz:
Buffer (Tampon) : True (doğru) olarak ayarlandığında ziyaret&#231;iye g&#246;nderilecek sayfanın b&#252;t&#252;n unsurları bir tampon b&#246;lgede toplanır, Script’in &#231;alışması bitinceye kadar beklenir ve HTML sayfa toptan g&#246;nderilir. Kimi zaman ASP kodumuz sonuna kadar &#231;alıştığında ziyaret&#231;iyi başka bir sayfaya ve siteye y&#246;nlendirebilir. Bu gibi sebeplerle, &#246;zellikle &#231;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&#246;nder): Buffer metodu sayfanın t&#252;m&#252;n&#252;n Script’in icrası bitmeden g&#246;nderilmesini &#246;nlerken, Flush bunun tam tersini yapar. ASP, Response nesnesinin Flush metodu kullandığımızı g&#246;rd&#252;ğ&#252; anda, o ana kadar icra edilmiş kodun sonucu olan HTML’i Browser’a g&#246;nderir:
<%
Option Explicit
Response.Flush
%>
Clear (Boşalt): Buffer metodu ile Script’in sonunu beklerken ge&#231;ici bir alanda tutulmakta olan HTML, Clear metodu ile temizlenir, yok edilir. Flush metodunda tampondaki HTML Browser’a g&#246;nderilir; ancak Clear metodu tampon b&#246;lgedeki herşeyi yok eder. B&#246;yle “tehlikeli” bir metod neden vardır, ve nerede kullanılabilir? Bir &#231;ok yerde: ziyaret&#231;inin s&#246;zgelimi elektronik alışveriş sitemizde alışverişten vazge&#231;tiğini belirtmesi &#252;zerine tampon b&#246;lgede tutmakta olduğumuz ve alınan mallar listesini i&#231;eren HTML’i bu y&#246;ntemle temizleriz:
<%
Option Explicit
Response.Clear
%>
Expires (S&#252;resi dolar): Kullanıcı tersine bir ayar yapmadıysa, Browser genellikle g&#246;r&#252;nt&#252;lediği sayfaları Ge&#231;ici Internet Dosyaları dizinine (cache) kaydeder ve tekrar aynı sayfayı g&#246;r&#252;nt&#252;lemek istediğinizde sayfayı Internet’ten edinmek yerine kendi sabit diskinden alır. Oysa &#246;zellikle haber gibi s&#252;reli bilgilerin sunulduğu Web sitelerinde bu sitenin itibarını sarsar. ASP tekniğiyle bunu &#246;nleyebiliriz. ASP sayfamızda bu sayfanın g&#246;zgelimi 60 dakikadan fazla cach dizinde tutulmamasını sağlayacak Expires metodunu kullanabiliriz:
<%
Option Explicit
Response.Expires = 60
%>
Burada yazdığımız rakamı değiştirerek, sayfanın cach’de tutulacağı dakikayı değiştirebiliriz. “Expires = 0” sayfanın hi&#231; 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&#246;ndermesini sağlayan metodu olan End, aynı zamanda Buffer metoduyla tutulan HTML’in de g&#246;nderilmesine yol a&#231;ar. Bu metoddan sonraki HTML veya ASP kodları icra edilmez:
<%
Option Explicit
Response.End
%>
Response nesnesinin ASP sayfasının &#231;ıktı kontrol&#252;n&#252; sağlayan bu metodlarını aşağıdaki eğlenceli Script’le sınayabilirsiniz (ASP ile eğlence de bundan daha fazla olamaz!). Burada Browser’a gitmesi &#252;midiyle &#252;&#231; c&#252;mle var. Programı &#231;alıştırın ve bakalım hangisi ekranda kalacak? Bu kadar eğlendiğinize g&#246;re şu soruyu da yanıtlayabilirsiniz: Neden?
<% @LANGUAGE = VBScript %>
<%
Option Explicit
Response.Buffer = True
Response.Expires = 60
%>
<HTML>
<BODY>
Bu 1 Numaralı mesajı mı Browser’a gidecek?
<%
Response.Clear
Response.Expires = 0
%>
<HTML>
<BODY>
Bu 2 numaralı mesaj mı Browser'a gidecek)
<%
Response.Flush
%>
</BODY>
</HTML>
<%
Response.End
%>
Bu 3 numaralı mesaj mı Browser’a gidecek?
</BODY>
</HTML>

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:39   #8
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Uygulama (Application) ve Oturum (Session) Nesnesi
ASP’nin varlık sebebi, standart CGI’ın yetersiz kaldığı noktalardan biri olan Web Server’ın her bir Web ziyaret&#231;iyi oturumunun başından sonuna izleyebilmesi i&#231;indir, dersek durumu abartmış olmayız. ASP a&#231;ısından, bir site “uygulama programı” (Application) sayılır. Her ziyaret&#231;i de bir “oturum” (Session) sayılır. Bir takım ASP ve HTML sayfalarından oluşan bildiğimiz Site’ye application, her hangi bir ziyarete de session denmesinin sebebi nedir? Bunu her iki nesnenin işlevleri ile a&#231;ıklayabiliriz.
Application nesnesi, sitenin t&#252;m&#252;yle ilgili bilgileri (değişkenleri, nesneleri ve metodları) tutar; Session nesnesi ziyaret&#231;inin sitemize girmesinden itibaren izini s&#252;rer. Diyelim ki bir borsa sitesi yaptınız; ziyaret&#231;ileriniz gelerek, satışa sunulan hisse senetlerinin değerlendirmelerini okuyacak ve size “Şu, şu hisse senetleri al!” diye talimat bırakacak. B&#252;t&#252;n ziyaret&#231;ilerinizin erişeceği sadece bir veritabanınız var; buna karşılık her bir ziyaret&#231;inin yapacağı farklı tercihler, vereceği farklı kararlar olacaktır. Application nesnesi, sitenizle (artık site yerine Web Uygulama Programı desek de ağzımız alışmaya başlasa!) veritabanına erişmekten tutun, alışverişlerie kadar sitede yapılacak b&#252;t&#252;n işlerin b&#252;t&#252;n kurallarını bilecek ve uygulayacak; Session nesnesi ise s&#246;zgelimi benim alışverişlerimi, tercihlerimi bilecektir.
HTML ve Javascript ile biraz oynadıysanız, bilirsiniz ki bir sayfadan &#246;tekine değişken değeri aktarmak, imkansıza yakın derecede zordur. Değişkenlerin &#246;mr&#252;, 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&#252;t&#252;n fonksiyonlar i&#231;in ge&#231;erli hale getirebiliriz. Fakat kimi zaman isteriz ki, bir fonksiyonun değeri b&#252;t&#252;n sayfalarda aynı olsun; ziyaret&#231;inin sayfa değiştirmesi ile değişkenin değeri değişmesin. Bunu ASP’de yapmak &#231;ok kolaydır. ASP’de bu zorluğu yenebilmek i&#231;in değişkenlerimizi Session nesnesi i&#231;in oluşturabiliriz; ve bu değer ziyaret&#231;inin oturumu boyunca devam eder; b&#252;t&#252;n ASP sayfalarındaki b&#252;t&#252;n Fonksiyonlar tarafından bilinebilir. &#214;rneğin:
Session (“Tupras”) = 44500
b&#252;t&#252;n Session i&#231;in ge&#231;erli bir Tupras değişkeni oluşturur ve ona “44500” değerini atar. Kimi zaman, değişkenin &#231;ok daha geniş kapsamlı olmasını, yani &#246;mr&#252;n&#252;n Session ile değil b&#252;t&#252;n Application boyunca belirli olmasını isteyebiliriz. O zaman bu değişkeni Application d&#252;zeyinde tanımlayabiliriz:
Application (“Tupras”) = 44500
Bu durumda Tupras değişkeni b&#252;t&#252;n ziyaret&#231;iler i&#231;in aynı değere sahip olacakatır.
Session nesnesinin oluşabilmesi i&#231;in, ziyaret&#231;iye mutlaka bir Cookie g&#246;ndererek, sitemizde (hani “Uygulama Programı” diyecektik?) bir işaret vermemiz gerekir. Daha &#246;nce, HTTP ile kurduğumuz bağlantı, belirsiz durum bağlantısıdır demiştik. Bu, Server’ın bir ziyaret&#231;iye arzu ettiği sayfayı g&#246;nderdikten sonra, onu alıp almadığını, o sayfada ne tercihler yaptığını bilmemesi demektir. Oysa, ziyaret&#231;iye sitemize bağlandığı anda bir Session kimliği verirsek ve her yeni sayfa talebinde bu kimliği kontrol edersek, kimin hangi oturumunu s&#252;rd&#252;rd&#252;ğ&#252;n&#252; biliriz. ASP–uyumlu bir Web Server, ziyaret&#231;i yeni bir tercih yapmadığı taktirde her Session nesnesini 20 dakika a&#231;ık tutar; sonra siler. Bu s&#252;reyi Session nesnesinin Timeout &#246;zelliği yoluyla değiştirebilirsiniz. Session belirleyen Cookie ASP-uyumlu Web Server tarafından otomatik olarak g&#246;nderilir ve takip edilir; tasarımcı olarak bizim bu konuda bir şey yapmamız gerekmez.
Bir Web programınıza aynı anda ka&#231; kişi ulaşırsa (yani sayfalarınızı ka&#231; kişi talep ederse), o kadar Session nesnesi oluşur; fakat siteniz bir adet olduğuna g&#246;re bir adet Application nesnesi vardır. Bu nesnenin b&#252;t&#252;n Session’lar i&#231;in sitemizin ihtiya&#231;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ı, &#246;rneğin MS Visual Studio ile oluşturuyorsanız, program sizin i&#231;in se&#231;tiğiniz dizinde bir Global.asa dosyası oluşturacaktır. Bu dosyada, &#231;oğu zaman, sitemize ilk ziyaret&#231;inin gelmesiyle oluşan Application_OnStart ve son ziyaret&#231;inin &#231;ıkmasıyla oluşan Application_OnEnd ile herhangi bir ziyaret&#231;inin bir sayfaya erişmesiyle oluşan Session_OnStart ve ziyaret&#231;inin sitemizden &#231;ıkması ile oluşan Session_OnEnd olayları halinde ne yapılacağı yazılıdır. Bu dosyanın i&#231;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&#231;iyi g&#246;rd&#252;ğ&#252; anda Global.asa dosyasını &#231;alıştırır.
Application ve Session nesnelerin kendi başlarına en &#231;ok kullanıldığı yer, sitemize gelen ziyaret&#231;ilerin sayısını (sitemizin aldığı Hit sayısını) tutmasını sağlamaktır. Bu genellikle Global.asa pogramına bir saya&#231; yerleştirilerek yapılır.
-----------------
ActiveX Veri Erişim (ADO) Nesneleri
ASP’nin diğer CGI tekniklerine g&#246;re kolay olmasının (peki, kabul, “kolay g&#246;r&#252;nmesi” diyelim!) belki de sadece veri erişimini adeta &#231;ocuk oyuncağı haline getirmesidir. ADO, ger&#231;ekte bir ASP nesnesi olmaktan &#231;ok Server Component’i (sunucu bileşeni) sayılır. Bu bileşene biz ASP i&#231;inden bir ActiveX nesnesi ile ulaşırız.
Veritabanı, g&#252;n&#252;m&#252;zde giderek Web Programlarının temelini oluşturuyor. Sayfaların unsurları veritabanı dosyasından alınıyor; ziyaret&#231;ilerin verdikleri bilgiler veritabanına yazılıyor. Bu gelişimin başlıca sebebi, veritabanının site g&#252;ncelleştirme işlerini kolaylaştırmasıdır. S&#246;z gelimi bir sayfadaki se&#231;enekleriniz, bir veritabanından alınıyorsa, bu se&#231;enekleri alan VBScript kodu hi&#231; değişmeden kalacak ve siz sadece veritabanı dosyanızda ilgili verinin alındığı alana yeni değerler girerek, sayfanızı s&#252;rekli g&#252;ncel tutmuş olacaksınız. Bir diğer sebep ise veritabanı dosyalarının idaresinin kolay olmasıdır. S&#246;zgelimi ziyaret&#231;ilerinizden aldığınız bilgileri daha sonra muhasebe kayıtlarınıza veya adres defterinize, m&#252;şteri k&#252;t&#252;ğ&#252;ne ya da başka suretle kayda ge&#231;irmek istiyorsunuz. Ziyaret&#231;ilerimizin form yoluyla bize ilettiği bilgileri d&#252;zyazı dosyasına işlemenin yollarını Dosya sistemi Nesnesi’ni (FileSystem) g&#246;r&#252;rken, ele aldık. Bunu yapabiliriz kolayca. Ama daha sonra d&#252;z yazı dosyasının idaresi, veritabanının idaresi kadar kolay olamaz. ASP sayfalarınız Access, Excel, Paradox, FilePro, SQL Server ve Oracle veritabanlarına ve spreadsheet dosyalarına erişebilir; bu dosyalardan veri okur ve bu dosyalara veri yazabilir. &#214;zetle, ASP programlarımızla, SQL-uyumlu veya Windows ve diğer sistemler i&#231;in yazılmış ODBC (Open Database Connectivity/A&#231;ık Veritabanı Bağlantısı) ile uyumlu her t&#252;rl&#252; dosyaya, ADO nesnesi aracılığıyla ulaşabiliriz.
ODBC ve OLE-DB
Bu kitap&#231;ığın baştarafında, ASP dosyalarınızı geliştirmeye başlamadan &#246;nce bilgisayarınızda ODBC (Open Database Connectivity/A&#231;ık Veritabanı Bağlantısı) s&#252;r&#252;c&#252;lerinin kurulu olması gerektiğini belirtmiştik. ODBC, ADO’nun kullandığı tek sistem değildir; ve Microsoft firması, ODBC’nin yerine hızla OLE-DB adını verdiği yeni bir teknolojinin alması i&#231;in yoğun &#231;aba i&#231;inde. OLE-DB, ODBC’nin Web’de sağladığı başarının &#252;zerine bina edilen yeni bir teknoloji. ODBC, ilişkilendirilmiş (relational) veritabanlarına erişmek &#252;zere tasarlandığı halde OLE-DB her t&#252;rl&#252; veritabanına erişebilir. OLE-DB, ASP programlarımıza yeni nesneler kazandırabilir; kullanılmaya hazır elektronik ticaret bileşenlerini kullanmaya imkan verir. Bu konuda geniş bilgiyi, Microsoft’tan edirebilirsiniz.
ASP sayfalarımızda kullanacağımız ADO nesneleri ilerde de ODBC s&#252;r&#252;c&#252;lerine erişme imkanını koruyacağı i&#231;in, şimdilik sadece ODBC tekniği ile &#231;alışmakta ve bu tekniği &#246;ğrenmekte sakınca yok. OLE-DB, ODBC’nin yerini almayacak; fakat i&#231;inde ODBC’yi de bulunduracak. Bu da şu anda oluşturacağımız ASP uygulamalarının ilerde OLE-DB tekniği ile &#231;alışan sunucularda işleyeceği anlamına geliyor.
Şimdi ADO ile aşağıda yapacağımız k&#252;&#231;&#252;k &#246;rnekler i&#231;in bilgisayarınızda kurulu bir veritabanı programı varsa onu kullanarak bir veritabanı dosyasında uyeler adıyla şu tabloyu oluşturabilirsiniz:
Alan Adı: Veri t&#252;r&#252;
uyeNo AutoNumber (Birincil Anahtar/Primary Key)
uyeAdi metin
uyeSoyadi metin
email metin
mesaj memo
Daha sonra da renkler adıyla şu tabloyu yapın:
Alan Adı: Veri t&#252;r&#252;
renkID AutoNumber (Birincil Anahtar/Primary Key)
renk metin
Bu tablolardan birincisine bir ka&#231; isim ve diğer bilgileri; ikincisine ise d&#246;rt-beş renk adı girin. Bilgisayarınızda veritabanı oluşturma programı yoksa bu kitap&#231;ığın kodları arasında bulunan uyeler.mdb adlı MS-Access dosyasını kullanabilirsiniz. Bu dosyayı, kişisel Web Server’ınızın k&#246;k dizinine kopyalayın. Sonra, Denetim Masası’nı a&#231;ın ve adı ODBC, ODBC 32 Bit, ya da ODBC Data Source olan simgeyi &#231;alıştırın; ikinci sekme olan System DSN’i tıklayın.
A&#231;ılacak kutuda Add/Ekle d&#252;ğmesini tıklayarak, yeni veri kaynağı oluşturmak i&#231;in ilk adım olan veriyi okumakta kullanacağımız s&#252;r&#252;c&#252;y&#252; se&#231;ebileceğimiz kutunun a&#231;ılmasını sağlayın. Burada, yukarıda oluşturduğunuz veri dosyasına uygun s&#252;r&#252;c&#252;y&#252; se&#231;in. &#214;rnek uyeler.mdb’yi kullanıyorsanız, birinci se&#231;enek olan Microsoft Access Driver’ı se&#231;meniz gerekir. Son d&#252;ğmesini tıklayın ve Access dosyasının kurulumunu yapmaya başlayalım. Buradaki Data Source Name (DSN, Veri Kaynak Adı), biraz sonra ADO nesnesiyle ilgili metodları ve deyimleri yazarken kullanacağımız veri adıdır; buraya “uyeler” yazın; &#231;&#252;nk&#252; &#246;rneklerde bu veriye “uyeler” adıyla g&#246;nderme yapacağız. İsterseniz, Description/A&#231;ıklama b&#246;l&#252;m&#252;ne veritabanının niteliğini belirten bir ka&#231; kelime yazabilirsiniz. Sonra, Select/Se&#231; d&#252;ğmesini tıklayarak ve a&#231;ılıcak diyalog kutusu yardımıyla veritabanı dosyasını kopyaladığınız yerde bulun; OK/Tamam’ı tıklayarak, veritabanı se&#231;me işlemini tamamlayın.
DSN oluşturma kutularını sırasıyla OK/Tamam d&#252;ğmelerini tıklayarak kapatın; “uyeler” verisi, şu andan itibaren b&#252;t&#252;n Web uygulamalarımızın hizmetine girmiş demektir.
Internet sitenize koyacağınız ve veritabanına erişmesi gereken sayfalarınız i&#231;in bu işlemi ger&#231;ek Internet ortamında da yapmak zorundasınız. Veritabanı dosyanızı Internet sitenizde k&#246;k dizinine veya bir diğer dizine kopyaladıktan sonra sistem y&#246;neticisine ya elektronik mektupla, ya da evsahibi firmanın y&#246;netim ve teknik destek yardımı sağlayan sayfasında veritabanınızın dosya adını, yolunu, ve DSN olarak kullanmak istedeğiniz ismi bildirerek, bizim burada yaptığımız işi Server y&#246;neticisinin yapmasını sağlamamız gerekir.
ADO’nun bize sağladığı imkanlardan yararlanabilmek i&#231;in onun nesnelerini kullanılırız. Bu b&#246;l&#252;mde ADO’nun nesneleri ve metodlarını ele alacağız.
Connection (Veritabanına bağlantı)
ADO’dan yararlanabilmek i&#231;in kullanacağımız ilk nesne Connection’dır. Bu nesne ile veritabanı ile bağlantı sağlarız, yol a&#231;arız:
<%
Dim Veriyolu
Set Veriyolu = Server.CreateObject(“ADODB.Connection”)
Veriyolu.Open “Veri_adi”
%>
Burada, Server’ın CreateObject metodu ile ADOBD.Connection nesnesini oluşturuyoruz. Oluşturduğumuz bağlantıya istediğimiz değişken adını verebiliriz. Bu &#246;rnekte veriye kurduğumuz bu bağlantı Veriyolu adıyla biliyor. Bu yolla sağlayacağımız veriler, ASP programı boyunca bir isimle bilinmelidir. Veriyolunun a&#231;acağı veri k&#252;mesinin ismini buradaki “Veri_adi” kelimelerinin yerine yazarız. Bu isim, bağlantının .Open metodu ile a&#231;acağı verinin adıdır. Bu, kullanacağımız veritabanı dosyasının adı değildir. Bu isim ile s&#246;z konusu veritabanı dosyasını işletim sisteminin ODBC aracına tanıtırken kullandığınız isim aynı olmalıdır. Bir veritabanı dosyasını ODBC aracını kullanarak sisteme tanıtma (DSN-Data Source Name) ayarının nasıl yapıldığını daha &#246;nce ele aldık. Bu &#252;&#231; satırla, ASP programı, Server’dan ADO aracılığıyla, sistemin “Veri_adi” kelimelerinin yerine yazacağınız isimli veriye yol a&#231;acaktır. &#214;rneğin yukarıdaki kutuda oluşturduğumuz ODBC veri kaynağını kullanacağımız zaman, buraya “uyeler” kelimesini yazacağız,
Recordset (Kayıt dizisi)
Veritabanına bağlantıyı oluşturduktan sonra, buradaki tabir yerindeyse ham verileri, kullanılır kayıtlar haline getirmemiz gerekir. Bunu ise ADO’nun Recordset nesnesi sağlar. Kurduğumuz veriyolundan programımıza bilgi gelmesi i&#231;in .Execute (icra et) metodunu kullanırız; ancak bu komuta icra edeceği bir komut vermemiz gerekir.
Baştan beri ADO ile kullanabileceğimiz veritabanının SQL (sequyel okunur; Structured Query Language/Yapısal Sorgu Dili) uyumlu olması gerektiğini s&#246;yl&#252;yoruz. Bu dil, verilerin sabit diske yazılması ve okunmasını d&#252;zenleyen bir &#231;ok veritabanı dilinden sadece biri, fakat en yaygınıdır. Bir veritabanından veri okumak, veri değiştirmek veya eklemek i&#231;in komutlarımızı bu dille vermek zorundayız.
ASP amacıyla SQL komutlarından &#231;ok az kısmını kullanırız; bu bakımdan ASP Tasarımcısı olmak i&#231;in sınırlı da olsa SQL &#246;ğrenmek gerekir.
Hızlı SQL Kursu: Select
ASP ama&#231;lı olarak kullanacağımız komut ger&#231;ekte sadece SELECT’tir. Fakat hatırlamamız gereken veritabanı ilkeleri var. Bir veritabanı kabaca alanlar (s&#252;tunlar) ve bunların i&#231;inde yazılı değerler (satırlar) halinde olur; her satır bir elemanın değerleridir; ve Kayıt adını alır.
SELECT Bir veritabanından veri se&#231;meye yarar. SQL Sorgusu da denir. D&#246;rt b&#246;l&#252;m&#252; vardır. Tipik bir SELECT komutu ş&#246;yle yazılır:
SELECT alan1, alan2.. FROM tablo WHERE koşul = değer ORDER BY alan1
Se&#231;ilecek alanların adı SELECT komutunun ilk b&#246;l&#252;m&#252;n&#252; oluşturur. Bir veritabanında birden fazla tablo bulunabilir; se&#231;imin hangi tabloda yapılacağı FROM b&#246;l&#252;m&#252;nde g&#246;sterilir. Kimi zaman bir tablodaki alanda bulunan b&#252;t&#252;n kayıtları se&#231;mek isteyebiliriz; fakat &#231;oğu zaman se&#231;imin sınırlarını daraltmak i&#231;in s&#246;zgelimi bir alandaki değerlerin vereceğimiz bir koşula uymasını isteyebiliriz. Bu durumda “koşul = değer” testini WHERE b&#246;l&#252;m&#252;nde yaparız. Se&#231;ilen değerlerin hangi alandaki kayıtlara g&#246;re sıralanmasını istiyorsak, ORDER BY b&#246;l&#252;m&#252;nde bunu belirtelibiliriz. &#214;rnek:
SELECT Adi, Soyadi, TelNo FROM Telefonlar WHERE Alankodu = 0535 ORDER BY Adi
Bu komutla veritabanının Telefonlar isimli tablosundan Adi, soyadi ve TelNo adlı s&#252;tunlarındaki kayıtlardan Alankodu s&#252;tunundaki değeri “0535” olanları se&#231;miş oluruz. Bir tablodaki b&#252;t&#252;n alanların b&#252;t&#252;n değerlerini se&#231;mek i&#231;in SELECT komutunu ş&#246;yle yazarız:
SELECT * FROM Veri_adi
Buradaki “Veri_adi” kelimelerinin yerine DSN’e verdiğiniz adı (orneğin yukarıdaki &#246;rnekte olduğu gibi, “uyeler” kelimesini) yazacaksınız.
SQL’in INSERT, UPDATE ve DELETE komutlarının nasıl kullanıldığını &#246;ğrenirseniz, ADO nesnesinin bunlara denk gelen ve aşağıda nasıl kullanıldıklarını g&#246;receğimiz yeni kayıt ekleme, kayıtları g&#252;ncelleme ve silme metodları yerine kendi SQL komutlarınızı yazabilirsiniz.
Sağladığımız veri bağlantısını kullanarak, yararlanabileceğimiz bir veri grubu oluşturmak i&#231;in, yukarıda .Connection metodunu kullanırken yazdığımız kodu ş&#246;yle geliştirmemiz gerekir:
<%
Dim Veriyolu, Kayitdizisi
Set Veriyolu = Server.CreateObject(“ADODB.Connection”)
Veriyolu.Open “Veri_adi”
Set Kayitdizisi = Veriyolu.Execute(“SELECT * FROM Veri_adi”)
%>
Buradaki .Execute metodu, DSN’ini verdiğiniz kaynaktaki veritabanından verileri fiilen alıp getirmeye ve bir Recordset (Kayıt dizisi) oluşturmaya yarar. Kayıtları tek tek okuması i&#231;in Kayitdizisi’ne bir sonraki kayda gitmesini bildirmemiz gerekir. Bunu .MoveNext (bir sonrakine git) metodu ile yaparız. Okunan her kayıt Kayitdizi adlı değişkenin i&#231;indedir. Bu nesnenin elemanlarını herhangi bir d&#246;ng&#252; y&#246;ntemiyle ziyaret&#231;inin Browser penceresinde g&#246;r&#252;nt&#252;leyebiliriz; bir HTML etikenin i&#231;eriği yapabiliriz; veya başka bir şekilde kullanabiliriz. Aynı d&#246;ng&#252;, .MoveNext ile bir sonraki kaydın okunmasını da sağlayacaktır. Bunun bir &#246;rneğini daha sonra g&#246;receğiz.
Recordset.Open
Veritabanına dayanan Web uygulamalarımızda sorun buradaki gibi sadece veriyi okumakla bitmeyebilir; veriyi g&#252;ncelleştirmek veya silmek isteyebiliriz. Bunun i&#231;in doğruca ADO’nun .Recordset metodundan yararlanmamız gerekir. .Recordset metodu ne yapar? Tıpkı ekranınızdaki bir yazının i&#231;inde duran imle&#231; (cursor) gibi hayal&#238; bir imleci g&#246;t&#252;r&#252;r verilerinizin en başına koyar. Bu hayali imleci veritabanı &#252;zerinde dolaştırmak ve gittiği yerdeki değeri okutmak bizim işimizdir.
.Recordset metodu, ile bir veritabanını okuyacak imleci &#252;&#231; şekilde ayarlayabilirsiniz:
Static (Duragan) SELECT komutu icra edilir ve okunan kayıt arzu ettiğiniz değişkene yazılır. (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenStatic)
Forward only (Sadece ilerle) İmle&#231; veritabanı i&#231;inde sadece ileri doğru gider ve her seferinde bir kayıt okunur. (Varsayılan imle&#231; t&#252;r&#252; budur.) (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenForwardonly)
Dynamic (Dinamik) Veritabanına ulaşan ve değişiklik yapan başka bir kullanıcı varsa, bu değişiklik size anında yansıtılır. (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenDynamic)
Bu y&#246;ntemlerden birini se&#231;mekle veriyi belirli bir okuma tarzında a&#231;mış olursunuz. Bu y&#246;ntemlerden hangisini se&#231;tiğinizi .Recordset metodunu kullanacak olan .Open komutunun arg&#252;manı olarak a&#231;ık&#231;a belirtmeniz gerekir. ADO, bunun i&#231;in sizden sayılar halinde arg&#252;manlar ister.
ADO Sabit Değerleri
ADO+ODBC yoluyla kuracağımız veri bağlantıları, &#231;oğu zaman adeta şifreli ifadeler i&#231;erebilir ve bir &#231;ok komutun arg&#252;manı &#246;ğrenmesi zor sayılar halinde verilir. Microsoft ve kullanılmaya hazır ASP Uygulamaları &#252;reten firmalar, bu karmaşık ifadeleri d&#252;z metinler olarak ifade etmeye yarayan haric&#238; dosyalar (include files) hazırlar ve sunarlar. Bunlar arasında en yaygın olanı (bu kitap&#231;ığın kodları arasında bulunan) Microsoft’un ADOVBS (adovbs.inc) dosyasıdır. (Aynı dosyanın JavaScript s&#252;r&#252;m&#252; ise adojavs.inc ardını taşır). Bu dosyadan yararlanabilmek i&#231;in, sitenize kopyalamanız ve daha sonra sayfalarınıza şu kodu eklemeniz gerekir:
<!- - #include file=”adovbs.inc” - - >
Bu dosya, Server tarafından icra edilir ve ADO nesnesinin sayı halindeki b&#252;t&#252;n arg&#252;manlarını anlaşılabilir İngilizce kelimelere &#231;evirir. Bu dosyanın i&#231;eriğinden nasıl yararlanacağımızı ele alacağız.
Bir veriye bağlantıyı kurduktan sonra kayit dizimizi .Recordset metodu ile sağlayacaksak, yukarıdaki &#246;rnek kodumuzu ş&#246;yle yazmak gerekir:
<!- - #include file=”adovbs.inc” - - >
<%
Dim Veriyolu, Kayitdizisi, Sorgu
Set Veriyolu = Server.CreateObject(“ADODB.Connection”)
Veriyolu.Open “Veri_adi”
Set Kayitdizisi = Server.CreateObject(“ADODB.Recordset”)
Sorgu = “SELECT * FROM Veri_adi”
Kayitdizisi.Open Sorgu, Veriyolu, aOpenStatic
%>
Bu kod ile, .Recordset metodu son .Open komutu ile bizim i&#231;in veri bağlantısını sağlar; verdiğimiz SQL Sorgusu icra edilir ve kayıt diziniz Kayitdizisi’ne kaydedilmeye hazır hale gelir. Şimdi imlecinizi ilerleterek, veriyi fiilen okutmanız gerekir; ki bunu yapmak i&#231;in yukarıda kolayca .Execute metodu ile oluşturduğumuz kayıt dizisinde kullandığımız basit .MoveNext’ten daha &#231;ok imkana sahibiz:
MoveFirst: Kayıt dizisinin (Recordset’in) birinci satına gider.
MoveLast: Kayıt dizisinin (Recordset’in) son satına gider.
MoveNext: Kayıt dizisinin (Recordset’in) bir sonraki satına gider.
MovePrevious: Kayıt dizisinin (Recordset’in) bir &#246;nceki satına gider.
Move: Kayıt dizisinin (Recordset’in) i&#231;inde vereceğiniz sayıya g&#246;re ilerler. Bunun i&#231;in iki sayı vermeniz gerekir: başlangı&#231; noktası ve ilerlenecek kayıt sayısı.
Recordset.Update
Veritabanından aldığımız değerleri, kimi zaman ziyaret&#231;inin vereceği değerlerle veya ziyaret&#231;inin bir takım tercihleri sonucu g&#252;ncelleştirmemiz gerekir. Bu Recordset nesnesinin .Update metodu ile kolayca yapılır. Yalnız burada hassas bir nokta var: diyelim ki aynı anda iki veya daha fazla kullanıcı Web programımızın veritabanına ulaşır ve aynı anda değişiklik yaparlarsa ne olur?
Biraz &#246;nce Recordset’in .Open metodunun imle&#231;lerinden s&#246;z ederken, okumanın y&#246;n&#252;n&#252; veya imlecin hareket tarzını belirleyen arg&#252;manları sıralamıştık. Bu arg&#252;man dizisine bir yenisini ekleyerek, veritabanına erişimin niteliğini ve g&#252;ncelleştirmenin nasıl yapılacağı ve yansıtılacağını da belirleyebiliriz. Bu işlemin temel ilkesi veritabanı kayıtlarının kilitlenmesi esasıdır. Bu kilitlemenin t&#252;r&#252;n&#252; belirleyerek, g&#252;ncelleştirmenin de nasıl yapılacağını belirlemiş oluruz. Burada kullanacağımız arg&#252;manlar da ADO’nin şifreli sayıları olması gerekirken, adovbs.inc dosyası sayesinde İngilizce (ve dolayısıyla anlaşılabilir) kelimeler olur. advbs.inc dosyasını devreye soktuysanız, şu iki t&#252;r kiliti kullanabiliriz:
adLockReadOnly Kayıtların g&#252;ncelleştirilmesini &#246;nler; ziyaret&#231;imiz veritabanına kayıt yapmayacaksa, bu kilit t&#252;r&#252;n&#252; kullanmamız gerekir.
adLockOptimistic Veritabanına ek yapacaksak, mevcut kayıtmları d&#252;zelteceksek ve bazılarını sileceksek, bu kilit t&#252;r&#252;n&#252; kullanmamız gerekir.
Yukarıdaki kod &#246;rneğimizin sadece son satırını, bu metodu kullanmak amacıyla, ş&#246;yle yazabiliriz:
Kayitdizisi.Open Sorgu, Veriyolu, aOpenStatic, adLockOptimistic
Tabi&#238; bir veritabanını g&#252;ncelleştirmek i&#231;in imleci veritabanında doğru kaydın &#252;zerine g&#246;t&#252;rmek ve bu arada Recordset’in bize sağladığı mevcut verilerin yerine yeni değerleri atamış olmak gerekir. Bunu sağladıktan sonra b&#252;t&#252;n yapacağımız şey .Update metodunu kullanmak ibarettir:
Kayitdizisi(“Adi”) = “Necip Fazıl”
Kayitdizisi(“Soyadı”) “Dayanır”
Kayitdizisi.Update
Bu komut, imle&#231; o sırada hangi kaydın &#252;zerinde ise o kaydın “Adi” ve “Soyadi” alanlarındaki veriyi “Necip Fazıl” ve “Dayanır” haline getirir. Bu metodu kullanırken bir kaydın b&#252;t&#252;n alanlarını g&#252;ncelleştirmemiz veya g&#252;ncelleştirilmeyen alanları eski değerleri ile tekrar etmemiz gerekmez.
Recordset.Delete
Bir veritabanındaki kaydı silmek de ADO ile olduk&#231;a kolaydır. İmleci, silinecek kaydın &#252;zerine g&#246;t&#252;rd&#252;kten sonra, Recordset’in , .Delete metodunu &#231;ağırarak o andaki kayıt silinir. Bu metod, bir kaydı b&#252;t&#252;n alanlarındaki değerlerle birlikte (yani veritabanının bir satırını t&#252;m&#252;yle) siler:
Kayitdizisi.Delete
Recordset.AddNew
Bir veritabanına yeni kayıt eklemek istediğimizde, Recordset’in .AddNew (yeni ekle) metodundan yararlanırız. Bu metodun &#246;zelliği bizim imleci veritabanı i&#231;inde bir yere g&#246;t&#252;rme zorunluğumuz olmamasıdır. Bu metod kendiliğinden imleci dosyanın en son satırının altına g&#246;t&#252;r&#252;r. .AddNew metodu bir veritabanı dosyasına kayıt eklerken, veritabanında mevcut b&#252;t&#252;n alanlar i&#231;in değer vermenizi isteyecektir. &#214;rneğin
<%
Kayitdizisi.AddNew
Kayitdizisi(“Adi”) = “Necip Fazıl”
Kayitdizisi(“Soyadı”) “Dayanır”
Kayitdizisi(“TelNo”) = “0342-3390000”
Kayitdizisi.Update
%>
Veritabanına yeni kaydı, .Update metodunun yaptığına dikkat edin.
DSN’siz Veri Bağlantısı
Bu kadar DSN oluşturmayı &#246;ğrendikten sonra, “Aslında DSN olmadan da veritabanlarınıza ulaşabilirsiniz!” derlerse, herhalde &#231;ok sevinmeyiz. Ama işin doğrusu DSN yoludur. Fakat yine de DSN oluşturmadan veritabanına ulaşabileceğimizi bilmemiz gerekir.
DSN, genellikle Web Server’ları yavaşlatır; Web Server, DSN’ini belirttiğiniz veriye ulaşmak i&#231;in &#246;nce ODBC’nin yardımını ister; ODBC, bir takım s&#252;r&#252;c&#252;leri devreye sokar ve sonunda veriye ulaşırız. Bir DSN-verisine 20-30’dan fazla kullanıcı aynı anda eriştiği zaman bu yavaşlama g&#246;zle g&#246;r&#252;n&#252;r hale gelebilir. Bir s&#252;re &#246;ncesine kadar Microsoft firması, veriye dayanan Web sitelerinin veri-bağını DSN yoluyla kurmasını tavsiye ederken, şimdi MS yayınlarında sık sık DSN’siz veri bağlantısının da etkin şekilde kullanılacağı belirtiliyor.
Yukarıda verdiğimiz DSN &#246;rneği ş&#246;yle idi:
<%
Dim Veriyolu, Kayitdizisi
Set Veriyolu = Server.CreateObject(“ADODB.Connection”)
Veriyolu.Open “Veri_adi”
Set Kayitdizisi = Veriyolu.Execute(“SELECT * FROM Veri_adi”)
%>

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:39   #9
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




ALIŞTIRMA UYGULAMALARI
Bu b&#246;l&#252;mde, birinci kitap&#231;ıkta &#246;ğrendiklerimizi k&#252;&#231;&#252;k ASP uygulamalarında kullanacağız; ve b&#246;ylece son iki b&#246;l&#252;mde yer alan nisbeten daha b&#252;y&#252;k ASP Programları i&#231;in hazırlık yapmış olacağız. Bu b&#246;l&#252;mdeki &#246;rnekleri mutlaka kendiniz yazmalısınız ve a&#231;ıklanmamış kodlardan anlamadıklarınız olursa mutlaka daha &#246;nceki b&#246;l&#252;mlere d&#246;nerek g&#246;zatmalısınız. Bu b&#246;l&#252;mdeki kodları dikkatle incelerseniz, &#231;oğunda daha &#246;nce ele aldığımız temel VBScript komutlarının veya ASP nesnelerine ait metodlarının kimi zaman değişik tarzda kullanımına yer verdiğimizi g&#246;receksiniz. Temel kullanım bi&#231;imlerini &#246;ğrendikten sonra, mutlaka Microsoft’un MS-Developers Network sitesinde ([Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]) VBScript ve ASP konularındaki belgeleri ve eğitim metinlerini incelemelisiniz.
Doğum G&#252;n&#252; Hesabı
VBScript’in dil olarak bize sağladığı bazı kolaylıkları ASP teknolojisi ile birleştirebiliriz. ASP sayfalarımızda istediğimiz gibi HTML kodları da kullanırız. Bu &#246;rnekte, bu iki unsuru da birarada g&#246;receğiz. Aşağıdaki kodu dogumgunu01.asp adıyla kaydedin:
<% @LANGUAGE=VBscript %>
<%
Option Explicit
Response.Expires = 0
Dim serverSaat, kalanSaat
serverSaat = Time
' aşağıdaki satırda işaretler arasındaki yere kendi doğum g&#252;n&#252;n&#252;z&#252; yazın
kalanSaat = DateDiff("h",Now,#7/8/2000#)
%>
<HTML>
<HEAD>
<TITLE>Dogum G&#252;n&#252; Hesabı!</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>
<H3>
<CENTER>
<p>Selam:</p>
<p>Şu anda saat: <%=ServerSaat%></p>
<%
If kalanSaat > 0 Then
Response.Write "Doğum g&#252;n&#252;n&#252;ze " & kalanSaat & " saat var." & VbCrLf
ElseIf kalanSaat < 0 Then
Response.Write "Doğum g&#252;n&#252;n&#252;z " & kalanSaat & " ge&#231;miş buluyor." & VbCrLf
Else
Response.Write "<b>Doğum g&#252;n&#252;n&#252;z kutlu olsun!</b>" & VbCrLf
End If
%>
</CENTER>
</H3>
</BODY>
</HTML>
Bu kodda bulunan ASP nesnelerini ve metodlarını kolayca g&#246;r&#252;yor olmalısınız. Tanımlamadığımız bir değişken kullanmayı veya değişken adlarını yanlış yazmayı &#246;nleyen Option Explicit ifadesi dikkatinizi &#231;ekiyor olmalı. Sayfamızda bir hesap yapılacağı i&#231;in Browser tarafından ge&#231;ici Internet dosyaları arasında (cache) saklanmasını istemediğimizi, Response.Expires’ın değerini 0 yaparak belirtiyoruz. iki değişken tanımlıyoruz (serverSaat ve kalanSaat) ve bunlardan birincisine Server’ın o andaki saatini Time fonksiyonu ile atıyoruz. İkinci değişken ise hesaplama sonucu belirlenecek. Bu arada ASP programının hangi tarihe ka&#231; saat kaldığını hesaplamasını istiyorsak, kalanSaat’i belirleyecek form&#252;le o tarihi yazıyoruz. Bu form&#252;le dikkatle bakalım:
kalanSaat = DateDiff("h",Now,#7/8/2000#)
DateDiff ve DateAdd, VBScript’in vereceğiniz iki tarih arasında, yine vereceğiniz bi&#231;ime g&#246;re farkı bulmasını veya toplamasını sağlar. Buradaki “h” hesap sonucunun saat olarak verilmesini istediğimiz g&#246;sterir. “d” ise sonucu g&#252;n olarak istediğimiz anlamına gelir. Now, Server’ın o andaki saatidir; ”#” işaretleri arasında ise hesabın yapılacağı tarih, veya buradaki &#246;rnekte doğum g&#252;n&#252;n&#252;z yer alıyor. kalanSaat değişkeninin değeri bu hesaplama sonucu olarak doğum g&#252;n&#252;n&#252;ze kalan saat olacaktır.
Kodumuzun geri kalan b&#246;l&#252;m&#252;nde ise elde ettiğimiz sonucu Browser’a yollayan bir If se&#231;imi var: doğum g&#252;n&#252;n&#252;ze kalan saat 0’dan b&#252;y&#252;kse veya k&#252;&#231;&#252;kse bunu farklı c&#252;mlelerle belirtiyoruz. Kalan s&#252;re 0 ise, bug&#252;n doğumg&#252;n&#252;n&#252;z demektir! (ASP ile bu kadar uğraşırsa, insanın doğum g&#252;n&#252;n&#252; filan unutması normaldir. &#252;z&#252;lmeyin!)
Daha &#246;nce VBScript’in metin ve değişkenleri birbirine “&” işareti ile eklediğini g&#246;rm&#252;şt&#252;k. VBScript ile yazdırdığımız satırların sonuna kimi zaman <BR> kodu koyarak, yeni satırın bir satır aşağıdan başlamasını sağladığımızı hatırlıyor olmalısınız. Burada & VbCrLf şeklinde g&#246;rd&#252;ğ&#252;m&#252;z ifade de bunu sağlar. Bu, Visual Basic’in “alt satıra ge&#231;, başa git!” (Carriage Return, Line Feed) komutudur.
Dedik ki, DateDiff ve DateAdd fonksiyonlarının, sonucu g&#252;n olarak vermesini istiyorsanız, “d” arg&#252;manını kullanmanız gerekir. Şimdi burada &#246;ğrendikleriniz bu programı doğumg&#252;n&#252;n&#252;ze kalan saati değil de g&#252;n&#252; hesaplayacak şekilde değiştirebilir misiniz? (Ortaya &#231;ıkartacağınız kodu bu kitap&#231;ığın kodları arasındaki dogumgunu02.asp dosyası ile karaşılaştırabilirsiniz.)
&#199;ift Tırnak Gerekince!
Kimi zaman ASP yoluyla ziyaret&#231;ininr Browser’ına HTML kodu g&#246;ndermek gerektiğinde HTML’in gerektirdiği &#231;ift tırmak işaretini yazdırma sorunuyla karşılaşırız. VBScript’in gereği olan &#231;ift-tırnak işaretinin i&#231;ine koyacağımız HTML’in gereği olan &#231;ift tırnak, ASP hatasına yol a&#231;ar, C'den t&#252;retilen dillerde ters b&#246;l&#252; işaretiyle yaptığımız t&#252;rden, kontrol karakterlerinin metin olarak anlaşılmaması işini (ESCape-ing'i) VBScript’te t&#252;rl&#252; şekillerde yapabiliriz. Burada, yerine g&#246;re, &#252;&#231; y&#246;ntemden yararlanabiliriz işe yarar:
1. Tırnak işareti gereken yerde iki kere tırnak yazmak;
2. İ&#231;erdeki tırnak yerine tek-tırnak kullanmak
3. İ&#231;erdeki tırnak yerine & Chr(34) & kullanmak. (Bu y&#246;ntemi kullandığımızda "dışardaki" tırnak diye bir şey kalmadığına dikkat etmek gerekir.)
&#214;rnekler:
objMetin.WriteLine("<%@ LANGUAGE=""VBScript""%\>")
objMetin.WriteLine("<%@ LANGUAGE='VBScript'%\>")
objTsOut.WriteLine("<%@ LANGUAGE=" & Chr(34) & "VBScript" & Chr(34) & "%\>")
HTML Dışında İ&#231;erik
HTTP iletişiminde istemci Browser ile Server arasında her talep ve sunuşla birlikte bir dizi HTTP Header (başlık) bilgisi g&#246;nderildiğini biliyoruz. Bu bilgiler arasında neler bulunduğunu dabu kitap&#231;ığın kodları arasında bulunan SerDeg.asp dosyasını &#231;alıştırarak inceleyebilirsiniz. Browser penceresinde beliren bilgilere dikkat ederseniz, Browser, Server’a HTTP yoluyla kabul edebileceği bilgi t&#252;rlerini de sıralıyor:
HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Burada d&#252;zyazı (text/plain) t&#252;r&#252;n&#252;n bulunmadığını g&#246;r&#252;yorsunuz. Fakat ASP yoluyla, sayfanıza d&#252;z yazı g&#246;nderebilirsiniz. Aşağıdaki kodu duzyazi.asp adıyla kaydedin, ve &#231;alıştırın:
<% @LANGUAGE=VBscript %>
<%
Response.ContentType = "text/plain"
Response.Expires = 0
%>
Bu dosyada HTML etiketi kullanmıyoruz. Metin tamamen bir d&#252;z yazıdan ibaret. İ&#231;inde <BR> kodu bulunmadığı halde satırlar Enter'a bastığımız yerde alt satıra ge&#231;ecektir. Bu kodu yazarken buradaki &#246;rnekte g&#246;rd&#252;ğ&#252;n&#252;z satır sonlarında Enter’a basmalısınız.
Genellikle HTML sayfalarımızı tasarlarken i&#231;erik t&#252;r&#252;n&#252; belirten Content-Type &#246;zelliğini yazmayız; &#231;&#252;nk&#252; Browser, i&#231;erik t&#252;r&#252; belirtilmemişse gelen belgenin mutlaka “text/html” olduğunu varsayar. Fakat burada olduğu gibi, i&#231;inde bir tek HTML etiketi (hatta <HTML> etiketi bile) olmayan bir metni Browsar’a g&#246;nderebilir ve istediğimiz şekilde g&#246;r&#252;nt&#252;letebiliriz. Bunu Response.ContentType = "text/plain" ifadesi sağlamaktadır.
Response nesnesi, varsayılan t&#252;rler dışında sadece d&#252;z yazı t&#252;r&#252; g&#246;ndermekle kalmaz, Browser’ın kabul edebileceği ve HTTP’nin aktarılmasına elverişli olduğu her t&#252;rl&#252; dosyayı g&#246;nderebilir. Bu dosya t&#252;rlerinin hangileri olabileceğini &#231;evre değişkenlerinden HTTP_Accept’in i&#231;inde g&#246;rebilirsiniz. Bunu sınamak i&#231;in duzyazi.asp’nin Content-Type satırını şu şekilde değiştirin ve dosyayı msword.asp adıyla kaydedin:
Response.ContentType = "application/msword"
Bu dosyayı &#231;alıştırdığınızda, Broewser t&#252;r&#252;n&#252;ze ve ayarlarınıza ve sisteminizde MS-Word programının bulunup bulunmamasına bağlı olarak, ya doğruca ya da size sorarak, bilgisayarınız MS Word kelime işlemcisini a&#231;acaktır:
Bu imkandan ziyaret&#231;iye resim veya diğer t&#252;r dosyaları g&#246;ndermek i&#231;in yayarlanabiliriz. Ancak bir resim dosyasını g&#246;nderirken, metin vermek yerine dosya yolu ve adını belirtmemiz gerekir.
Başka Sayfaya Y&#246;nlendirme
Diyelim ki ziyaret&#231;ilerimizin Web programımızda belirli işleri yapabilmeleri veya eski ifadesiyle sitemizde belirli bir sayfaya erişmek i&#231;in kayıt yaptırmış olmaları gerekiyor; bu kaydı yaptırmamış olanları kayıt sayfasına y&#246;nlendirmek istiyoruz. Birazdan form yoluyla ziyaret&#231;iden bilgi alma ve bunu işlemeyi g&#246;receğiz, ama şimdilik sadece bu senaryonun ikinci kısmını ele alalım: ziyaret&#231;imizi başka sayfaya y&#246;nlendirelim. Bunun i&#231;in iki ayrı sayfa yapacağız. &#214;nce şu kodu, gonder.asp adıyla kaydedin:
<% @LANGUAGE=VBscript %>
<%
Response.Redirect("yeni.asp")
Response.Expires = 0
%>
<HTML>
<HEAD>
<TITLE>ASP ILE YONLENDİRME</TITLE>
</HEAD>
<BODY>
Bu sayfada yazılı olanları okumanız m&#252;mk&#252;n olmayacak<br> &#231;&#252;nk&#252; bu sayfa sizi başka sayfaya g&#246;nderecek..
</BODY>
</HTML>
Şimdi şu kodu da yeni.asp adıyla kaydedin:
<HTML>
<HEAD>
<TITLE>YENİ SAYFA</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>
<%= “Sizi buraya başka sayfa g&#246;nderdi.. <BR>”%>
</BODY>
</HTML>
gonder.asp’yi &#231;ağırın; karşınıza yeni.asp’nin i&#231;eriği gelecektir; &#231;&#252;nk&#252; gonder.asp kendisinden beklediğimizi yapacak ve sizi yeni.asp’ye g&#246;nderecektir. Bunu “Response.Redirect” metodu yapmaktadır. Bu metodun arg&#252;manı olarak kendi programımızın bir başka sayfasını verebileceğiz gibi, bir Internet sitesinin URL’ini de verebiliriz.
Ziyaret&#231;iden Bilgi Alma
İstersek adına Web Programı diyelim, sitemize ziyaret&#231;ilerin bilgi ulaştırması ancak HTML’in Form etiketi yoluyla olur. Klasik HTML+CGI y&#246;ntemleri ile ASP tekniğinde Form etiketlerinin işlevleri arasında bir fark yoktur. Ancak aralarındaki benzerlik de hemen hemen bundan ibarettir. Klasik HTML+CGI y&#246;nteminde Form’larımızın Action &#246;zelliğine değer olarak &#231;oğu zaman bir CGI programının yolunu ve adını yazarız; oysa ASP’de Form bu bilgileri kendisinin de i&#231;inde bulunduğu ASP sayfasına g&#246;nderebilir; ve &#246;rneğin formun eksik doldurulup doldurulmadığını sınayabilir.
HTML bilgilerinizi tazelerseniz; bir Form’dan Server’a iki metodla bilgi gelebilir: Get ve Post y&#246;ntemleriyle. Get, Browser’ın bilgileri yumak yapıp, aradaki boşlukları kaldırarak ve ASCII olmayan karakterleri URL koduyla şifreleyerek Query_String i&#231;ine yazdırmasını sağlar. Diğer y&#246;ntemi birazdan ele alacağız.
K&#252;&#231;&#252;k bir form oluşturalım ve bu formdan Get yoluyla gelecek bilgileri daha sonra nasıl kullanabileceğimizi g&#246;rmek i&#231;in, şimdilik sadece sayfamıza yazdıralım. Şu kodu miniform_get.asp adıyla kaydedin:
<% @LANGUAGE=VBscript %>
<%
Option Explicit
Response.Expires = 0
Dim strAdi, strSoyadi, hamBilgi, islenmisBilgi
If Request.ServerVariables("QUERY_STRING") <> "" Then
strAdi = Trim(Request.QueryString("adi"))
strSoyadi = Trim(Request.QueryString("soyadi"))
hamBilgi = Trim(Request.QueryString("mesaj"))
islenmisBilgi = Replace(hamBilgi, vbcrlf, "<BR>" & vbcrlf)
%>
<html>
<head>
<title>Mini Form</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>
Script'imize Form'dan bilgi ulaştı <BR><BR>
Gelen bilgiler:<BR>
Formu dolduran kişinin adı: <%= strAdi%> <BR><BR>
Formu dolduran kişinin Soyadı: <%= strSoyadi%> <BR><BR>
Ham Bilgiler: <%= hamBilgi%> <BR><BR>
İşlenmiş Bilgiler: <%= islenmisBilgi%> <BR><BR>
"Query_String" olarak gelen bilgi: <BR>
<%= Request.ServerVariables("QUERY_STRING")%>
</body>
</html>
<%
Else
%>
<html>
<body>
Bize bilgi verir misiniz?<BR>
<FORM ACTION= "<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="GET">
Adınız: <INPUT TYPE="Text" NAME="adi"><BR>
Soyadınız: <INPUT TYPE="Text" NAME="soyadi"><BR>
Mesajınız: <TEXTAREA NAME="mesaj">Mesajınızı buraya yazın!</TEXTAREA><BR>
<INPUT TYPE="Submit" NAME="G&#246;nder" VALUE="G&#246;nder">
</FORM>
</body>
</html>
<% End If %>
Kodumuzun bir değişken tanımladığımız ve Form’dan gelen bilgileri işleyen b&#246;l&#252;m&#252;, bir de hen&#252;z bu bilgi gelmeden &#246;nce Form’u oluşturan b&#246;l&#252;m&#252; olduğuna dikkat ediyor musunuz? Bu iki b&#246;l&#252;m&#252; bir If sınama deyimiyle oluşturduğumuzu da g&#246;r&#252;yorsunuz.
ASP tekniği ve VBScript’in kolaylıkları birleşince, CGI’da olduğu gibi, Formdan gelen bilgileri &#246;zel fonksiyonlar yazarak ayıklamamız gerekmez. ASP’nin anladığı şekliyle, Query_String Form’dan GET metoduyla gelen bilgileri Form’un bilgileri atadığı değişkenlerin adlarıyla eşleştirerek tutar; ve bize sadece Form’daki değişkenlerin değerlerini, istiyorsak, başka değişkenlere atamak kalır. Burada Form’un “adi” olan değişkenini bir String değişkeni olan strAdi değişkenine, yine Form’un “soyadi” olan değişkenini başka bir bir String değişkeni olan strSoyadi değişkenine atıyoruz. Bunu yapmamızın sebeplerinden biri iki dizi değişkenden hangisinin ASP tarafında kullanıldığını bilmektir.
Form’un &#252;&#231;&#252;nc&#252; değişkeni olan “mesaj” ise ASP tarafından işlenirken, iki şekilde ele alınacak: hamBilgi değişkeninin değeri olarak, ve bunu Replace() fonksiyonu ile işledikten sonra atayacağımız islenmisBilgi değişkenini değeri olarak.
Replace() fonksiyonu, bir değişkende bir değeri bulur ve arzu ettiğimiz bir başka değerle değştirir. &#220;&#231; arg&#252;man alır: i&#231;inde arama ve değişiklik yapılacak değişken, aranacak değer ve yerine konacak değer. Burada iki veya daha fazla paragraf i&#231;eren bir mesajın i&#231;indeki satırbaşı-yeni paragraf karakterini, HTML’in anlayacağı <BR> ve satırbaşı karakteri ile değiştiriyoruz.
Şimdi miniform_get.asp’yi &#231;alıştırın, doldurun (mesaj b&#246;l&#252;m&#252;nde iki paragraf oluşturmak i&#231;in bir yerde Ctrl+Enter’a basmayı unutmayın! Yoksa işlenmiş bilgi ile ham bilginin farkını g&#246;remeyiz!) ve G&#246;nder tuşunu tıklayın. Bu arada Browser’ınızın URL hanesine bakın. Bu Get metodunun bilgi g&#246;nderme şeklidir. Bilgiler URL-kodu olarak değiştirilir ve gideceği sayfanın adına, soru işareti ile eklenerek, g&#246;nderilir. (Tabii ziyaret&#231;iniz yıldızlar halinde g&#246;r&#252;nt&#252;lenen bir parola yazdıysa onu da burada a&#231;ık şekilde g&#246;recektir!)
Bizim Form bilgilerimiz hangi sayfaya g&#246;nderiliyor? Yine kendisine. Bunu Form etiketinin Action &#246;zelliğinin karşısında yazılı olan VBScript kodu sağlıyor. Bu yolla gelen bilgi, şuna benzer olmalıdır:
Script'imize Form'dan bilgi ulaştı
Gelen bilgiler:
Formu dolduran kişinin adı: Kroninukus
Formu dolduran kişinin Soyadı: Computerium
Ham Bilgiler: Merhaba Ben &#252;niversiteyi yeni bitirmiş bir gencim!
İşlenmiş Bilgiler: Merhaba
Ben &#252;niversiteyi yeni bitirmiş bir gencim!
"Query_String" olarak gelen bilgi:
adi=Kroninukus+&soyadi=Computerium+&mesaj=Merhaba% 0D%0ABen+%FCniversiteyi+yeni+bitirmi%FE+bir+gencim %21+%0D%0A&G%F6nder=G%F6nder
Replace() fonksiyonunun, mesajın i&#231;indeki CRLF karakterini bulup yerine <BR> koyduğuna dikkat edin. Query_String’in yazdığınız ad ve soyad ile mesajı nasıl yumak (tek String) yaptığına bakın. Ve programımızın bu yumaktan bilgileri alıp, yeni değişkenlere atayarak Browser penceresinde nasıl g&#246;r&#252;nt&#252;lediğini inceleyin.
Bu programın canalıcı noktası, Request nesnesinin ServerVariables kolleksiyonunda, Query_String koleksiyonunu kullanmasıdır. &#199;&#252;nk&#252; Get, Form’un sağladığı bilgileri bu koleksiyona kaydetmiş bulunuyor.
Şimdi aynı işi Post metodu ile yapalım. Bunun i&#231;in biraz &#246;nce kaydediğiniz kodda şu değişiklikleri yapın ve miniform_post.asp adıyla kaydedin:
<% @LANGUAGE=VBscript %>
<%
Option Explicit
Response.Expires = 0
Dim strAdi, strSoyadi, strBilgi
If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then
strAdi = Trim(Request.Form("adi"))
strSoyadi = Trim(Request.Form("soyadi"))
strBilgi = Trim(Request.Form("mesaj"))
strBilgi = Replace(strBilgi, vbcrlf, "<BR>" & vbcrlf)
%>
<html>
<head>
<title>Mini Form (Post)</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>
Script'imize Form'dan bilgi ulaştı <BR><BR>
Gelen bilgiler:<BR>
Formu dolduran kişinin adı: <%= strAdi%> <BR><BR>
Formu dolduran kişinin Soyadı: <%= strSoyadi%> <BR><BR>
Mesaj: <%= strBilgi%> <BR><BR>
</body>
</html>
<%
Else
%>
<html>
<body>
Bize bilgi verir misiniz?<BR>
<FORM ACTION= "<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Adınız: <INPUT TYPE="Text" NAME="adi"><BR>
Soyadınız: <INPUT TYPE="Text" NAME="soyadi"><BR>
Mesajınız: <TEXTAREA NAME="mesaj">Mesajınızı buraya yazın!</TEXTAREA><BR>
<INPUT TYPE="Submit" NAME="G&#246;nder" VALUE="G&#246;nder">
</FORM>
</body>
</html>
<% End If %>
İki Miniform sayfası arasındaki değişikliği farkettiniz mi? &#214;nce, Form etiketinin METHOD &#246;zelliğinin Post olduğuna dikkat edin. Bu y&#246;ntemle gelen bilgiler, Request nesnesinin Form kolleksiyonuna, işlenmiş (yani değişken=değer &#231;iftleri halinde yazılmış) olacağı i&#231;in, Form bilgilerini yeni değişkenlere atama ifadelerimizi de farklı yazıyoruz. &#214;nce formdan ger&#231;ekten bilgi gelip gelmediğini Content_Length değişkeninin boyutunun sıfır olup olmadığına bakarak anlıyoruz. Bu değişkenin boyutu 0 ise form i&#231;i boş g&#246;nderilmiş demektir; bu durumda ziyaret&#231;iyi form’u doldurması i&#231;in uyaran bir Sub’a g&#246;nderebiliriz. Form doldurulmuş ise, kodumuzun birinci b&#246;l&#252;m&#252; yapması gereken değişkenlere atama işlemini yapıyor; ve sonu&#231;ları ziyaret&#231;inin Browser penceresine yazıyor. Daha sonra yapacağımız &#246;rnek Konuk Defteri’nde bu bilgileri ziyaret&#231;inin ekrarına değil, bir metin dosyasına yazacağımızı g&#246;receksiniz.
Form etiketlerinden bilgi alma
Form i&#231;inde kullandığımız bir &#231;ok etiket, Server’a farklı bi&#231;imde bilgi g&#246;nderir. Yukarıdaki &#246;rnekte g&#246;rd&#252;ğ&#252;m&#252;z Input ve Textarea etiketleri, kendi adlarını değişken adı yaparak ve değişkene ziyaret&#231;inin yazdığı metni değer olarak atayarak, g&#246;nderir. Fakat HTML’in <SELECT MULTIPLE> etiketi biraz daha dikkat etmemizi gerektirir; &#231;&#252;nk&#252; ziyaret&#231;i bu etiketle oluşturduğunuz se&#231;eneklerden birden fazla se&#231;ebilir ve bunlar Server’a bir kolleksiyonun elemanları olarak gelir. Ş&#246;yle bir &#246;rnek d&#252;ş&#252;n&#252;n:
<SELECT NAME=”CokluSecme” SIZE=”3” MULTIPLE>
<OPTION VALUE=”Emrah” SELECTED> Emrah
<OPTION VALUE=”Karacaoglan”> Karacaoğlan
<OPTION VALUE=”Sulari”> Davud Sulari
<OPTION VALUE=”Daimi”> Aşık Daimi
<OPTION VALUE=”Pirsultan”> Pir Sultan Abdal
Browser, kullanıcı birden fazla se&#231;im yaptıysa, yapılan se&#231;im sayısını, yani ka&#231; se&#231;enek se&#231;ildiğini bize bildirir ve bu Request nesnesinin Form kolleksiyonunda “CokluSecme” elemanının “.Count” değişkenine yazılır. Bu bakımdan “CokluSecme” kendisi bir kolleksiyondur. Yani, bu değişkenin değerini kullanarak, “CokluSecme” kolleksiyonunun elemanlarını tek tek okutmak i&#231;in bir For d&#246;ng&#252;s&#252;nden yararlanabiliriz:
For sayac = 1 to Request.Form(“CokluSecme”).Count
Response.Write(sayac & “. se&#231;im: “ & Request.Form(“CokluSecme”)(sayac) & “<BR>”)

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:40   #10
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




Next
Bu iki kodu, miniform_post.asp’ye katabilir misiniz? (Ortaya &#231;ıkartacağınız &#246;rneği bu kitap&#231;ığın &#246;rnekleri arasındaki miniform_multi.asp ile karşılaştırabilirsiniz.)
Parola İle Sayfa Koruma
“Internet’te gizlilik olmaz!” ilkesine rağmen, bazen &#246;yle sayfalarımız olur ki, bunların i&#231;eriğini b&#252;t&#252;n Internet ziyaret&#231;ilerinin g&#246;rmesini istemeyebiliriz. &#214;rneğin derneğimizin veya grubumuzun telefon numaraları ve elektronik posta adreslerini g&#246;steren sayfamıza sadece grup &#252;yelerinin ulaşmasını arzu edebiliriz. Bir Web sitesinin herhangi bir sayfasını ziyaret&#231;ilerden gizlemek i&#231;in sayfanın a&#231;ılmasını belirli bir şartın yerine gelmiş olmasına, mesela ziyaret&#231;inin bir Form aracılığıyla bize doğru parolayı g&#246;ndermesine bağlayabiliriz.
Bu t&#252;r sayfa gizleme yollarını istemci-tarafında &#231;alışan bir programla yapmak m&#252;mk&#252;nd&#252;r; ancak sayfa gizlemenin mantığına aykırıdır. s&#246;zgelimi bir Form’da parola alanına girilecek bilginin ger&#231;ek parola ile karşılaştırılmasını bir Script fonksiyonu ile yapmaya kalkarsak, ziyaret&#231;inin kaynağı g&#246;r&#252;nt&#252;lemesi halinde ziyaret&#231;inin girdisi ile parolayı karşılaştıran Script, ve tabi&#238; bizim kıymetli parolamız, ziyaret&#231;i tarafından &#246;ğrenilecektir. Oysa ASP kodları ile gizlediğimiz parolanın ziyaret&#231;iye g&#246;r&#252;nmesi imkansızdır; &#231;&#252;nk&#252; ASP kodları hi&#231; bir zaman ziyaret&#231;iye g&#246;nderilmeyeceği i&#231;in parola sınayan program da ziyaret&#231;iye gidemeyecekti
--------------------
&#214;nce şu kodu, parola.asp adıyla kaydedelim:
<%@ LANGUAGE="VBSCRIPT" %>
<%
Response.ExpiresAbsolute = Now() - 1 'Sayfanın yedeklenmesini &#246;nleyelim
FormParola = ucase(trim(request.form("FormParola")))
If FormParola <> "PAROLA" Then
%>
<HTML>
<HEAD>
<TITLE>ASP ILE PAROLA</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="#ccffff" text="black" link="navy" vlink="purple">
<DIV align="center">
<FORM action="parola.asp" method="POST">
<h2>Ana sayfaya girmek i&#231;in parolayı yazınız (Mesela, PAROLA) ?</h2>
*<input type="password" name="FormParola" size="10"><br><br>
*<input type="submit" value="Girebilir Miyim?">
</form>
</div>
</body>
</html>
<% Else %>
Şimdi ana sayfaya girmiş oldunuz..
<% End If %>
Şimdi kodumuzu ayrıntılı indereleyebiliriz. &#214;nce, bu sayfanın ziyaret&#231;inin Browser’ı tarafından ziyaret&#231;inin bilgisayarında yedeklenmesini &#246;nlediğimize dikkat edin: Bunu Response nesnesinin .Expries metodunun farklı bir t&#252;r&#252; ile yapıyoruz. .ExpiresAbsolute sadece .Expires metodundan farklı olarak, bizden bir değer ister. Bu değerin zaman olarak verilmesi gerekir. Burada VBScript’in o andaki zamanı belirten Now() fonksiyonu ile yapıyoruz ve bu fonksiyonun verdiği değerden (yani o andaki saatten) 1 saat &#231;ıkartıyoruz. B&#246;ylece sayfanın ge&#231;erliği &#231;oktan dolmuş oluyor. Browser, bu ifadeyi g&#246;rd&#252;ğ&#252; anda sayfanın daha sonra başvurulmak &#252;zere bir kopyasını saklamayacaktır. Bunu neden yapıyoruz? Diyelim ki parolayı doğru bilen bir ziyaret&#231;i kullandığı bilgisayarın başından kalktı ve yerine başka bir kullanıcı ge&#231;ti. Bu kişinin Browser’ın Yenile d&#252;ğmesini tıklaması halinde bizim &#246;zene-bezene gizlediğimiz sayfa yeniden g&#246;r&#252;nt&#252;lenecektir. Oysa Browser’a bu sayfanın artık ge&#231;erli olmadığını bildirmekle, yenilenme işleminin Cache bellekten (ziyaret&#231;inin bilgisayarında sabit diskte kaydedilen kopyadan) değil de, mutlaka Server’dan yapılmasını istiyoruz.
Sayfamız a&#231;ılırken, (kodumuzun d&#246;rt ve beşinci satırında) kendi i&#231;erdiği formda bilgi olup olmadığını sınıyor. Bunu formdaki formParola isimli INPUT alanının değerini atadığımız değişkenin i&#231;eriğini parola olarak se&#231;tiğimiz kelime karşılaştırarak yapıyoruz. Eğer bu değişken (buradaki &#246;rnekte “PAROLA” kelimesine) eşit değilse, yani parola yanlış veya boşsa If sorgusu olumlu sonu&#231; verecek ve program devam edecektir. If sorgusu yanlış sonu&#231; vermiş olsaydı, yani ziyaret&#231;i Form’a bilgi girmiş ve bu bilgi bizim karşılaştırmayı yaptığımız kelimeye eşit olmuş olsaydı, program ELSE ifadesine atlayacaktı. Programın devamı formu oluşturmaktadır; ELSE ifade ise formu atlamakta ve ziyaret&#231;inin Browser penceresine “Şimdi ana sayfaya girmiş oldunuz” c&#252;mlesini yazdırmaktadır. Tabi&#238; ger&#231;ek bir uygulamada bu c&#252;mlenin yerinde ger&#231;ek bir sayfanın &#246;geleri yer alacaktı. Bu y&#246;ntemi uygularken sayfanın VBScript’nin End If ifadesiyle bittiğine dikkat edin.
Dinamik İ&#231;indekiler Sayfası
Internet sitemizin sayfaları genellikle &#231;ok &#246;zenilmiş, cicili-bicili, albenisi olan, g&#246;rsel odak noktalarının oluşmasına dikkat edilmiş tasarımlar olur. Fakat bazen, &#246;nemli olan sadece bir dizindeki b&#252;t&#252;n HTML ve ASP belgelerinin adlarını ve başlıklarını liste halinde ziyaret&#231;iye sunmaktır. B&#246;yle bir sayfada da tasarımın g&#246;rsel ilkelerine dikkat edilebilir. Fakat burada &#246;nemli olan, sayfanın kendi kendisini inşa etmesi ve sayfanın bir dizinin i&#231;indeki t&#252;m dosyaları zyaret&#231;iye listeyen b&#246;l&#252;m&#252;n&#252;n otomatik olarak g&#252;ncellenmesidir. Bunu, bir HTML sayfası oluşturan ASP programı olarak tasarlayabiliriz. Aşağıdaki biraz uzunca kodu, menu.asp adıyla kaydedin veya bu kitap&#231;ığın &#246;rnek dosyaları arasında bulun:
<%@ LANGUAGE=VBSCRIPT %>
<%
Server.ScriptTimeOut = 300 *'Server'a daha &#231;ok zaman tanımak i&#231;in
strMenuSayfaURL = "/menu.htm" 'oluşturacağımız sayfanın yolu
strListKlasor = "/" * * *'i&#231;indekileri bulacağımız dizin
%>
<HTML>
<TITLE>ASP ILE MENU OLUSTURMA</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
<META http-equiv="Copyright" content="Alex Homer">
<BODY>

<%
Response.Write "<P>Men&#252; sayfası oluşturuluyor: " & strMenuSayfaURL & " ...</P>"

'men&#252; sayfası olacak d&#252;z yazı dosyasını oluşturalım
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDosyaAdi = Server.MapPath(strMenuSayfaURL)
Set objMenuSayfa = objFSO.CreateTextFile(strDosyaAdi, True) 'dosyanın &#252;st&#252;ne yaz

'men&#252; sayfasının başlık b&#246;l&#252;m&#252;n&#252; yazalım
objMenuSayfa.WriteLine "<HTML><BODY><P><B>Dosyaların listesi</B></P>"

'belirtilen dizindeki dosyaların listesini i&#231;eren kolleksiyonu oluşturalım
Set objKlasor = objFSO.GetFolder(Server.MapPath(strListKlasor))
Set kolDosyalar = objKlasor.Files

'Her bir dosyanın başlığını okuyarak listemizi yapalım
For Each objDosya in kolDosyalar

'dosya adının uzantısı ASP ve HTM olanları ayıralım
strDosyaTuru = objFSO.GetExtensionName(objDosya.Name)
If (strDosyaTuru = "asp") Or (Left(strDosyaTuru, 3) = "htm") Then

'dosyanın t&#252;m&#252;n&#252; okuyup bir String'de tutalım
Set objOku = objDosya.OpenAsTextStream(1) 'okumak i&#231;in
strIcerik = objOku.ReadAll
objOku.Close

'i&#231;inden başlık b&#246;l&#252;m&#252;n&#252; alalım
strBaslik = ""
intBaslangic = Instr(UCase(strIcerik), "<TITLE>") + 7
intSon = Instr(UCase(strIcerik), "</TITLE>")
If (intBaslangic > 0) And (intSon > intBaslangic) Then
strBaslik = Trim(Mid(strIcerik, intBaslangic, intSon - intBaslangic))
End If
If Len(strBaslik) = 0 Then strBaslik = "Adsız sayfa '" & objDosya.Name & "'"

'Men&#252; sayfası i&#231;in metni oluşturalım
strBuDosyaURL = strListKlasor & objDosya.Name
strKopru="<A HREF=" & Chr(34) & strBuDosyaURL & Chr(34) & ">" & strBaslik & "</A><BR>"
objMenuSayfa.WriteLine(strKopru)
End If
Next

'Men&#252; sayfasının son b&#246;l&#252;m&#252;n&#252; yazalım
objMenuSayfa.WriteLine "</BODY></HTML>"
objMenuSayfa.Close
Response.Write "<P>Men&#252; sayfası oluşturuldu.</P>"
%>
<P><A HREF="<% = strMenuSayfaURL %>">Men&#252; sayfasını a&#231;</A></P>
</BODY>
</HTML>
Programın daha &#246;ncekilere g&#246;re uzun oluşu, Dosya Sistemi (FileObject) Nesnesini kullanarak oluşturacağı menu.htm dosyasının i&#231;eriğini sağlamak i&#231;in verdiğiniz dizinde bulunan ve dosya adı uzatması .htm ve .asp olan b&#252;t&#252;n dosyaların i&#231;inde <TITLE>..</TITLE> etiketini aramasından kaynaklanıyor. Programın yazarı Alex Homer’in b&#252;t&#252;n değişken adlarının &#246;n&#252;nde, değişkenin t&#252;r&#252;n&#252; belirten &#246;n-ekler kullandığına dikkat edin. B&#246;ylece nesneleri (obj), sayısal (int) ve kolleksiyon (kol) değerlerden ayırmamız kolaylaşıyor.
Programı &#231;alıştırdığımız zaman, Browser penceresinde men&#252; sayfasının oluşturulduğuna ilişkin mesaj belirliyor; ve işlem tamamlandığında da oluşturulan menu.htm sayfasının k&#246;pr&#252;s&#252; veriliyor. Bu k&#246;pr&#252;y&#252; tıkladığımızda ise programın beşinci satırında strListKlasor = "/" ifadesiyle verdiğimiz dizinin i&#231;indeki b&#252;t&#252;n HTML ve ASP dosyalarının başlığını, bu dosyalara k&#246;pr&#252; verilmiş olarak g&#246;r&#252;r&#252;z.
İsterseniz, strListKlasor değişkeninin değeri olarak, s&#246;zgelimi “/html/” gibi, kendi Web Server’ınızdaki diğer herhangi bir dizinin adını da verebilirsiniz. Bunu yaparken dizin adının sonuna b&#246;l&#252; işareti koymayı unutmamak gerekir. Bu program b&#246;yle bağımsız olarak &#231;alıştırılabileceği gibi, bir &#231;er&#231;evenin (Frame) i&#231;inde &#231;alıştırılabilir ve sonu&#231;ları, başka bir &#231;er&#231;evenin i&#231;inde g&#246;r&#252;nt&#252;lenebilir. Bu programın “İ&#231;indekiler” sayfasını hazırladığı dizine ne kadar yeni dosya koyarsanız koyun veya mevcut dosyaları &#231;ıkartırsanız &#231;ıkartın, ne zaman bu programı &#231;alıştırırsanız, İ&#231;indekiler listesi dinamik olarak mevcudu yansıtacaktır.
Gecikme Bildirme Sayfası
Yukarıdakı &#246;rneği birlikte uyguladıysak, ASP programına İ&#231;indekiler listesini &#231;ıkartması i&#231;in verdiğimiz dizinin i&#231;erdiği dosya sayısına bağlı olarak, programın &#231;alışması epey uzun s&#252;re alacaktır. 20 saniyenin &#252;zerinde beklemenin bir y&#252;zyıla yakın etki yaptığı g&#252;n&#252;m&#252;z Internet ziyaret&#231;isi i&#231;in bu s&#252;re &#231;ok uzun g&#246;r&#252;nebilir. Ziyaret&#231;imize, s&#246;zgelimi Browser programının donmadığını, veya Internet bağlantısının kesilmediğini belirtebilmek i&#231;in, “L&#252;tfen bekleyiniz!” mesajı vermek yerinde olabilir. Yukarıdaki &#246;rnekte bunu aynı sayfa i&#231;inde yapma imkanımız vardı; &#231;&#252;nk&#252; programımız tabir yerinde ise ziyaret&#231;iyi bu sayfadan alıp, başka bir sayfaya g&#246;t&#252;rm&#252;yordu.
Oysa Web uygulamamızın akış planı &#246;yle gerektirebilir ki, ziyaret&#231;imizin bir talebini karşılayabilmek i&#231;in ona “L&#252;tfen bekleyiniz!” mesajını ne hareket ettiği, ne de gittiği sayfada veremeyiz. Bunun i&#231;in bir “ara” sayfa gerekebilir; bir t&#252;r “L&#252;tfen bekleyiniz!..” sayfası.
Bu &#246;rnekte b&#246;yle bir sayfa yapacağız; ancak bu amacımızı tek sayfa karşılamayacağı i&#231;in, ortaya iki sayfa &#231;ıkartacağız. Şimdi şu kodu bekle01.asp adıyla kaydedin:
<% Response.Buffer = True %>
<HTML>
<% mesaj = Server.URLEncode("Arzu ettiğiniz iş yapılıyor.. L&#252;tfen bekleyiniz") %>
<% Response.Redirect ("bekle02.asp?BEKLE_SURE=3&BEKLE_MESAJ=" & mesaj & _ "&GONDER_URL=index.htm") %>
<HEAD>
<TITLE>ASP ILE BEKLETME 01</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>
</BODY>
</HTML>
Burada ASP kodunun t&#252;m&#252; işlemeden, ortaya &#231;ıkan HTML’in ziyaret&#231;inin Browser’ına par&#231;a par&#231;a g&#246;nderilmesini &#246;nlemek amacıyla Response nesnesinin .Buffer metodunun True (doğru) olarak belirlendiğini g&#246;r&#252;yorsunuz. Programın kullanacağı mesajın, mesaj adlı değişkene atandığına dikkat edin. Bu sayfanın tek işlevi ise Response nesnesinin .Redirect metodu ile bekle02.asp sayfasını &#231;ağırmaktan ibaret. Başka bir deyişle bekle01.asp, ger&#231;ekte Browser’ın y&#252;z&#252;n&#252; bile g&#246;remeyecektir!
Biraz sonra kendisine &#252;&#231; değişken verilmesini bekleyen bekle02.asp programı yazacağız. Nitekim bekle01.asp’nin i&#231;inde &#252;&#231; değişken değeri belirleniyor; ve bunlar bekle02.asp’ye URL-GET metodu ile “yazılıyor.” Burada GET metodu ile bir bir sayfaya veri g&#246;nderme tekniğini hatırlayalım. Bir Form’un Server’a veri g&#246;nderme metodu GET ise, Form’dan (veya sayfadan URL yoluyla) derlenen verilerin “değişken=değer” &#231;iftleri halinde ve &#231;iftlerin arasında & işareti konularak g&#246;nderilir. Bu y&#246;ntemi, HTTP yoluyla Browser nasıl kullanıyorsa, biz de istediğimiz anda kullanabiliriz. Burada;
bekle02.asp?BEKLE_SURE=3&BEKLE_MESAJ=" & mesaj & _ "&GONDER_URL=index.htm”
şeklindeki ifade de sayfa adından sonra konan soru işareti, Server’a bu bilgi k&#252;mesinin bu sayfaya iletilmesi komutunu vermenizi sağlar; bir bakıma Server’a “Şu bilgileri al; bekle02.asp sayfasına ver!” demiş oluyoruz. Bu bilgiler hatırlayacaksınız, Server’da Request nesnesinde tutulur; eşittir işaretinin &#246;n&#252;ndeki kısım değişken, arkasındaki kısım ise değer sayılır.
Dedik ki: bekle02.asp kendinise &#252;&#231; değişken verilmesi beklemektedir. Bunu sağlayan nedir? Resquest nesnesinden alınıp, bu sayfanın i&#231;indeki değişkenlere atanan &#252;&#231; değer bulunması. bekle02.asp’yi de yazalım:
<%@ LANGUAGE="VBSCRIPT" %>
<%
BEKLE_SURE = Request("BEKLE_SURE")
GONDER_URL = Request("GONDER_URL")
BEKLE_MESAJ = Request("BEKLE_MESAJ")
%>
<html>
<head>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254">
<META http-equiv="Refresh" content="<% =BEKLE_SURE %>; URL=<% =GONDER_URL %>">
<title>ASP ile Bekletme</title>
</head>
<body color="#FFFFFF">
<font face="Arial">
<p align = "center"><strong><% =BEKLE_MESAJ%></strong> </p> </font>
</body>
</html>
Daha &#246;nce yazdığımız bekle01.asp, ziyaret&#231;iyi bekle02.asp’ye y&#246;nlendirirken ona &#252;&#231; “değişken=değer” &#231;iftti g&#246;nderiyor; bekle02.asp bunları Request nesnesinden alarak, kendi değişkenlerine atıyor. Bu &#252;&#231; değişkenini inceleyelim.
Ziyaret&#231;inin bekleme s&#252;resince Browser penceresinde g&#246;receği mesaj, BEKLE_MESAJ değişkeninde yer alıyor;
Bu mesajı g&#246;r&#252;nt&#252;lendiği sayfanın ziyaret&#231;inin Browser’ında kalacağı s&#252;reyi BEKLE_SURE değişkenin değeri belirliyor:
Bu sayfanın yerini alacak olan hedef sayfa veya ziyaret&#231;inin Browser’ına g&#246;nderilecek yeni sayfanın adresini, GONDER_URL değişkeni belirliyor.
Bu programları &#231;alıştırdığınızda ziyaret&#231;inin Browser’ında &#252;&#231; saniye s&#252;reyle “Arzu ettiğiniz iş yapılıyor.. L&#252;tfen bekleyiniz!” yazısı g&#246;r&#252;nt&#252;lenecek; daha sonra Browser’a index.htm sayfası g&#246;nderilecektir. Bu iki programı kendi ihtiya&#231;larınıza uyarlamak isterseniz, s&#246;zgelimi bir veritabanının g&#252;ncellenmesi sırasında veya benzeri bir muhtemel gecikme durumunda, ziyaret&#231;iye durumu bildirmek i&#231;in, k&#246;pr&#252;y&#252; bekle01.asp’e verebilirsiniz; asıl hedef URL’i ise bekle01.asp’de verebilirsiniz.
Form Değerlerini Yakalayalım
Bir veritabanından &#231;ektiğimiz verilerle, Form etiketi i&#231;inde kullanabileceğimiz ve ziyaret&#231;inin ya metin girmesine ya da se&#231;im yapmasına imkan veren kutuları, se&#231;enekleri nasıl doldurabileceğimize ilişkin bir &#246;rneği birinci kitap&#231;ıkta g&#246;rm&#252;şt&#252;k. Burada şimdi bir Form’dan gelen verileri nasıl değişkenlere atayacağımızı ve bunları nasıl kullanacağımızı ele alalım.
Bu ama&#231;la iki sayfa hazırlayacağız: birincisi i&#231;inde bir &#231;ok tercihler bulunan formlar olan bir HTML dosyası, diğeri ise bu Formun değerlerini alarak, kullanılır hale getirecek bir ASP programı olacak.

&#214;nce FormOrnek.htm adlı şu dosyayı kaydedelim:
<HTML>
<HEAD>
<TITLE>Form Ornegi</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>
<H4>Birinci Form</H4>
<FORM ACTION="FormOrnek.asp?HangiForm=1" METHOD="POST">
<INPUT TYPE="Text" NAME="MetinGir" VALUE="Mesajınızı buraya yazınız" SIZE="30" MAXLENGTH="75"><BR>
<INPUT TYPE="Password" NAME="ParolaAlani" SIZE="30" VALUE="parola"><BR>
<TEXTAREA NAME="MetinAlani" COLS="30" ROWS="3" WRAP="VIRTUAL">
Buraya istediğiniz yazıyı yazabilirsiniz...</TEXTAREA><P>
<INPUT TYPE="Submit" VALUE="G&#246;nder">&nbsp;&nbsp;<INPUT TYPE="RESET" VALUE="Sil">
</FORM>
<HR>
<H4>İkinci Form</H4>
<FORM ACTION="FormOrnek.asp?HangiForm=2" METHOD="POST">
<TABLE BORDER = 0><TR><TD><INPUT TYPE="Radio" NAME="Radyo" VALUE="Tercih1" CHECKED>Radyo D&#252;ğmesi Tercih 1<BR>
<INPUT TYPE="Radio" NAME="Radyo" VALUE="Tercih2">Radyo D&#252;ğmesi Tercih 2<BR>
<INPUT TYPE="Radio" NAME="Radyo" VALUE="Tercih3">Radyo D&#252;ğmesi Tercih 3</TD>
<TD width=30>&nbsp;</TD>
<TD><INPUT TYPE="Checkbox" NAME="IsaretKutusu" VALUE="Isaret1">İşaret Kutusu 1<BR>
<INPUT TYPE="Checkbox" NAME="IsaretKutusu" VALUE="Isaret2">İşaret Kutusu 2<BR>
<INPUT TYPE="Checkbox" NAME="IsaretKutusu" VALUE="Isaret3">İşaret Kutusu 3</TD>
</TR></TABLE><BR>
<INPUT TYPE="Submit" VALUE="G&#246;nder">&nbsp;&nbsp;<INPUT TYPE="RESET" VALUE="Sil"></FORM>
<HR>
<H4>&#220;&#231;&#252;nc&#252; Form</H4>
<FORM ACTION="FormOrnek.asp" METHOD="GET">
<INPUT TYPE="Hidden" NAME="HangiForm" VALUE="3">
<SELECT NAME="SecmeListesi" SIZE="1">
<OPTION VALUE="ListeTercih1">Liste Tercih 1
<OPTION VALUE="ListeTercih2">Liste Tercih 2
<OPTION VALUE="ListeTercih3">Liste Tercih 3
</SELECT>
<SELECT NAME="CokluSecme" SIZE="3" MULTIPLE>
<OPTION VALUE="ListeKutu1">&#199;oklu Se&#231;me Kutusu 1
<OPTION VALUE="ListeKutu2">&#199;oklu Se&#231;me Kutusu 2
<OPTION VALUE="ListeKutu3">&#199;oklu Se&#231;me Kutusu 3
</SELECT><P>
<INPUT TYPE="Submit" VALUE="G&#246;nder">&nbsp;&nbsp;<INPUT TYPE="RESET" VALUE="Sil">
</FORM>
</BODY>
</HTML>
Daha sonra belirlediğimiz değişkenlerin Form’un hangi &#246;ğelerinden geldiğinin rahat anlaşılması i&#231;in burada Form unsurlarının değeri olarak unsurun adına yakın kelimeleri kullandığımıza dikkat edin. Sayfada &#252;&#231; ayrı Form bulunduğu, ilk iki formun POST, &#252;&#231;&#252;nc&#252;s&#252;n&#252;n ise GET metoduyla Server’a bilgi g&#246;nderdiği de dikkatinizi &#231;ekmiş olmalı. POST metodunda Server’a giden bilgiler, talep edilen sayfanın adına URL kodlama y&#246;ntemiyle (ve dolayısıyla Browser’ınızın URL kutusuna yazılarak) g&#246;nderilmez; Fakat ilk iki Form’da POST metodu kullanmış olmamıza rağmen, formu işleyecek programa bilgilerin hangi formdan gittiği sanki GET metodu kullanılmış gibi bildiriliyor. Bu y&#246;ntemi, Request.Form kolleksiyonuna yazılmasını istemediğimiz bilgiler i&#231;in kullanabibiliriz. &#220;&#231;&#252;nc&#252; Form ise bilgilerini GET yoluyla g&#246;nderiyor ve kendisinin hangi form olduğuna ilişkin bilgiyi ise gizli bir değişkene yazıyor. Her &#252;&#231; durumda da HagiForm değişkeninin değeri olarak, ASP programına formun sıra numarası anlamına gelen sayı g&#246;nderiliyor. Birinci form 1, ikinci form 2, &#252;&#231;&#252;nc&#252; form ise 3 değerini yolluyor. Bu HTML dosyasını Browser’da a&#231;arsanız, &#252;&#231; ayrı formu g&#246;receksiniz.
Her &#252;&#231; formun g&#246;nderdiği bilgiler aşağıdaki programa ulaşıyor. Bu programı FormOrnek.asp adıyla kaydedebilirsiniz:
<HTML>
<HEAD>
<TITLE>ORNEK FORM SONUCLARI</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>
<%
dim FormTercihi
FormTercihi = Request.QueryString("HangiForm")
Select Case FormTercihi
Case 1
%>
Metin alanı sonu&#231;ları<P>
<TABLE BORDER=1 CELLPADDING=5 width=75%>
<TR><TD>Input/Text Alanı</TD><TD><B><%= Request.Form("MetinGir") %></B></TD></TR>
<TR><TD>Input/Passsword Alanı</TD><TD><B><%= Request.Form("ParolaAlani") %></B></TD></TR>
<TR><TD>TextArea Alanı</TD><TD><B><%= Request.Form("MetinAlani") %></B></TD></TR>
</TABLE>
<HR>
<%
Case 2
%>
Radyo D&#252;ğmesi ve İşaret Kutusu Sonu&#231;ları<P>
<TABLE BORDER=1 CELLPADDING=5 width=25%>
<TR><TD>Se&#231;ilen Radyo D&#252;ğmesi</TD><TD><B><%= Request.Form("Radyo") %></B></TD></TR>
<TR><TD>İşaretlenen Kutular</TD><TD><B><%
dim strIsaretlenen
for each strIsaretlenen in Request.Form("IsaretKutusu")
Response.Write strIsaretlenen & "<BR>"
next
%></B></TD></TR>
</TABLE>
<HR>
<%
Case 3
%>
Se&#231;me Alanları sonu&#231;ları<P>
<TABLE BORDER=1 CELLPADDING=5 width=35%>
<TR><TD>Se&#231;ilen Liste &#214;gesi</TD><TD><B><%= Request("SecmeListesi") %></B></TD></TR>
<TR><TD>Se&#231;ilen &#199;oklu Liste &#214;geleri</TD><TD><B><%
for each strIsaretlenen in Request("CokluSecme")
Response.Write strIsaretlenen & "<BR>"
next
%></B></TD></TR>
</TABLE>
<HR>
<%
End Select
%>
Bu programda, &#252;&#231; ayrı formdan gelebilecek bilgiler, HangiForm değişkeninin değerine g&#246;re, Select Case d&#246;ng&#252;s&#252; ile &#252;&#231; ayrı b&#246;l&#252;mde işleniyor. İlk iki formda, bilgiler POST metodu ile geldiği i&#231;in Request.Form nesnesinin i&#231;inde, değişken adıyla aranabilir. &#220;&#231;&#252;nc&#252; Formda ise bilgiler Request.QueryString nesnesinde bulunuyor. Burada bu bilgilerin daha &#246;nce g&#246;rmediğimiz kısaltma y&#246;ntemiyle alınıp, sayfaya aktarıldığını g&#246;r&#252;yorsunuz; <%=Request("SecmeListesi")>, aslında;
Response.Write Request.QueryString(“SecmeListesi”)
ifadesinin kısaltılmışıdır.
FormOrnek.htm’in her &#252;&#231; formunda da bazı tercihler yaparak G&#246;nder d&#252;ğmesini tıkladığınızda, FormOrnek.asp’ye g&#246;nderilen URL bilgisine dikkat edin. İlk ikisinde sadece se&#231;ilen formun HangiForm değeri yer aldığı halde. &#252;&#231;&#252;nc&#252;s&#252;nde formdaki b&#252;t&#252;n bilgiler burada URL-kodlanmış olarak yer alacaktır.
Programın bilgi işleyen b&#246;l&#252;m&#252;n&#252; kendiniz irdeleyebilir misiniz?

 
Alıntı ile Cevapla

Cevapla

Etiketler
anlatimi, anlatımı, asp, dokumandir, dökümandır


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Memoserv konu anlatımı yaSmin MemoServ 1 05 Nisan 2019 14:46
Nickserv Set Konu Anlatımı. yaSmin NickServ 1 17 Mart 2014 18:13
C# for ( for loop ) anlatımı jquery C# 0 11 Ekim 2012 15:15