| Telif Hakları | Cem Yılmaz | Erotik Hikayeler | MP3 İndir ASP Veri Yönlendirmeli Web Uygulamaları | Açık bilgi paylsım alanı

ASP Veri Yönlendirmeli Web Uygulamaları

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.
Veri için hazırlık
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:
A DI S OYADI E MAIL S İTENO G RAFNO T URNO T URADI
T URRAYİÇ
Abdullah Can acan@sirket.com.tr 1 1 2 Intranet 4
Ş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!)
<randevu_tablo.jpg>
<siteler_tablo.jpg>
<olcu_tablo.jpg>
<graf_tablo.jpg>
Başlarken
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.
ODBC’e Veritabanımızı Bildirelim
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.
<DATA00004.TIF>
Sıra Web Programı’nda
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. Webprogramı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:
<HTML>
<HEAD>
<TITLE>Web Sitesi Yapılır</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">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:
<% @Language = VBscript %>
<HTML>
<HEAD>
<TITLE>Web Sitesi Yapilir</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" language=Turkish>
<br><br><br><br><br><center><table width="250"><tr><td>
<font face="arial" size="6">Arzu ettiğiniz siteyi sür'atle oluşturabiliriz.<p>Önce
nasıl bir site istediğinizi ve grafik malzemenin durumunu belirtin?</font> </P>
</td></tr></table>
<p><p><table width="500">
<form action="sayfa2.asp" method="get">
<TBODY><tr><td width="500" align="middle">
<p><!--#include file="siteler.inc"-->
Kullanılacak grafik malzemenin durumu: <!--#include file="grafikler.inc"--><br>
<br><br><br><p><input type="submit" value="Gönder" align="left"></p>
</td></tr></form></TBODY></table></center>
</BODY>
</HTML>
“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")
connsiteadi.open "web"
set siteadi=connsiteadi.execute(SQLSITEADI)
%>
<HTML>
<HEAD>
<TITLE>Web Sitesi Üretim Merkezi</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">Arzu ettiğiniz <%= siteadi(0) %> sitesini tasarlamaya hazırız.
<p>Bu sitenin kullanım amacı hakkında bilgi verir misiniz?</font>
<form action="icra.asp" method="get">
<input type="Hidden" name="siteNO" value="<%= siteNO %>">
<input type="Hidden" name="grafNO" value="<%= grafNO %>">
<% 'Bu bilgilerle Tür tablosundan bilgi seç. %>
<!--#include file="turler.inc"--> &nbsp;
<input type="Submit" value="Gönder" align="LEFT">
</form></td></tr></table></center>
</BODY>
</HTML>
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 QueryStringdeğ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:
Arzu ettiğiniz <%= siteadi(0) %> sitesini tasarlamaya hazırı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:
<input type="Hidden" name="siteNO" value="<%= siteNO %>">
<input type="Hidden" name="grafNO" value="<%= grafNO %>">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 "
SQLGRAFTUTAR=SQLGRAFTUTAR & "WHERE grafNO=" & grafNO
Set graftutar=conn.execute(SQLGRAFTUTAR)
grafkatsayi=graftutar(0)
grafdurum=graftutar(1)
SQLTURTUTAR="SELECT turRayic, turAdi FROM Tur "SQLTURTUTAR=SQLTURTUTAR & "WHERE turNO=" & turNO
set turtutar=conn.execute(SQLTURTUTAR)
turkatsayi=turtutar(0)
turadi=turtutar(1)
conn.close
SET conn = Nothing
bedel = 100 * turkatsayi * grafkatsayi * sitekatsayi
%>
<HTML>
<HEAD>
<TITLE>Web Tasarim Merkezi</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">Ç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>
<td width="50"></td>
<td width="300" valign="top"><!--#include file="rand.inc"--></td></tr></table>
</center>
</BODY>
</HTML>
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ş saatlerimiziseç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")
connrand.open "web"
Set rand=connrand.execute(SQLRAND)
%>
<font face="arial" size="5">
<% do while not rand.eof
%>
<a href="rezerv.asp?siteNO=<%= siteNO %>&grafNO=<%= grafNO %>&turNO=<%= turNO %>&randNO=<%=
rand(0) %>&randRayic=<%= bedel %>"><%= rand(1) %></a><br>
<%rand.movenext
loop%>
</font>
<% connrand.close
SET connrand = Nothing
%>
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:
<a href="rezerv.asp?siteNO=1&grafNO=1&turNO=1&randNO=10&randRayic=500"> 05.05.2000 14:00:00</a><br>
<veriuyg0004.tif>
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")
connzaman.open "Web"
Set zaman=connzaman.execute(SQLZAMAN)
randzaman=zaman(0)
connzaman.close
%>
<HTML>
<HEAD>
<TITLE>Randevu Defteri</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">Lütfen elverişli randevu zamanı olan<font color="blue"><%= randzaman %></font> için
rezervasyon yapmak üzere gerekli bilgileri giriniz.</font>
<p><font face="arial" size="4">
<form action="guncelle.asp" method="get">
<input type="Hidden" name="siteNO" value="<%= siteNO %>">
<input type="Hidden" name="grafNO" value="<%= grafNO %>">
<input type="Hidden" name="turNO" value="<%= turNO %>">
<input type="Hidden" name="randNO" value="<%= randNO %>">
<input type="Hidden" name="randRayic" value="<%= randRayic %>">
<input type="Text" name="adi" size="20"><i>Adınız</i>
<p><input type="Text" name="soyadi" size="20"><i>Soyadınız </i>
<p><input type="Text" name="email" size="20"> <i>e-adresiniz</i>
<p><input type="Submit" value="Gönder">
</form>
</td></tr></table><p><p></center>
</BODY>
</HTML>
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")
connupdate.open "web"
connupdate.execute(SQLINSERT)simdi = FormatDateTime(now,vbLongDateTime)
SQLUPDATE="UPDATE Randevu SET "
SQLUPDATE=SQLUPDATE & "email = '" & email & "', "
SQLUPDATE=SQLUPDATE & "randNezaman = '" & simdi & "', "
SQLUPDATE=SQLUPDATE & "randDurum = 'DOLU', "
SQLUPDATE=SQLUPDATE & "randRayic = " & randRayic
SQLUPDATE=SQLUPDATE & " WHERE randNO =" & randNO
connupdate.execute(SQLUPDATE)
connupdate.close
SET connupdate = Nothing
URL="son.asp?adi=" & adi
Response.Redirect (URL)
%>
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:
INSERT INTO Musteriler (adi, soyadi, email, siteNO, grafNO, turNO) VALUES (adi, soyadi, email, siteNO, grafNO,
turNO)
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.
Share this article :

Yorum Gönder

 
Gora İzle | İletişim | Sitemap
Destek : Cem Yılmaz Filmleri | Telif VB... Telif Hakkı © 2013. cem yılmaz filmleri - Tüm Hakkları Saklıdır.. Sitemizde yer alan tüm videolar, kaynak kodları ile video paylaşım sitelerinden alınmaktadır. Telif hakları sorumluluğu bu sitelere aittir videoların hiç biri sunucularımızda yüklü değildir. Hak sahiplerinin iletişim adresimizden talep etmesi halinde UYAR-KALDIR yöntemi işletilerek, istenen içerik iki iş günü içerisinde siteden kaldırılır.