Thursday, 24 March 2011

ASP DSN Bağlantısı

ASP DSN Bağlantısı

ASP ile bir veritabanı örneği yapmamız için öncelikle bir veritabanı oluşturmamız ve veritabanına erişmemiz için bazı ayarlar yapmamız gerekiyor. Veritabanı olarak Access, FoxPro, Dbase vb. gibi her hangi bir veritabanı kullanabilirsiniz. Bizim bu iş için önerimiz Access kullanarak bir veritabanı oluşturmanızdır. Burada bunun iki avantajını görebilirsiniz: Birincisi Access ile çok hızlı ve kolaylıkla bir veritabanı oluşturulabilir. İkincisi biz DSN ayarı yaparken Access kullandığımız bir veritabanı örneği göstereceğimiz için hata yapma olasılığınız azalır. Burada veritabanının nasıl oluşturulduğu anlatılmayacak DSN bağlantısının kurulması anlatılacaktır. Veritabanını oluşturduktan sonra Başlat/Ayarlar/Denetim Masası menüsünü tıklayın. Burada ODBC Veri Kaynakları ikonunu göreceksiniz. Bu ikonu tıklayıp programı çalıştırın. Sonra açılan pencerede System DSN sekmesini tıklayın:

System DSN

Burada Add butonuna basın ekrana Yeni Veri Kaynağı Oluştur penceresi gelecek.

Yeni Veri Kaynağı Oluştur

Burada bizim örneğimiz için Microsoft Access Driver(*.mdb) seçili. Eğer başka bir veritabanı kullanıyorsanız kullandığınız veritabanına uygun ismi seçmelisiniz. Daha sonra Finish butonuna basın. Ekrana gelen yeni pencerede Data Source Name kutusuna bir veri kaynağı ismi yazın, fakat bu ismi unutmayın, çünkü bunu ASP kodlarımızı yazarken kullanacağız. Daha sonra Select butonu ile hazırlayıp diske kaydettiğiniz veri tabanını seçin ve OK butonuna basarak Veri Kaynağı Adı oluşturma yani veritabanımız için DSN tanımlama işlemini bitirin. Biz örneğimiz için içerisinde email_rehber adlı bir tablo bulunan rehber adlı bir veritabanı hazırladık. Ekranda oluşması gereken son durum aşağıdaki gibi olmalıdır.

Microsoft Access Driver

Bu işlemleri tamamladıktan sonra veritabanına kayıt yapabileceğimiz sayfaları oluşturmaya başlayalım

Sunday, 20 March 2011

ASP - HTML

ASP - HTML

Son yıllarda İnternet’in hızlı bir şekilde yaygınlaşması bu alandaki teknolojilerin de hızla gelişmesine neden oldu. Üniversiteler, kamu kuruluşları, özel şirketler kısacası İnternet’e bağlı sunucularında bir siteye sahip olan tüm kurumlar bu siteyi ziyaretçilerle daha etkileşimli olarak kullanmak istediler. Yazılım üreticileri de kurumların bu isteklerini gerçekleştirmek üzere daha hareketli sayfalar hazırlayabilmek, kullanıcıdan veri alıp diske kaydetmek gibi işlemleri yapacak ürünler geliştirdiler.

