Birinci kitapçıkta, ADO nesnesini tanıdık ve ne işe yaradığını gördük. Bu bölümde ADO nesnesinin nasıl kullanıldığını ele alacağız; bu amaçla veritabanına dayanan, HTML etiketlerinin içeriğini bir veritabanından alan ve ziyaretçinin girdilerini bir veritabanına yazan örnek uygulama oluşturacağız. Bunu yaparken ADO’yu tanıtırken ele almadığımız bazı SQL komutları ile tanışacağız.
Örnek uygulamamız, ünlü bir Web Tasarımcısının müstakbel müşterilerine randevu verdiği bir site olacak. Müstakbel müşterilerimiz, Web sitemize bağlanacaklar, nasıl bir Web sitesi oluşturmak istediklerini onlara sunacağımız bir listeden seçecekler; sitelerinin özelliklerini ve bizimle ilk görüşmeyi yapmak istedikleri zamanı belirtecekler; Web programımız, bütün bu bilgileri bir veritabanındaki veri tablolarına dayanarak müstakbel müşterimize seçenek olarak sunacak; ziyaretçinin kabul ettiği randevu zaman dilimini veritabanındaki tabloda başka müşterilere verilmemek üzere, kapatacak. Fakat bu işe başlamadan önce hızlı bir bir veritabanı oluşturma kursu görelim.
Kullanacağımız veritabanını burada MS Access ile oluşturacağız. Fakat siz istediğiniz herhangi bir programı, örneğin FileMaker Pro veya Paradox’u kullanabilirsiniz. Elinizin altında Oracle veya MS SQL Server varsa, onları kullanmanızdan daha tabiî bir şey olamaz.
İlişkilendirilmiş Veritabanı (Relational Database) deyimini daha öce duymuş olmalısınız. Web Programımızda, böyle bir veritabanı kullanacağız. İlişkilendirilmiş Veritabanı, bir dosya içinde tabloların en az bir sütunundaki kaydın diğer tablolardaki en az bir sütunla aynı olduğu ve bu iki sütun birbirine bağlanmış veritabanı demektir. (Bu örnekte kullanacağımız veritabanının Microsoft Access ile oluşturulmuş örneğini, bu kitapçığın kod örnekleri arasında bulabilir ve bilgisayarınızda kurulu bir veritabanı işleme programı ile inceleyebilirsiniz. Bu tabloları kendi programınızda oluşturmak isterseniz, kayıt alanları ve özelliklerini buradaki örneklere uygun olarak oluşturmalısınız.)
Veritabanı tablolarının ilişkilendirilme durumunu, oluşturacağımız veritabanının iki tablosu üzerinde gösterelim:
<musteri_tablo.jpg>
Bu tabloda, müşterinin kurmak istediği site türünü belirten bir endeks sütunu var: TurNO. (Daha sonra bu veritabanını yükleyeceğimiz Web Server’ın işletim sistemini bilmediğimiz için, Türkçe alfabeyi desteklemeyen bir Server’ın “Tablo veya Alan Bulunamadı” hatası vermesini önlemek için alan adlarında Türkçe karakter kullanmamaya özen göstermemiz gerekir.) Bu kayıt, Site Türleri tablosunda da var:
<tur_tablo.jpg>
Veritabanını oluştururken bu iki tabloyu TürNO sütunlarından ilişkilendirir ve ilerde veritabanına, “Bana, Müşteriler ve Site Türleri tablolarından TürNo sütunundaki veri aynı olan bütün kayıtları bul” şeklinde bir sorgulama emri (SQL JOIN komutu) verecek olursanız, Windows’un ODBC programı, veritabanını inceleyecek ve ortaya çıkartacağı verilerden biri şöyle olacaktır:
ADISOYADIEMAILSİTENOGRAFNOTURNOTURADITURRAYİÇ
AbdullahCanacan@sirket.com.tr112Intranet4
Şimdi diyebilirsiniz ki, daha sonra iki tabloyu birleştirmek yerine, neden baştan tek tablo yapmadık da, ilişkilendirme ve bir bir yığın SQL komutu yazma (ve tabiî öğrenme) külfetine girdik? Bunun çeşitli sebepleri var: Bir kere veritabanı uzmanları, birden fazla tabloda aynen tekrar eden değerleri, ayrı bir tabloda toplamayı bilgisayarın bellek yönetimi açısından daha etkin bir çalışma tarzı sayarlar. İkincisi, fiyat belirlerken Intranet türü Web siteleri için uygulayacağımız katsayıyı ilerde değiştirmek zorunda kalırsak, (bu iş tutarsa, en kısa zamanda fiyatlara zam yapacağımız şüphesiz olduğuna göre!) ve elimizde içinde 1500 kayıt bulunan bir tablo varsa, herbirinde türRayiç sütundaki veriyi tek-tek güncelleştirmek çok zor olabilir. Oysa bu tür ilişkilendirilmiş bir veritabanında bir tabloda bir kaydı değiştirmekle, bir diğer tablodaki binlerce, hatta milyonlarca kaydı güncelleştirmiş oluruz. Siz kendi veritabanınızı oluştururken, hangi verilerin hangi tabloda toplanacağına ve hangilerinin ayrı tablolara konulacağına şu kriterle karar verebilirsiniz: Bir tablonun birincil endeksine bağımlı olmayan bütün bilgiler o tablonun dışına çıkmalıdır. (Bu kriter size bir ölçüde şifreli görünüyorsa, veritabanı oluşturma ve yönetme konusunda bir kitap edinmeniz yerinde olur!)
Veritabanı konularına aşina olmayanlar için bir iki noktaya daha açıklık getirmek gerekir. Tablolarımızın alan adlarını ve alanlardaki verilerin türlerini gösteren tabloya bakarsanız, bütün tablolarda bir sütunun “Birincil endeks” diye işaretlendiğini göreceksiniz. Bu alan, biri dışında bütün tablolarda otomatik sıra numarası şeklinde; Müşteri tablosunda ise müşterinin elektronik posta adresi şeklinde tayin edilmiş bulunuyor. Bu alanın varlık sebebi, kayıtlarımızda diğer bütün alanlardaki verileri aynı bile olsa her bir müşterinin ayrı bir varlık olarak korunmasını sağlar. (Tabiî, burada, iki müşterinin aynı elektronik posta adresine sahip olmayacağını varsayıyoruz!)
Biraz daha teknik olarak ifade edersek, inşa ettiğimiz programın (Web sitesinin) fonksiyonu, müşteriden bazı temel bilgileri alıp, bu bilgileri müşteri tablosuna işlemek, müşteriye bizim randevu defterimize (veri tabanındaki Randevu tablosuna) bakarak, boş bir zaman önermek, müşterinin kabul ettiği zaman dilimini Randevu tablosuna işlemek, ve bu zaman dilimini başkasına vermemek üzere kapatmak olacak. Biz, Web sitesi tasarımcısı olarak, sürekli, veritabanı dosyasını açarak, yeni randevu alan olup olmadığını kontrol etmek zorundayız. Yine arada bir, Randevu tablosuna yeni müşteri kabul edebileceğimiz boş zamanlarımızı eklememiz gerekir. Bu işlemi, örneğin Access programını kullanarak yapabiliriz.
Bu amaçla kullanacağımız tabloların ilişkilerini şöyle gösterebiliriz:
<relation.jpg>
Bu şemada görülen ilişkiler şu anda bir anlam ifade etmiyorsa, biraz sonra tablo çok daha aydınlanacaktır. Şimdilik, ya bu tablolara ve ilişkilere sahip bir veritabanı oluşturun; ya da örnek veritabanı dosyasını Kişisel Web Server’ın dizini içine kopyalayın.
Windows’un Denetim Masası’nı açtığınızda, ya ODBC Data Sources, ya da ODBC(32 Bit) adlı bir simge göreceksiniz.
<DATA00001.TIF>
İkinci sekme olan System DSN’i açın ve Add (Ekle) düğmesini tıklayın. Açılacak kutuda, veritabanı dosyanıza uygun sürücüyü seçin. Bu kitapçığın örnek kodları arasında bulacağınız web.mdb adlı dosyayı kullanıyorsanız, Microsoft Access Driver adlı sürücüyü seçin) ve Son düğmesini tıklayın.
<DATA00002.TIF>
Açılacak kutuda Data Source Name (Veri kaynağının adı) kutusuna Web (veya kendi veritabanınızın adını) yazın, isterseniz Description kutusuna veritabanını tanımlayan bir kaç kelime yazabilirsiniz. Database bölümünde Select (Seç) düğmesini tıklayarak veritabanı dosyanızı bulun.
<DATA00003.TIF>
Şimdi, bilgisayarınızın ODBC arayüzü, Kişisel Web Server’ınız (vereceğimiz ASP komutları dolayısıyla) talep ettiği anda Browser’ınıza Web adlı veritabanından arzu edilen verileri seçip verecek veya bu dosyadaki tablolarda (yine ASP komutları ile talep edeceğiniz) güncelleştirmeleri yapacaktır.
Kuracağımız sitenin işleyiş tarzını veya stratejisini bir kere daha belirtelim: Sitemize ev sahipliği yapan Web Server’da bir veritabanı dosyamız var ve elimizdeki iş durumuna göre randevu verebileceğimiz, serbest olduğumuz günleri bu veritabanındaki Randevu tablosuna işliyoruz. Ziyaretçilerimiz, ana sayfadan geçtikten sonra, bir Web sitesi yaptğrmek için bizimle görüşmek istiyorlarsa, bazı bilgiler veriyorlar ve bu bilgilere göre, Web programımız, müşteriye tanımladığı siteyi kaça yapacağımızı bildiriyor ve boş olduğumuz zamanların bir listesini sunuyor. Müşteri adayı, bu listeden kendisi için elverişli zamanı seçiyor. Web programımız müşterinin verdiği bilgileri veritabanına işliyor; ve müşterinin seçtiği zamanı randevu tablosunda kapalı hale getiriyor, ki aynı zaman aralığı başka bir müşteriye daha önerilmesin! (Aşağıda, sayfalarımızı adım-adım oluştururken, oluşturduğmuz bazı değişkenlerin ne işe yarayacağı o anda belli olmayabilir. Bunları anlamadan geçmemek için önerim, bu kitapçığın kodlarını edindiyseniz, veritabanını sisteminize tanıtarak, ilgili ASP programını index.htm’den başlayarak bir kaç kere çalıştırmanızdır.)
Önce index.htm sayfamızı yapalım. Bu basit bir “Hoşgeldiniz!” sayfası olacak. aşağıdaki kodu index.htm adıyla kaydedin:
<tr><td><font face="arial" size="6">Web Sitenize Sahip Olmak İstiyorsunuz?<br></font>
<p><p><p><font face="arial" size="3">Ama nasıl? HTML, ASP, ADO, ODBC ve daha bir çok alfabe çorbası öğrenmek zorundasınız
<p>Ama bunları öğrenmeye zamanınız yok. Aslında öğrenirsiniz öğrenmeye, fakat zaman meselesi.
<p>Biz çook siteler yaptık, ve size de yardıma hazırız. Bizim işimiz Web sitesi yapmak!
<p>Sizin de sitenizi yapalım.
<p><p><center><a href="sayfa1.asp">Size de yardımcı olalım</a></center></font>
</td></tr></table></center>
</BODY></HTML>
<veriuyg0001.tif>
Bu sayfamızda verdiğimiz mesajı beğenen müstakbel müşterilerimiz, sayfadaki köprüyü tıklayarak, nereye gidecekler? Şu aşağıdaki kodun yer aldığı sayfaya. Bunu da sayfa1.asp adıyla kaydedin:
“Bu sayfada ASP tekniği kullanmayı gerektiren hemen hemen hiç bir öge yok!” diyebilirsiniz; ama demeyin. İki haricî dosyayı #include yoluyla sayfaya eklediğimizi göruyor musunuz? Bu sayfanın bütün işlevi işte bu iki dosyada gizli!
siteler.inc ve grafikler.inc, veritabanından veri çeken ve bunu getirip yukarıdaki yerlere yazmakla görevli olacaklar. Önce siteler.inc’i yapalım:
<%
'Siteler tablosundan siteAdi sütunundaki bilgileri al.
SQLSITE = "SELECT siteAdi, siteNO FROM Siteler"
set connsite = server.createobject("ADODB.Connection")
connsite.open "web"
set siteler=connsite.execute(SQLSITE)
%>
<select name="siteNO">
<% 'Listedeki her kayit için su isi yap. %>
<% Do while Not siteler.eof %>
<Option value = "<%= siteler(1) %>"><%= siteler(0) %></Option>
<%siteler.MoveNext
Loop%>
</select>
<% siteler.close %>
Hatırlarsanız, #include yoluyla sayfaya eklenen dosyanın içeriği ne ise aynen bu komutun olduğu yere yazılmış gibi olur, demiştik. sayfa1.asp’ye bakın; ve yukarıdaki kodu tam siteler.inc’in olduğu yerde düşünün. Şimdi siteler.inc, tek bir iş yapıyor: web isimli DSN’in verdiği bilgiler arasından Siteler tablosundan siteAdi ve siteNo sütunlarındaki bütün bilgileri çekiyor ve bunu HTML’in SELECT etiketinin içini doldurmakta kullanıyor. OPTION’ın nasıl yazıldığını hatırlıyorsunuz değil mi?
Şimdi siteler.inc’in içine bakabiliriz. Önce “SELECT siteAdi, siteNO FROM Siteler” ifadesini ele alalım. Bu, yukarıda sözünü ettiğimiz SQL dili ile, Windows’un ODBC arayüzüne vereceğimiz VBScript komutudur. Peki, bu edindiğimiz veriler nerede duruyor? ASP’nin çalıştığı Web Server’ın bulunduğu işletim sisteminin RAM’inde (veya sanal belleğinde) oluşturulan geçici bir tabloda duruyor. Veritabanındaki Siteler tablosunda birinci sütunda siteNo, ikinci sütunda ise siteAdi alanları var. Burada önce siteAdi’ni okutuyoruz; yani dizi değişkenin siteler(0) adlı birinci ögesi site türü adını, siteler(1) adlı ikinci ögesi ise bu türün numarasını tutuyor. Nitekim, bir Do döngüsü ile bu değerleri SELECT’in ögeleri olarak kullandığımızda önce OPTION’ın VALUE özelliğini siteNo, metnini ise siteAdi ile dolduruyoruz. Ve tabiî açtığımız veri bağlantısını kapatıyoruz: “siteler.close”.
Şimdi sayfa1.asp’nin ikinci haricî dosyası olan grafikler.inc’i yazalım:
<%
'Grafik durumuyla ilgili bilgileri Grafik tablosundan al.
SQLGRAF = "SELECT grafNO, grafDurum FROM Grafik"
Set conngraf = server.createobject("ADODB.Connection")
conngraf.open "web"
Set graf=conngraf.execute(SQLGRAF)
%>
<SELECT name="grafNO">
<% Do while Not graf.eof %>
<% 'Bu bilgilerle seçenek kutusu yap. %>
<Option value = "<%= graf(0) %>"><%= graf(1) %></Option>
<%graf.movenext
loop%>
<% graf.close %>
</select>
Bu dosya üzerinde uzun uzadıya durmaya gerek yok; yine aynı DSN’den, fakat bu kez veritabanıın Grafik tablosundan iki alandaki verileri çekiyoruz; Do döngüsü ile yeni bir SELECT’in içini dolduruyoruz. include dosyaları ile birlikte bu sayfa şu görüntüyü veriyor:
<veriuyg0002.tif>
sayfa1.asp’deki formun Gönder düğmesi tıklandığında bu bilgilerin GET metoduyla sayfa2.asp’ye gönderileceğini hatırlayacaksınız. O halde, bu HTML kodunu, sayfa2.htm adıyla kaydedin:
<%@ Language = VBscript %>
<%
Dim siteNO
Dim grafNO
Dim SQLSITEADI
Dim connsiteadi
Dim siteadi
siteNO=Request.Querystring("siteNO")
grafNO=Request.Querystring("grafNO")
SQLSITEADI="SELECT siteAdi FROM Siteler "
SQLSITEADI=SQLSITEADI & "WHERE siteNO= " & siteNO
set connsiteadi = server.createobject("ADODB.Connection")
sayfa1.asp, ziyaretçimizin Form’da yaptığı iki seçimin değerini sayfa2.asp’ye gönderdiğinde, sayfa2.asp bunları otomatik olarak kullanamaz; bilgiler GET yoluyla geldiği için QueryString değişkeninin içine yazılacak bu bilgileri bizim kullanılır hale getirmemiz gerekir. Yukarıdaki kodun şu satırları bu işi yapıyor:
siteNO=Request.Querystring("siteNO")
grafNO=Request.Querystring("grafNO")
sayfa1.asp’nin gönderdiği siteNo ve grafNo değişkenlerinin değerleri (bu kez bu sayfanın aynı isimdeki) değişkenlerine değer olarak atanıyor. sayfa2.asp’de yapacağımız veri işlemlerinde bu değerleri ölçüt olarak kullanacağız:
SQLSITEADI="SELECT siteAdi FROM Siteler "
SQLSITEADI=SQLSITEADI & "WHERE siteNO= " & siteNO
Burada aslında tek sorgu deyimi oluşturduğumuz halde, derdimizi neden iki ayrı satırda anlatıyoruz? Daha önce yazdığımız sorgu deyimlerine bakın? Tümü çift tırnak içinde değil mi? Peki, burada siteNo değişkenini tırnak içine alırsak ne olur? Değişken, değişken olmaktan çıkar; metin olur; oysa biz burada siteNo değişkeninin vereceği değeri kullanmak istiyoruz. Bu yolla veritabanından çekeceğimiz değeri hemen aşağıda metnin içinde kullanacağız:
Sadece bir değer istediğimiz ve bu değiri ihtiyacımıza uygun seçtiğimiz için veri okutma işini döngüyle yapmıyoruz bu kez; okunan ilk değeri Response.Write metodunun kısaltmasıyla, sayfaya gönderiyoruz. Bu arada ziyaretçimizden ek bilgi almaya devam ediyoruz; yeni bir haricî dosya ile bu kez size tasarlatmak istedikleri sitenin türünü soruyoruz; bu bilgileri ise turler.inc sağlıyor:
<%
SQLTUR="SELECT turNO, turAdi FROM Tur"
set conntur = server.createobject("ADODB.Connection")
conntur.open "web"
set tur=conntur.execute(SQLTUR)
%>
<SELECT NAME="turNO">
<% Do While not tur.eof %>
<Option value = "<%= tur(0) %>"><%= tur(1) %></Option>
<%tur.movenext
Loop%>
<% tur.close %>
</select>
Bu kodun irdelenmesine gerek yok; Tur tablosundan turNo ve turAdi alanlarındaki değerleri alıyoruz ve OPTION etiketinin içini dolduruyoruz. Devam etmeden önce sayfa2.asp’de dikkatinizi çekmiş olması gereken şu iki satıra dönelim:
HTML’den hatırlayacaksınız, Form’un içinde Server’a “gizli” (HIDDEN) türü değişken ve değer gönderebiliriz. Buradaki “gizli” kelimesi sizi aldatmasın; Form bir HTML ögesidir ve ziyaretçi Browser’ının kaynağı görüntüleme aracı vasıtasıyla gizli-açık herşeyi görebilir. Buradaki gizlilik sadece bu değişkenlerin sayfada görüntülenmemesinden ibarettir. Bu iki sözüm-ona gizli değişkene, taa kodumuzun başında elde ettiğimiz siteNo değişkeni ile biraz önce veritabanından çektiğimiz grafNo değişkenlerini atıyoruz. (Merak etmeyin! Hepsini daha sonra kullanacağız.)
<veriuyg0003.tif>
Ve bu kullanımı, Form’umumuzun ACTION özelliğinde adı yazılı olan icra.asp yapacak. Şu uzunca kodu bu isimle kaydedin:
<%@ Language = VBscript %>
<%
Dim siteNO, grafNO, turNO, randNO
Dim SQLSITETUTAR, SQLGRAFTUTAR, SQLTURTUTAR
Dim bedel, turkatsayi, grafkatsayi, sitekatsayi
siteNO=Request.Querystring("siteNO")
grafNO=Request.Querystring("grafNO")
turNO=Request.Querystring("turNO")
randNO=Request.Querystring("randNO")
SQLSITETUTAR="SELECT siteAdi, olcRayic FROM Siteler, Olcu "
SQLSITETUTAR=SQLSITETUTAR & "WHERE Siteler.olcNO = Olcu.olcNO and siteNO=" & siteNO
Set conn = server.createobject("ADODB.Connection")
conn.open "web"
Set sitetutar=conn.execute(SQLSITETUTAR)
siteadi=sitetutar(0)
sitekatsayi=sitetutar(1)
SQLGRAFTUTAR="SELECT grafRayic, grafDurum FROM Grafik "
<font face="arial" size="6">Çok güzel!<p>Grafik malzemesi <%= grafdurum %> olan <%= siteadi %> ve <%= turadi %> amaçlı bir Web sitesi, için ücret US$<%= bedel %> olacaktır.</font></td></tr></table><br><br><br><br>
<table width="500"><tr><td width="150" valign="top"><font face="arial" size="5">İlk görüşme için iki saatlik randevu almanız gerekir.</font>
<p><font face="arial" size="3">(Açık olan randevu tarihi ve saatinden beğendiğinizi tıklayınız)</font></td>
Adı icra.asp olduğuna göre, bu sayfa çok iş icra ediyor olsa gerek! Gerçekten de bu sayfa, daha önceki sayfalarda elde ettiğimiz bütün bilgileri kullanarak ziyaretçi sitesini kaç paraya yapacağımızı hesap edecektir. icra.asp, önce Querystring’den alacağı bilgileri, kendi işine yarayacak değişkenlere yerleştirecek ve bunlarla üç katsayı hesaplayacak ve bu katsayıları kullanarak müşterinin sitesi için bir bedel çıkartacak (“bedel = 100 * turkatsayi * grafkatsayi * sitekatsayi”). Sonra “bedel” değişkeninin içindeki değeri müşteriye Dolar olarak bildirecek (Bedel formülünde 100 yerine mesela 600000 rakamını, veya bu işi yaptığınız andaki Dolar’ın TL cinsinden kurunu gösteren rakamı, kullanarak, fiyatı Dolar yerine TL olarak da bildirebilirsiniz). icra.asp daha sonra rand.inc’in yardımıyla veritabanından boş saatlerimizi seçerek müşteriye randevu alması için sunacaktır. rand.inc, veritabanımızın Randevu tablosundan serbest zaman dilimlerini okumak ve elde edeceği sonucu icra.asp programına vermektedir. Şu kodu rand.inc adıyla kaydedelim:
<%
SQLRAND="SELECT randNO, randZaman FROM Randevu WHERE randDurum = 'SERBEST' ORDER BY randZaman"
Set connrand = server.createobject("ADODB.Connection")
Bu haricî dosyamız, öncekilerden farklı: bir OPTION etiketini değil; fakat bir Anchor etiketinin içini dolduruyor. Bu etikete dikkat edersek, HREF özelliğinin değeri olan rezerv.asp’ye aslında bir çok bilginin gönderilmesine de yaradımcı oluyor, Herhangi bir ziyaretçinin seçimleri sonucu oluşacak bir örnek şu olabilirdi:
Bu, rezervasyon yaptıracak olan sayfaya, siteNo, grafNo, randNo ve biraz önce hesapladığımız randRayic değişkenlerini gönderiyor. Bu sayfa ise, aşağıdaki kodlarla kaydedeceğimiz rezerv.asp:
<%@ Language = VBscript %>
<%
Dim siteNO, grafNO, turNO, randNO, randRayic
Dim SQLZAMAN, connzaman, zaman, randzaman
siteNO=Request.Querystring("siteNO")
grafNO=Request.Querystring("grafNO")
turNO=Request.Querystring("turNO")
randNO=Request.Querystring("randNO")
randRayic=Request.Querystring("randRayic")
SQLZAMAN="SELECT randZaman FROM randevu "
SQLZAMAN=SQLZAMAN & "WHERE randNO=" & randNO
Set connzaman = server.createobject("ADODB.Connection")
<font face="arial" size="6">Lütfen elverişli randevu zamanı olan<font color="blue"><%= randzaman %></font> için rezervasyon yapmak üzere gerekli bilgileri giriniz.</font>
Gerçi bu sayfanın sadece ziyaretçiye seçtiği randevu tarih ve saatini bildirdiğini ve ziyaretçiden bize adını, soyadını ve elektronik mektup adresini vermesi istediğini göreceksiniz, ama gerçekte bu sayfa şu ana kadar oluşturduğumuz veri kümesini veritabanına yazmak üzere hazırlık yapmaktadır. Gizlenmiş (HIDDEN) değişkenlerin görevi bu.
<veriuyg0005.tif>
Derlenen bu değişkenlerin tümü, ziyaretçinin gireceği bilgiler dahil, guncelle.asp’ye gönderilecek. O halde o kodu yazalım:
<%@ Language = VBscript %>
<%
Dim siteNO, grafNO, TurNO, randNO, randRayic, adi, soyadi, email
Dim SQLINSERT, connupdate, SQLUPDATE, URL, simdi
siteNO=Request.Querystring("siteNO")
grafNO=Request.Querystring("grafNO")
turNO=Request.Querystring("turNO")
randNO=Request.Querystring("randNO")
randRayic=Request.Querystring("randRayic")
adi=Request.Querystring("adi")
soyadi=Request.Querystring("soyadi")
email=Request.Querystring("email")
SQLINSERT="INSERT INTO Musteriler (adi, soyadi, email, siteNO, grafNO, turNO) "
SQLINSERT=SQLINSERT & "VALUES ("
SQLINSERT=SQLINSERT & "'" & adi & "', "
SQLINSERT=SQLINSERT & "'" & soyadi & "', "
SQLINSERT=SQLINSERT & "'" & email & "', "
SQLINSERT=SQLINSERT & siteNO & ", "
SQLINSERT=SQLINSERT & grafNO & ", "
SQLINSERT=SQLINSERT & turNO & ") "
set connupdate = server.createobject("ADODB.Connection")
Programı çalıştırdıysanız, guncelle.asp’nin Browser’ın yüzünü bile görmediğini farketmiş olmalısınız; Yukarıdaki kodun, ziyaretçiye kendi yerine başka bir sayfayı gönderdiğini nereden anlıyoruz? En sondaki “Response.Redirect” komutundan. Bu komut ziyaretçiye, son.asp sayfasını yolluyor. Fakat bu sayfaya geçmeden önce yaptığımız güncelleme işleminin üzerinde duralım. Bu programda uzunca bir SQL INSERT deyimi hazırlıyoruz:
Daha önce SQL dilinin SELECT deyimini öğrenmiştik. INSERT de bir veritabanına veri ekleme işini yapan SQL deyimidir. Deyimin INTO bölümüne tablonun adını ve hangi alanların bulunduğunu; VALUES bölümüne ise bu alanlara atayacağımız değerleri yazarız. Bizim programımızda değerler, değişkenlerden alınacağı için dikkatli bir yazma işlemi gerekiyor. Bu yüzden değişken adları ile & (ve) işareti ve virgülü birbirinden kolayca ayırt etmek için uzunda bir yazma yöntemi kullanıyoruz. Hazırladığımız bu deyimle yeni müşteriyi müşteriler tablosuna ekliyoruz. Programımızda bir de SQL UPDATE deyimi var. Bu deyimle, mevcut Randevu tablomuzda müşterinin seçtiği zaman aralığına ait girdiyi, SERBEST’ten DOLU’ya çeviriyoruz ve bu zamanı kime ayırdığımızı, bu görüşmenin saat ücreti olan rayici tabloya işliyoruz. Bu amaçla oluşturduğumuz SQL UPDATE deyimi şöyle gösterilebilir:
UPDATE Randevu SET email = "email", randNezaman = "simdi", randDurum = "DOLU", randRayic = "randRayic" WHERE randNO = "randNO"
SQL’in UPDATE deyiminin de bölümleri vardır. SET bölümünde hangi alana ne değeri gireceğimizi belirtiriz. Normal bir SQL deyiminde alan adının kanşısına bu alana yazılacak değer girerken, burada olduğu gibi değerleri değişkenlerden de alabiliriz. Burada gösterilen kelimeler değişken adı ise tırnak dışında yazılmalıdır. Bunu sağlamak ve aralarına gereken virgülleri koyabilmek için, yine uzunca bir deyim yazıyoruz.
Şimdi, aşağıdaki kodu son.asp adıyla kaydedelim:
<%@ Language = VBscript %>
<%
adi=Request.Querystring("adi")
%>
<html>
<head>
<title>Randevunuz Kesinlesti</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=DarkOrange text="white">
<br><br><br><br><br><center>
<table width="250">
<tr><td><font face="arial" size="6"><%= adi %>, sizinle verimli bir işbirliği yapacağımızdan eminiz. Çok teşekkürler. Görüşmek üzere.</font></td></tr>
</table>
</BODY>
</html>
Bu sayfa, ziyaretçimize bir önceki sayfada kaydettiğimiz adi değişkenin değeri alarak, yani müşteriye adıyla hitabediyor ve randevusunun kesinleştiğini bildiriyor; ve veri-yönlendirmeli Web uygulamamızın da sonu oluyor.
<veriuyg0006.tif>
İşte hepsi bu. Ziyaretçimizden veri aldık; veritabanından veri çektik; bunları sayfalarımızda kullandık ve veritabanına işledik. Fakat bu ASP programlarında, veritabanıyla ilgili unsurların dikkatten kaçmaması için, güvenlikle ilgili önlemler alınmadığına, ziyaretçinin girdiği değerlerin denetlenmediğine dikkat etmiş olmalısınız. Normal olarak Internet’e koyacağımız ASP programlarımızda güvenlikle ilgili bölümler olması gerekir. Bu ve diğer program-konulu unsurları son bölümde ele alacağız.
Bugün 146 ziyaretçi (231 klik)
www.bilisim-egitim.tr.gg