ASP ‘yi öğrenmeye başlamadan önce, web sayfalarının hazırlanmasında kullanılan yazılımların neler olduğunu ve bunların hangisinin ne işe yaradığını bilmek web sitesi tasarımcılığı için bir bakış açısı sağlayacaktır. Öncelikle tüm web sayfalarının arkasında yatan teknoloji HTML’ dir. Uzman bir web sitesi tasarımcısı HTML dilini bilmek zorundadır. Piyasada hiç programlama mantığı kullanmadan site tasarlayabilecek paket programlar vardır, fakat bunlar web tasarımcılığını profesyonelce yapan insanlar için yeterli olmayacaktır. İnternet Explorer ya da Netscape Navigator gibi tarayıcılar kullanarak bağlanmak istediğiniz adresi girip istediğiniz sitenin ana sayfasına girdiğinizde, bağlantıyı yaptığınız sunucu bilgisayar size o sayfayı HTML kodları halinde gönderir ve sizin kullandığınız tarayıcı bu HTML kodlarını alıp yorumlayarak, yazılar, nesneler,resimler şeklinde karşınıza getirir. Sadece HTML kullanılarak hazırlanmış bir sayfada hareket eden nesneler göremezsiniz(Animated GIF olarak adlandırılan hareketli resimler hariç). Burada hareket eden nesneler ile bir yazının hareket etmesi, bir bağlantının üzerine gelince onunla ilgili açıklama çıkıp kaybolması ve buna benzer şeyler kastedilmektedir. Web sayfalarında bu hareketliliği sağlamak için Scripting dilleri denilen ve normal programlama dillerinden bazı farklılıkları olan diller kullanılır. Bu Script dillerden bazıları JavaScript, Visual Basic Script(VBScript olark bilinir), Jscript, PHPScript, PerlScript’tir. Aslında bu nesneleri gizlemek-göstermek ve hareket ettirmek için DHTML(Dynamic HTML) denilen ve HTML’nin, bu bahsettiğimiz işlemleri yapabilmesi için, ekrandaki nesneleri katmanlara ayırmamızı sağlayan bir dil de gereklidir. HTML ve DHTML komutları arasında ilk bakışta ayrım yapmak zordur, yani bunlar iç içe kullanılan dillerdir. Scripting dillerinin normal programlama dillerinden farkı özel bir derleyiciye sahip olmamaları ve yorumlanmalarının sonunda çalıştırılabilir(.exe veya .com uzantılı bir dosya) dosyalar elde edilmemeleridir. Bu diller tarayıcı olarak adlandırılan programlar tarafından işlenir ve direk çıktı üretilir.
Buraya kadar kullanıcının karşısına yazılar, resimler çıkarabilmemizi sağlayan diller ve sayfada daha hareketli işler yapabilmemizi sağlayan dillerden bahsettik. Peki biz sitemize giren kullanıcıdan bilgi alıp bunları diske daha doğrusu bir metin dosyasına ya da gelişmiş bir veritabanına kaydetmek istersek ne yapacağız? İşte bu noktada ASP, PHP, CGI gibi dillerden yararlanacağız.

ASP, PHP, CGI gibi diller sunucu taraflı scripting dilleri, JavaScript, VBScript, Jscript gibi diller ise istemci taraflı scripting dilleri olarak bilinir. İstemci taraflı bir dil ile yazdığınız kodlar kullanıcının bilgisayarına olduğu gibi gönderilir ve kullanıcının tarayıcısı bu kodu yorumlayıp gerekli işlemleri yapar. Oysa ki sunucu taraflı dillerde bu durum farklıdır. İçerisinde ASP, PHP, CGI kodu bulunan sayfaya girildiğinde sayfanın istendiği sunucu bu kodları alır, yorumlayıp gerekli işlemleri yapar ve sonuçları HTML’ye çevirip kullanıcıya yollar. Böylece kullanıcı sayfanın kaynak koduna baktığında sunucu taraflı dillerle yazılmış tek satır kod bile göremez.
Active Server Pages (Aktif Sunucu Sayfaları) kelimelerinin baş harflerinden oluşan ASP, daha önce de söylediğimiz gibi sunucu taraflı geliştirme ortamıdır. Dosya uzantısı “.asp” olan ASP sayfalarında HTML ve Script dili bir arada kardeşçe bulunabilmektedir. ASP teknolojisi sayesinde, sayfalarınıza koyacağınız HTML, VBScript kodları ve veritabanı uygulamaları, sunucuda icra edileceğinden, ziyaretçinin tarayıcısının örneğin VBScript’i tanımayan Netscape olması, hiç önemli değildir. ASP bu özgürlüğü, kodların sunucu tarafında işletilmesine borçludur. Kullanıcının ekranında sadece kodların işletilmesi sonucunda oluşan HTML sayfası görüntülenir. ASP’ nın bir avantajı da, kullanılan kodların başkaları tarafından kopyalanamamasıdır.

Buraya kadar anlattıklarımızdan bir özet yaparsak bir ASP sayfasının nelerden oluştuğu hakkında şunları söyleyebiliriz:

• ASP sayfasının içinde kod vardır.
• ASP sayfasının kodları Web sunucusu tarafından icra edilir.
• ASP sayfası kullanıcının tarayıcısına salt HTML kodu olarak gelir.

ASP İçin Neler Gereklidir?

ASP İçin Neler Gereklidir?

ASP sayfalarının çalışabilmesi için sayfaların bulunduğu bilgisayarın bir Web sunucusu haline getirilmesi gerekir. Bunu için Microsoft’un iki ürünü vardır: birincisi Windows 95 ve 98 için ayrı sürümleri olan PWS(Personal Web Server ) yani Kişisel Web Sunucusu, diğeri Windows NT ve Windows 2000 için geliştirilmiş IIS(İnternet İnformation Services) yani İnternet Bilgi Servisi. Bu iki ürünün arasında bazı farklılıklar vardır. PWS en fazla 5-10 ziyaretçinin aynı anda bağlanabileceği küçük çaplı uygulamalarda kullanılır. Eğer çok fazla sayıda kişiye, hızlı hizmet vermek istiyorsanız o zaman IIS bu iş için daha uygundur.

ASP uygulamaları yazmak için bir editör gerekir. Bu piyasada bulunan herhangi bir editör olabilir. Web tasarımı için özel olarak hazırlanmış editörler bu iş için daha uygundur. Sadece Notepad kullanarak bir ASP sayfası hazırlanabilir. Özel olarak hazırlanmış editörlerden Microsoft FrontPage, Allaire HomeSite ya da Cofffe Cup HTML Editor kullanılabilir. Bu özel editörleri kullanırsanız kullanımı pratik olan sürükle-bırak nesneleri kullanabilir ve yazdığınız kodları ayırt edebilmek için renklendirme özelliklerinden yararlanabilirsiniz.


OO4O-Oracle Objects For OLE

OO4O-Oracle Objects For OLE

Bu başlık altında ASP kullanarak Oracle veritabanına erişmek için Oracle tarafından geliştirilmiş farklı bir teknik kullanacağız. Bu tekniği kullanırken diğer örneklerimizde olduğu gibi VBScript kullanacağız.

OO4O herhangi bir programlama dilinden ya da scripting dillerinden Oracle veri tabanına erişerek daha kolay uygulama geliştirmek için dizayn edilmiş bir Oracle ürünüdür. Bir programlama dili içerisinden bu ürünü kullanabilmek için, ilgili programlama dilinin Microsoft COM Automation ve ActiveX olarak adlandırılan teknolojileri desteklemesi gerekir. Visual Basic, Visual C++, IIS Active Server Pages(VBScript,JavaScript) dilleri bu desteği verir.
OO4O üç ürün içerir. Birincisi OO4O Automation Server’dır. Bu ürün veritabanına bağlanıp, SQL ve PL/SQL komutlarını çalıştırmak için gereken nesneleri kapsar.(Bunlar COM Automation Objects olarak adlandırılan nesnelerdir.) İkincisi Oracle Data Control ‘dür. Bu üründe yukarıda bahsettiğimiz görsel dillerdeki edit, text, list ve grid vb. kontrolleri ile Oracle veritabanı arasında veri alışverişi sağlamak için geliştirilmiş ActiveX kontrolüdür. Üçüncü ürün ise Oracle Objects for OLE C++ Class Library olarak adlandırılan üründür ve bu da Microsoft Visual C++’den Oracle veritabanı erişimi için geliştirilmiş sınıf kütüphanelerini içerir.
OO4O istemcideki uygulamaların sunucuya erişip komut çalıştırmalarını ve komutların sonuçları üzerinde işlem yapmalarını sağlar. OO4O kullanarak yazdığımız tüm uygulamalarda aşağıdaki adımları sırayla gerçekleştirmeliyiz:

• OO4O Automation Server’ eriş
• Oracle Database Server’a bağlan
• Komutları çalıştır ve sonuçları al
• Server bağlantılarını kapat ve kullanılan OO4O nesnelerini bellekten sil

OO4O Aoutomation Server’a erişmek için OraSession nesnesi kullanılır:

<%Set OO4OSession = CreateObject(“OracleInProcServer.XOraSession")%>

Burada OO4Osession bir değişken ismidir. “CreeateObject” ise VBScript’in bir fonksiyonudur. Bu fonksiyon içerisine girdiğimiz parametrelerle OO4O Automation Server’a erişiyoruz. Oracle Databease Server’a bağlanmak için OpenDatabase metodu kullanılır:

<%Set isciDb= OO4ODBSession.OpenDatabase("ogr", "usr_esef/esef", 0)%>

Burada “ogr” veritabanımızın SID olarak da adlandırılan ismidir. Bu işlemden sonra veritabanı işlemleri için “isciDb” değişkeni kullanılabilecek. “usr_esef” kullanıcı adı ve “esef” de bu kullanıcının şifresi. Buraya kadar yaptığımız işlemleri OraServer nesnesini kullanarak biraz farklı yazım şekliyle gerçekleştirebiliriz:

<%Set OO4OServer = CreateObject("OracleInProcServer.XOraServer")
OO4OServer.Open("ogr")
Set isciDbSession1 = OO4OServer.OpenDatabase("usr_esef/esef")
Set isciDbSession2 = OO4OServer.OpenDatabase("usr_gef/gef")%>

Yukarıda verdiğimiz komutlarla veritabanı bağlantısını sağlamış oluyoruz. Bundan sonra veritabanı üzerinde çalıştıracağımız komutların nasıl kullanılacağını anlatacağız. OO4O’nun Oracle veritabanı üzerinde çalıştırılabilen komutları; sorgular, UPDATE, DELETE,INSERT gibi veri işleme dili komutları(DML), PL/SQL komutları, veri tanımlama dili(DDL) komutları ve birden fazla sorgunun çalıştırılması olarak adlandırılan transaction kontrol komutları olarak sınıflandırılır.

OO4O’de bir sorgu çalıştırmak için CreateDynaSet metodu kullanılır. Bu metod çalıştırıldığında OraDynaset nesnesi oluşturulur. Bu nesne sorgu komutunun döndürdüğü kayıtları içeren bir “recordset” nesnesi gibidir. OraDynaset nesnesi üzerinde bir sonraki kayda git, bir önceki kayda git vb. gibi kayıtlar üzerinde hareket etme işlemlerini gerçekleştirebiliriz.

Set OO4OSession = CreateObject(“OracleInProcServer.XOraSession")
<%Set isciDb = OO4OSession.OpenDatabase("ogr", "usr_esef/esef", 0 )
Set isciler = isciDb.CreateDynaset("SELECT isciadi, iscino FROM
isci",ORADYN_NOCACHE)
While NOT isciler.EOF
------ ‘işlem komutları
yedek=isciler("isciadi")
------
isciler.MoveNext
Wend%>

Burada isciler(“isciadi”) yazım şekliyle tablonun geçerli olan kayıttaki alan değerleri elde edilebilir. Oluşturduğumuz OraDynaSet nesnesi “isciler” değişkeni ile temsil edilmekte. Bu kayıt setinin “isciler.EOF” komutuyla sonuna gelip gelinmediği kontrolü yapılıyor. “isciler.MoveNext” komutuyla bir sonraki kayda geçiliyor. Burada MoveFirst, MoveLast, MoveNext, MovePrevious, MoveNextn, MovePreviousn, MoveRel, ve MoveTo komutları da kullanılabiliyor. Burada sonunda “n” bulunan komutlar birden fazla kayıt atlamaya yarıyor. Yani “isciler.MoveNextn 5” komutu 5 kayıt sonrasına atlamaya yarıyor. “MoveTo n” şeklinde de “n” sayısıyla verilen kayda konumlanılabiliyor. ORADYN_NOCACHE parametresi OO4O’nun yüklendiği ana dizindeki OraConst.txt dosyasında sayısal bir değere karşılık gelen bir sabit olarak tanımlanmış. Bu parametrenin amacı istemci bilgisayarın sorgu sonucu dönen kayıt setini saklamamasını sağlamaktır.

Yazdığımız sorgular içerisinde değişken kullanmak isteyebiliriz. Bunun için kullanacağımız değişkenleri OraDynaSet nesnemize tanıtmalıyız.

<%EmpDb.Parameters.Add "isci_adi", "ihsan", ORAPARM_INPUT%>

Burada “isci_adi” adında bir değişken tanımlıyoruz ve bu değişkenin değerine “ihsan” karakter dizisini aktarıyoruz. En sondaki ORAPARM_INPUT ise bu değişkenin bir giriş değişkeni olduğunu bildiriyor. Aşağıdaki program parçası bu amaçla adı ihsan olan tüm işçilerin adlarını ve numaralarını alt alta listeliyor.

<%Set OO4OSession = CreateObject(“OracleInProcServer.XOraSession")
Set isciDb = OO4OSession.OpenDatabase("ogr", "usr_esef/esef", 0 )
isciDb.Parameters.Add "isci_adi", "ihsan", ORAPARM_INPUT
Set isciler = isciDb.CreateDynaset("SELECT isciadi, iscino FROM isci WHERE
isciadi = :isci_adi",ORADYN_NOCACHE)
While NOT isciler.EOF
Response.Write isciler("isciadi")
Response.Write isciler("iscino")
Response.Write "<BR>"
isciler.MoveNext
Wend%>

OO4O’da SQL komutlarını çalıştırmak için iki metod kullanılıyor: ExecuteSQL ve CreateSQL

<%Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set isciDb = OO4OSession.OpenDatabase("ogr", "usr_esef/esef", 0)
isciDb.Parameters.Add "isci_adi", "ihsan", ORAPARM_INPUT
isciDb.ExecuteSQL ("UPDATE isci SET ucret = ucret + 1000
WHERE isciadi = :isci_adi")%>

CreateSQL metodunun kullanım şekli:
Set sqlcumlesi = isciDb.CreateSQL("UPDATE isci SET ucret=ucret+1000
WHERE isciadi=:isci_adi")

Bu iki metod birbirinin yerine kullanılabildiği gibi aralarında bir fark vardır. CreateSQL metodu çalıştırıldıktan sonra OraSQLStmt nesnesini oluşturur. Bu nesne sayesinde aynı sorgu tekrar oluşturulmadan “Refresh” metodu ile çalıştırılabilir. Çünkü yazdığımız sorgu zaten bellektedir. Örneğin yukarıdaki örneğe bağlı olarak başka bir işçinin maaşını artırmak istersek parametre değişkenimizin değerini değiştirip sorgumuzu tazelemek yeterli olur.

isciDb.Parameters("isciadi").Value = "kahraman"
sqlStatement.Refresh

Bir tabloya kayıt eklemek ve silmek içinde SQL komutları çalıştırmalıyız. Yukarıdakilerle benzer şekilde bu işlemlerin yazım şekli şöyle gerçekleştirilebilir:

Set sqlcumlesi = isciDb.CreateSQL ("DELETE from isci
WHERE isciadi = :isci_adi")
isciDb.ExecuteSQL ("INSERT INTO isci(iscino,isciadi,isi,muduru,bolum)
VALUES (1233, 'kerim', 'yazıcı', 7839, 30) ")

PL/SQL bloklarını OO4O kullanarak çalıştırmak için yine CreateSQL ve ExecuteSQL metotlarını kullanıyoruz. PL/SQL bloklarının kullanımını küçük bir örnek üzerinde gösterelim. Bu örneği “bolum” tablosu üzerinde gerçekleştirelim. Bölüm numarasını parametre olarak alıp, bu bölümün adını ve bulunduğu ili geri döndüren bir prosedür yazalım ve OO4O nesneleri ile bunu çalıştıralım.

CREATE OR REPLACE PACKAGE pac_bolum as
PROCEDURE bolum_ad_al (bolum_no IN NUMBER, bolum_ad OUT VARCHAR2,
bolum_yer OUT VARCHAR2);
END pac_bolum;

CREATE OR REPLACE PACKAGE BODY pac_bolum as
PROCEDURE bolum_ad_al(bolum_no IN NUMBER, bolum_ad OUT VARCHAR2,
bolum_yer OUT VARCHAR2) is
BEGIN
SELECT bolumad, bolumyer into bolum_ad, bolum_yer from bolum
WHERE bolumno = bolum_no;

END;
END pac_bolum;

PL/SQL ile paketler oluşturma daha önce anlatılmıştı. Burada yukarıda oluşturduğumuz paketi veritabanına kaydediyoruz. Asp sayfamızda yapacağımız iş bu paket içerisindeki fonksiyonu çalıştırmak.

<%Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set isciDb = OO4OSession.OpenDatabase("ogr", "usr_esef/esef", 0)

isciDb.Parameters.Add "bolum_no", 10, ORAPARM_INPUT
isciDb.Parameters("bolum_no").ServerType = ORATYPE_NUMBER
isciDb.Parameters.Add "bolum_ad", 0, ORAPARM_OUTPUT
isciDb.Parameters("bolum_ad").ServerType = ORATYPE_VARCHAR2
isciDb.Parameters.Add "bolum_yer", 0, ORAPARM_OUTPUT
isciDb.Parameters("bolum_yer").ServerType = ORATYPE_VARCHAR2

Set PlSqlcumlesi = isciDb.CreateSQL("Begin pac_bolum.bolum_ad_al
(:bolum_no, :bolum_adi, :bolum_yer); end;", 0&)

Response.Write isciDb.Parameters("bolum_adi").Value &
isciDb.Parameters("bolum_yer").Value
%>

Yukarıdaki program parçasında önce veritabanı bağlantısı kuruluyor. Daha sonra prosedüre gönderilecek ve prosedürden dönen değerleri karşılayacak değişkenler tanımlanıyor. Burada parametre değişkenlerinin veri tiplerinin nasıl belirlendiği de görülüyor. Bunun için “ServerType” kullanılıyor. “ORATYPE_NUMBER” ve “ORATYPE_VARCHAR2” sabitleri yine OraConst.txt dosyasında tanımlanmış ve Oracle’da kullandığımız “number” ve “varchar2” veri tiplerine karşılık geliyor. Daha sonra “CreateSQL” metodu ile “begin ..end” bloğu içerisinde ilgili prosedürümüz “paket_adı . prosedür_adı(parametreler)” şeklinde çağrılıyor. Sonrada değişkenlerimizde elde ettiğimiz değerler ekrana yazdırılıyor. Burada “bolum_no” değişkenine bir ilk değer verildiği için aranan bölüm numarasının direk 10 olduğu görülüyor.

OO4O’da veri işleme dili komutlarının kullanılabileceğini de söylemiştik. Yani bir veri tabanı nesnesi oluşturup bununla ilgili hakları diğer kullanıcılara vermek gibi işlemler yapılabilir. Aşağıdaki örneğimizde de “isci” tablomuzu oluşturma ve bazı hakları kullanıcılara verme işlemleri görülmekte.

Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set isciDb = OO4OSession.OpenDatabase("ogr", "usr_esef/esef", 0)

isciDb.ExecuteSQL("create table isci (isciadi VARCHAR2(20),
iscino NUMBER(6),
muduru NUMBER(6),
ucret NUMBER(6)")

isciDb.ExecuteSQL("GRANT UPDATE,INSERT,DELETE ON isci TO usr_gef")
isciDb.ExecuteSQL("REVOKE UPDATE ON isci FROM usr_gef")

Thursday, 10 March 2011

URL Encoding

URL Encoding

URL Encoding. Nedir bu URL Encoding ve ne işe yarar ? Hemen bir göz atalım.

Her ne kadar bu konumuzla ilgisi bulunmuyor gibi gözüksede, bu konu biraz HTML Encoding'e benziyor. Farkı ise, bir bilgiyi alıp Encoded hale çevirmesidir. Yani, bilgi içerisindeki tüm boşluk oluşturabilecek yerler "+" işareti ve diğer ASCII dışında kalan karakterler de Onaltılık ANSI değerleri ile replace edilir. Hepiniz muhakkak bugüne kadar görmüşünüzdür, Browser da adres hanesinde bazen çok garip karekterler türer.
Bunu bir örnek ile pekiştirelim.

Kullanım şekli şöyle: Server.URLEncode( string )

Diyelim elinizde, daha doğrusu Veritabanınızda bir bilgi, açıklama var. Ve siz bunu bir asp sayfanızda görüntülüyorsunuz ve buna bir link vermek istiyorsunuz. Diyelim şöyle bir link;

filanca.asp?id=a12b=falancabilgi
buna link verirsek:
http://www.falanca.com/filanca.asp?id=a12b=falancabilgi
Bu hali alacaktır. Peki bu format işlermi ? Garantiye almak için URLEncoding bunu şu şekle çevirir;

http%3A%2F%2Fwww%2Efalanca%2Ecom%2Ffilanca%2Easp%3Fid%3Da12b%26%3Dfalancabilgi

Evet, biraz cin çarpışma döndü, ama yakından incelersek burada;

"." = %2E
":" = %3A
"=" = %3D
"/" = %2F

"?" = %3F ... gibi değerlere dönüştüğünü görürüz.

Nedir peki bu % işaretleri ile kombine olmuş harflar ve rakamlar? Bunlar yukarıda sözü geçen, Onaltılık ANSI değerleridir. Yani nokta, soru işareti, slash ve eşittir gibi ASCII karekterler ANSI formatına dönüşüyor. Win2000 kullananlar bunu Notepad de bir bilgiyi kaydederken görmüştür. Save dialog boxın en altında Format kayıt türü yazar. Bu özellik tabii Win98 ve 95 de mevcut değil.

Asp' de Buffer

Asp' de Buffer

Sayfa Tamponlama(Buffer) nedir ?

Sayfa Tamponlaması ASP de kullanılan ilginç bir özelliktir. Sayfa Tamponlanması, response nesnesinin bir özelliğidir. Bize getirdiği fayda ise; Client tarafı, sunucudan bilgiyi talep ederken bize ne aldığını kontrol ettirir, yani denetletir. response nesnesine bağlı çalışan Buffer özelliğinin default değeri daima False dır. Değer bu iken, yani false iken bir sayfadaki ASP scripti oluştuğu gibi sunulur, yani script adım adım uygulanarak sayfaya yapması isteneni uygular.

Fakat biz Buffer değerini True olarak atarsak, Script tamamen çalıştırlmadan daha doğrusu tamamlanmada client tarafına bilgi sunulmaz. Kullanım şekli;

<% response.Buffer = True %>

Dikkat edilmesi gereken bir husus, bu tanımlama sayfadaki Html taglarının üstünde yer alıyor olması gerekir. Aksi takdire hata alırsınız. Bu arada hemen belirtelim, bu özellik ile Flush özelliğini beraber kullanabiliriz. Flush, bir script işleminde elde edilecek sonuçlar sayfaya yazdırılana kadar daha önce istemci tarafına yollamak istediğimiz bilgileri gönderir. bu da bize bir nevi hız kazandırır.

Buffer özelliğin kullanılmasının en iyi örneğini cookielerde verebiliriz. Burada sunucu ve istemci ile bilgi alışverişi esnasında oluşabilecek hataları Buffer özelliği ile önleyebiliriz. Buna kısa ve basit bir örnek vermek gerekirse:

Diyelim, bir sayfanız var ve buraya kimsenin ulaşmasını istemiyorsunuz. Hali ile şifre koyarsınız.

<%
response.Expires = 1000
response.Buffer = True ' ışte Buffer özelliği burda devreye giriyor !
session("UserLoggedIn") = ""
if Request.Form("login") = "true" then
CheckLogin
else
ShowLogin
end if
Sub ShowLogin
%>
Bakınız sayfadaki scripte (yukarıda) bir istek geliyor. Nedir? parolayı kontrol et ! yani Scriptin bu kısmı formdan gelen bilgiyi aşağıdaki scripte paslıyor, ve oda şifrenin doğru olup olmadığını kontrol ediyor. ışte burda "Buffer = True" olayı
kontrol ediyor.
%>
Sub CheckLogin
if LCase(Request.Form("kullanıcıadi")) = "AliVeliKonya" And LCase(Request.Form("sifre")) = "123456" then
session("UserLoggedIn") = "true"
response.Redirect "falanca.asp"
else%>
<%
response.write("şifre geçersiz..")ShowLogin
end if
end Sub
%>

Bu tabii gayet basit ve kısa bir script. Burada sadece bir örnek teşkil etsin diye verdim. Bu olay daha karmaşık ve uzun scriptlerde daha da belirgin bir şekilde rol oynayacaktır.

Text Tabanlı Sayaç

Text Tabanlı Sayaç

<%
strPath = "counter.txt"
strPath = Server.MapPath(strPath)
'File System objesini counter.txt dosyasını okuyup yazabilmemiz için kullanacağız
Set objScr = Server.CreateObject("Scripting.FileSystemObject")
'counter.txt dosyasının var olup olmadığına bakacağız
if not objScr.FileExists(strPath) then
'eğer yok ise dosyayı oluşturalım
set CreateFile = objScr.CreateTextFile(strPath)
CreateFile.writeline 0
Set CreateFile = nothing
end if
'counter.txt dosyasını açalım
Set OpenTxtFile = objScr.OpenTextFile(strPath)
'counter.txt dosyasını okuyalım
count = OpenTxtFile.ReadLine
'OpenTxtFile ın içini boşaltalım
Set OpenTxtFile = Nothing
'Okuduğumu sayıyı bir arttıralım
'(Tabi Burda sayfanıza gelen kişiyi arttırmak için 5 de arttırabilirsiniz) :)
count = count + 1
'count u bir arttırdığımız şekilde counter.txt dosyasına yazalım.
Set OpenTxtFile = objScr.CreateTextFile(strPath,true)
OpenTxtFile.writeline count
'OpenTxtFile ın içini boşaltalım
Set OpenTxtFile = Nothing
%>

Sitemizi toplam <%=count%> kişi ziyaret etmiştir.

MsgBox 'da Kullanılan Simgeler

MsgBox 'da Kullanılan Simgeler

Anlamı Değeri Simgesi
vbCritical 16 X
vbQuestion 32 ?
vbExclamation 48 !
vbInformation 64 İ
vbOKOly 0 Sadece OK dügmesini gösterir
vbOKCancel 1 OK ve Cancel " "
vbYesNoCancel 3 Yes, NO ve cancel " "
vbYesNo 4 Yes ve NO Düğmesini

Şimdilik Bukadar Yazıyorum Gerisi Gelecek

Bir Örnek Yapalım:

<SCRIPT LANGUAGE="VBScript">
Dim Deger
Deger = MsgBox ("Oldumu?", 35, "MsgBox Örnegi")
</SCRIPT>

Tarih ve Saat

Tarih ve Saat

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

Time: O andaki saati verir. (00:54:23 gibi)

Now: O andaki tarih ve saati birlikte verir. (14.01.2002 00:54:23 gibi)

VBScript’in buna ek olarak
Weekday (haftanın günü),
WeekdayName (günün adı)
Monthname (ayın adı)

Fonksiyonları da vardır. Bu fonksiyonlar değerlerini Date fonksiyonuna göre alırlarlar.

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

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

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

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

<%= Day(Date)%>... 14
<%= Month(Date)%>... 1
<%= Year(Date)%>... 2002

değerini verir. VBScript, bu değerleri doğruca işletim sisteminden alır. Dolayısıyla işletim sisteminin bölgesel ayarları Türkiye için yapılmışsa, gün adları Türkçe olarak Görünecektir....

Ayrıca, tarih ve saat biçimleri de bölgesel ayarlara bağlı olarak, ay önde, gün arkada veya tersi, saat de 12 saat veya 24 saat esasına göre döner. ASP programlarınızı kişisel Web Server'da denerken kendi bilgisayarınızın tarih ve saatini; gerçek Internet'te çalıştırırken Server'ın tarih ve saatini alırsınız. Sayfalarınızda ay ve gün adlarını Türkçe görüntülemek için, önce Server'ın bölgesel ayarlarını sınamanız ve eğer isimler Türkçe gelmiyorsa, bunları çeviren Sub'lar veya fonksiyonlar yazmanız gerekebilir.

Windows XP Professional Edition’da Yazma İzni Vermek

Windows XP Professional Edition’da Yazma İzni Vermek

Bir çok uygulama çalışırken veritabanı kullanır. Veritabanına yazma izni verilmediğinde uygulamalar hata verirler. ASP İndir’e en çok gelen hata bildirileri ve sorular da bu yönde. Microsoft’un Windows XP’de yazma izni vermemiz için gerekli olan kısmı gizli tutması nedeniyle bir çok kişi bu işlemde zorlanıyor. Uygulamaların çalışması için gerekli yazma izinlerini verebilmeniz için aşağıdaki adımları uygulamanız gerekiyor.

1. Öncelikle My Computer’a girip Tools/Folder Options’a giriyoruz. Ardından View tabına giriyoruz.

2. Burada en aşağıda “Use simple file sharing (Recommended)” seçeneğinin yanındaki işareti kaldırıyoruz. (Resim 1)

Use-simple-file-sharing

3. Artık “Security” tabımız aktif oldu. Dosyalarımızın bulunduğu dizine ters tıklıyoruz.
Properties’e giriyoruz. Buradaki listede IUSR_MakinaAdi (IUSR_PCNET gibi) isimli bir kullanıcı yok ise Add tuşuna basıyoruz varsa 5. adıma geçebilirsiniz. (Resim 2)

Security

Resim 3

4. Add tuşuna bastıktan sonra açılan pencerede Advanced tuşuna basıyoruz. Burada yeni bir pencere daha açılacak ve burada da Find Now tuşuna basacağız. Listeden IUSR_MakinaAdi kullanıcısını seçip; OK tuşuna basacağız. Görünen pencerede tekrar OK tuşuna basıyoruz. (Resim 3)

Advanced

Resim 4

5. Internet Guest Account(Makina\IUSR_MakinaAdi) kullanıcısına tıklayıp aşağıdaki yetkilerden Modify ve Write’ı seçiyoruz. (Resim 4) Ardından Apply & OK tuşlarına basıp kapanmasını sağlıyoruz. Artık bu dizin yazma izinlerine sahip.

Modify-Write

Resim 5