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:41   #11
Ç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)




KONUK DEFTERİ UYGULAMASI
Bu bölümde ilk tam ASP sitesini adım adım birlikte oluşturacağız; daha önce teorik veya kısaca uygulamalı gördüğümüz komutları, metodları ve ifadeleri toplu halde kullanma imkanı bulacağız.
Konuk Defteri, Internet sitemizi ziyaret edenlerle en kolay bilgi alışverişi yöntemidir; konuklarımız defterimize kendileri hakkında bazı bilgiler girerler. Burada yapacağımız örnekte, ziyaretçimize önce konuk defterimize bilgi girmek isteyip istemediğini soran bir sayfa sunacağız; burada konuk defteri bilgilerinin yer aldığı bir Form sayfasına gitmesini sağlayan köprü olacak. Form sayfamızdaki Gönder düğmesi tıklandığında bir ASP sayfası, Form’un yolladığı bilgileri ziyaretçimize gösterecek ve arzu ederse defterde yer alan diğer bilgileri okuma imkanı verecek. Ziyaretçimiz defterdeki diğer bilgileri okumak isterse, bir diğer ASP sayfası, bu bilgileri dosyadan okuyarak ziyaretçimize sunacak.
Birinci sayfamız burada basit bir HTMLsayfası ancak siz bunu isterseniz kendi ana sayfanızla bütünleştirebilirsiniz. Diyelim ki aşağıdaki kodu, konuk01.htm adıyla kaydettik:
<HTML>
<HEAD>
<TITLE>KONUK DEFTERIM</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>Hoşgeldiniz!</CENTER></H1>
Konuk Defterimi imzalamak ister misiniz?
&#199;ok teşekk&#252;rler
<p><A HREF="konuk02.htm">Deftere Git</A>
</BODY>
</HTML>
Burada konuk defterini izmalamak isteyenler i&#231;in konuk defterini i&#231;eren dosyaya bir k&#246;pr&#252; var. Aşağıdaki form da konuk defterimiz olsun! Bunu da konuk02.htm adıyla kaydedelim:
<HTML>
<HEAD>
<TITLE>KONUK DEFTERIM</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>Konuk Defteri!</CENTER></H1>
Konuk defteri sayfama hoşgeldiniz. Buraya kaydedeceğiniz bilgilerle birbirimizi daha iyi tanıma imkanı bulabiliriz.
<p>&#199;ok teşekk&#252;rler</p>
<FORM ACTION="konuk_isle.asp" METHOD="post">
<p>Adınız: <INPUT TYPE="Text" SIZE="20" NAME="Adi"></p>
<p>Soyadınız: <INPUT TYPE="Text" SIZE="20" NAME="Soyadi"></p>
<p>E-Posta Adresiniz: <INPUT TYPE="Text" SIZE="20" NAME="Email"></p>
<p>D&#252;ş&#252;nceleriniz: <br><TEXTAREA NAME="Mesaj" COLS="40" ROWS="4">Sitem hakkındaki d&#252;ş&#252;nceleriniz</TEXTAREA></p>
<INPUT TYPE="Submit" NAME="Gonder" VALUE="G&#246;nder!">&nbsp;<INPUT TYPE="Reset" NAME="Sil" VALUE=" Sil! ">
</BODY>
</HTML>
Burada oluşturduğumuz HTML alanlarından d&#246;rd&#252;, daha sonra işlenmek &#252;zere, bize d&#246;rt değişken verecek: Adi, Soyadi, Email ve Mesaj.
Aşağıdaki kod ile bu verileri işleyeceğiz. Bu kodları da konuk_isle.asp adıyla kaydedelim:
<%
@LANGUAGE=VBscript
Option Explicit
%>
<HTML>
<HEAD>
<TITLE>KONUK DEFTERI KAYIT</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>Verdiğiniz Bilgiler:</h2>
Adınız: <%=Request.Form("Adi")%><BR>
Soyadınız: <%=Request.Form("Soyadi")%><BR>
E-Posta Adresiniz: <%=Request.Form("Email")%><BR>
D&#252;ş&#252;nceleriniz: <%=Request.Form("Mesaj")%><BR>
<p>
<%
Dim DosyaSistemi, KonukDosyasi
Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")
Set KonukDosyasi = DosyaSistemi.OpenTextFile("c:\inetpub\
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
klar.txt",8, True)
KonukDosyasi.WriteLine Request.Form("Adi")
KonukDosyasi.WriteLine Request.Form("Soyadi")
KonukDosyasi.WriteLine Request.Form("Email")
KonukDosyasi.WriteLine Request.Form("Mesaj")
KonukDosyasi.Close
%>
<H3>Konuk Defterime kaydedildi. &#199;ok teşekk&#252;r ederim.</H3>
<A HREF="konuk_oku.asp">Konuk Defterini Oku!</A>&nbsp;&nbsp;&nbsp;<A HREF="index.htm">Ana Sayfaya D&#246;n!</A>
</BODY>
</HTML>
Burada biraz duralım ve konuk_isle.asp’yi irdeleyelim. Form’u oluşturan sayfamızda dikkat ettiğiniz gibi, verileri POST metodu ile alıyoruz; dolayısıyla Form’dan gelen bilgiler, Request nesnesinin Form kolleksiyonunda yer alıyor; ve &#246;nce bu bilgileri ziyearet&#231;imizin Browser penceresine yazdırıyoruz. Ziyaret&#231;imiz b&#246;ylece ne bilgi verdiğini ber kere daha g&#246;rm&#252;ş oluyor. Sonra, FileSystem nesnesini kullanarak, bu bilgileri Web Server’ın k&#246;k dizininde konuklar.txt adlı dosyaya eklettiriyoruz. Bu işlemi yapan WriteLine metodu, her bir değişkenin değerini yazdıktan sonra satır sonuna yeni satır karakteri girecektir. Yine Bu bilgilerin kaydedildiğini ziyaret&#231;iye bildirdikten sonra, kendisine defterimizdeki diğer girdileri okuma veya ana sayfaya d&#246;nme se&#231;eneğini veriyoruz. Ziyaret&#231;i, defterdeki diğer bilgileri okuma se&#231;eneğini se&#231;ecek olursa gideceği sayfanın kodları ise aşağıda. Bu kodları da konuk_oku.asp adıyla kaydedelim:
<%
@LANGUAGE=VBscript
Option Explicit
%>
<HTML>
<HEAD>
<TITLE>KONUK DEFTERI 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>
<h2>Konuk Defterimde Yeralan Bilgiler:</h2>
Bug&#252;ne kadar konuk defterimi imzalayan b&#252;t&#252;n dostlarıma teşekk&#252;r ederim.
<p>
<%
Dim DosyaSistemi, KonukDosyasi, Adi, Soyadi, Email, Mesaj
Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")
Set KonukDosyasi = DosyaSistemi.OpenTextFile("c:\inetpub\
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
klar.txt",1)
Do While Not KonukDosyasi.AtEndOfStream

Adi = KonukDosyasi.ReadLine
Soyadi = KonukDosyasi.ReadLine
Email = KonukDosyasi.ReadLine
Mesaj = KonukDosyasi.ReadLine
Response.Write Adi & "<BR>"
Response.Write Soyadi & "<BR>"
Response.Write Email & "<BR>"
Response.Write Mesaj & "<P>"
Loop
KonukDosyasi.Close
%>
<A HREF="index.htm">Ana Sayfaya D&#246;n!</A>
</BODY>
</HTML>
Şimdi de bu kodun &#252;zerinde duralım: Yine FileSystem nesnesinin OpenTextFile metodu ile, mevcut konuk girdileri dosyasını a&#231;ıyoruz; ve i&#231;eriğini Do d&#246;ng&#252;s&#252; ile, dosya sonuna varıncaya kadar ReadLine metodu ile okutuyoruz. ReadLine, dosyayı satır –satır okuyacaktır; burada ”satır” &#246;l&#231;&#252;s&#252;, dosya başı ile satırsonu-yeni satır (CRLF veya enter/Return) karakteri, iki satırsonu arası, veya bir satırsonu ve dosya sonu işareti arasında kalan metindir. Dosyamızın her bir satırı bir değişkenin değeri olarak yazıldığına g&#246;re, okunan her satır sırasıyla, Adi, Soyadi, Email ve Mesaj değişkenlerine değer olarak kaydedilecek ve ziyaret&#231;ininin Brıowser penceresine yazılacaktır.
Bu ana kodun etrafında sayfalarını g&#246;rsel olarak zenginleştirmek, tabi&#238; sizin elinizde!

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Alt 17 Mart 2007, 20:41   #12
Ç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)




VERİ Y&#214;NLENDİRMELİ WEB UYGULAMASI
Birinci kitap&#231;ıkta, ADO nesnesini tanıdık ve ne işe yaradığını g&#246;rd&#252;k. Bu b&#246;l&#252;mde ADO nesnesinin nasıl kullanıldığını ele alacağız; bu ama&#231;la veritabanına dayanan, HTML etiketlerinin i&#231;eriğini bir veritabanından alan ve ziyaret&#231;inin girdilerini bir veritabanına yazan &#246;rnek uygulama oluşturacağız. Bunu yaparken ADO’yu tanıtırken ele almadığımız bazı SQL komutları ile tanışacağız.
&#214;rnek uygulamamız, &#252;nl&#252; bir Web Tasarımcısının m&#252;stakbel m&#252;şterilerine randevu verdiği bir site olacak. M&#252;stakbel m&#252;şterilerimiz, Web sitemize bağlanacaklar, nasıl bir Web sitesi oluşturmak istediklerini onlara sunacağımız bir listeden se&#231;ecekler; sitelerinin &#246;zelliklerini ve bizimle ilk g&#246;r&#252;şmeyi yapmak istedikleri zamanı belirtecekler; Web programımız, b&#252;t&#252;n bu bilgileri bir veritabanındaki veri tablolarına dayanarak m&#252;stakbel m&#252;şterimize se&#231;enek olarak sunacak; ziyaret&#231;inin kabul ettiği randevu zaman dilimini veritabanındaki tabloda başka m&#252;şterilere verilmemek &#252;zere, kapatacak. Fakat bu işe başlamadan &#246;nce hızlı bir bir veritabanı oluşturma kursu g&#246;relim.
Veri i&#231;in hazırlık
Kullanacağımız veritabanını burada MS Access ile oluşturacağız. Fakat siz istediğiniz herhangi bir programı, &#246;rneğin FileMaker Pro veya Paradox’u kullanabilirsiniz. Elinizin altında Oracle veya MS SQL Server varsa, onları kullanmanızdan daha tabi&#238; bir şey olamaz.
İlişkilendirilmiş Veritabanı (Relational Database) deyimini daha &#246;ce duymuş olmalısınız. Web Programımızda, b&#246;yle bir veritabanı kullanacağız. İlişkilendirilmiş Veritabanı, bir dosya i&#231;inde tabloların en az bir s&#252;tunundaki kaydın diğer tablolardaki en az bir s&#252;tunla aynı olduğu ve bu iki s&#252;tun birbirine bağlanmış veritabanı demektir. (Bu &#246;rnekte kullanacağımız veritabanının Microsoft Access ile oluşturulmuş &#246;rneğini, bu kitap&#231;ığın kod &#246;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 &#246;zelliklerini buradaki &#246;rneklere uygun olarak oluşturmalısınız.)
Bu tabloda, m&#252;şterinin kurmak istediği site t&#252;r&#252;n&#252; belirten bir endeks s&#252;tunu var: TurNO. (Daha sonra bu veritabanını y&#252;kleyeceğimiz Web Server’ın işletim sistemini bilmediğimiz i&#231;in, T&#252;rk&#231;e alfabeyi desteklemeyen bir Server’ın “Tablo veya Alan Bulunamadı” hatası vermesini &#246;nlemek i&#231;in alan adlarında T&#252;rk&#231;e karakter kullanmamaya &#246;zen g&#246;stermemiz gerekir.) Bu kayıt, Site T&#252;rleri tablosunda da var:
Veritabanını oluştururken bu iki tabloyu T&#252;rNO s&#252;tunlarından ilişkilendirir ve ilerde veritabanına, “Bana, M&#252;şteriler ve Site T&#252;rleri tablolarından T&#252;rNo s&#252;tunundaki veri aynı olan b&#252;t&#252;n kayıtları bul” şeklinde bir sorgulama emri (SQL JOIN komutu) verecek olursanız, Windows’un ODBC programı, veritabanını inceleyecek ve ortaya &#231;ıkartacağı verilerden biri ş&#246;yle olacaktır:
ADI SOYADI EMAIL SİTENO GRAFNO TURNO TURADI TURRAYİ&#199;
Abdullah Can
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
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&#238; &#246;ğrenme) k&#252;lfetine girdik? Bunun &#231;eşitli sebepleri var: Bir kere veritabanı uzmanları, birden fazla tabloda aynen tekrar eden değerleri, ayrı bir tabloda toplamayı bilgisayarın bellek y&#246;netimi a&#231;ısından daha etkin bir &#231;alışma tarzı sayarlar. İkincisi, fiyat belirlerken Intranet t&#252;r&#252; Web siteleri i&#231;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 ş&#252;phesiz olduğuna g&#246;re!) ve elimizde i&#231;inde 1500 kayıt bulunan bir tablo varsa, herbirinde t&#252;rRayi&#231; s&#252;tundaki veriyi tek-tek g&#252;ncelleştirmek &#231;ok zor olabilir. Oysa bu t&#252;r ilişkilendirilmiş bir veritabanında bir tabloda bir kaydı değiştirmekle, bir diğer tablodaki binlerce, hatta milyonlarca kaydı g&#252;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&#252;t&#252;n bilgiler o tablonun dışına &#231;ıkmalıdır. (Bu kriter size bir &#246;l&#231;&#252;de şifreli g&#246;r&#252;n&#252;yorsa, veritabanı oluşturma ve y&#246;netme konusunda bir kitap edinmeniz yerinde olur!)
Veritabanı konularına aşina olmayanlar i&#231;in bir iki noktaya daha a&#231;ıklık getirmek gerekir. Tablolarımızın alan adlarını ve alanlardaki verilerin t&#252;rlerini g&#246;steren tabloya bakarsanız, b&#252;t&#252;n tablolarda bir s&#252;tunun “Birincil endeks” diye işaretlendiğini g&#246;receksiniz. Bu alan, biri dışında b&#252;t&#252;n tablolarda otomatik sıra numarası şeklinde; M&#252;şteri tablosunda ise m&#252;şterinin elektronik posta adresi şeklinde tayin edilmiş bulunuyor. Bu alanın varlık sebebi, kayıtlarımızda diğer b&#252;t&#252;n alanlardaki verileri aynı bile olsa her bir m&#252;şterinin ayrı bir varlık olarak korunmasını sağlar. (Tabi&#238;, burada, iki m&#252;şterinin aynı elektronik posta adresine sahip olmayacağını varsayıyoruz!)
İnşaata Başlarken
Biraz daha teknik olarak ifade edersek, inşa ettiğimiz programın (Web sitesinin) fonksiyonu, m&#252;şteriden bazı temel bilgileri alıp, bu bilgileri m&#252;şteri tablosuna işlemek, m&#252;şteriye bizim randevu defterimize (veri tabanındaki Randevu tablosuna) bakarak, boş bir zaman &#246;nermek, m&#252;şterinin kabul ettiği zaman dilimini Randevu tablosuna işlemek, ve bu zaman dilimini başkasına vermemek &#252;zere kapatmak olacak. Biz, Web sitesi tasarımcısı olarak, s&#252;rekli, veritabanı dosyasını a&#231;arak, yeni randevu alan olup olmadığını kontrol etmek zorundayız. Yine arada bir, Randevu tablosuna yeni m&#252;şteri kabul edebileceğimiz boş zamanlarımızı eklememiz gerekir. Bu işlemi, &#246;rneğin Access programını kullanarak yapabiliriz. Şimdilik, ya bu tablolara ve ilişkilere sahip bir veritabanı oluşturun; ya da &#246;rnek veritabanı dosyasını Kişisel Web Server’ın dizini i&#231;ine kopyalayın.
ODBC’e Veritabanımızı Bildirelim
Windows’un Denetim Masası’nı a&#231;tığınızda, ya ODBC Data Sources, ya da ODBC(32 Bit) adlı bir simge g&#246;receksiniz.
İkinci sekme olan System DSN’i a&#231;ın ve Add (Ekle) d&#252;ğmesini tıklayın. A&#231;ılacak kutuda, veritabanı dosyanıza uygun s&#252;r&#252;c&#252;y&#252; se&#231;in. Bu kitap&#231;ığın &#246;rnek kodları arasında bulacağınız web.mdb adlı dosyayı kullanıyorsanız, Microsoft Access Driver adlı s&#252;r&#252;c&#252;y&#252; se&#231;in) ve Son d&#252;ğmesini tıklayın.
A&#231;ı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&#231; kelime yazabilirsiniz. Database b&#246;l&#252;m&#252;nde Select (Se&#231
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
d&#252;ğmesini tıklayarak veritabanı dosyanızı bulun.
Şimdi, bilgisayarınızın ODBC aray&#252;z&#252;, 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&#231;ip verecek veya bu dosyadaki tablolarda (yine ASP komutları ile talep edeceğiniz) g&#252;ncelleştirmeleri yapacaktır.
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&#246;re randevu verebileceğimiz, serbest olduğumuz g&#252;nleri bu veritabanındaki Randevu tablosuna işliyoruz. Ziyaret&#231;ilerimiz, ana sayfadan ge&#231;tikten sonra, bir Web sitesi yaptğrmek i&#231;in bizimle g&#246;r&#252;şmek istiyorlarsa, bazı bilgiler veriyorlar ve bu bilgilere g&#246;re, Web programımız, m&#252;şteriye tanımladığı siteyi ka&#231;a yapacağımızı bildiriyor ve boş olduğumuz zamanların bir listesini sunuyor. M&#252;şteri adayı, bu listeden kendisi i&#231;in elverişli zamanı se&#231;iyor. Web programımız m&#252;şterinin verdiği bilgileri veritabanına işliyor; ve m&#252;şterinin se&#231;tiği zamanı randevu tablosunda kapalı hale getiriyor, ki aynı zaman aralığı başka bir m&#252;şteriye daha &#246;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&#231;memek i&#231;in &#246;nerim, bu kitap&#231;ığın kodlarını edindiyseniz, veritabanını sisteminize tanıtarak, ilgili ASP programını index.htm’den başlayarak bir ka&#231; kere &#231;alıştırmanızdır.)
&#214;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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
arkOrange 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 &#231;ok alfabe &#231;orbası &#246;ğrenmek zorundasınız
<p>Ama bunları &#246;ğrenmeye zamanınız yok. Aslında &#246;ğrenirsiniz &#246;ğrenmeye, fakat zaman meselesi.
<p>Biz &#231;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>
Bu sayfamızda verdiğimiz mesajı beğenen m&#252;stakbel m&#252;şterilerimiz, sayfadaki k&#246;pr&#252;y&#252; 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&#252;r'atle oluşturabiliriz.<p>&#214;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&#246;nder" align="left"></p>
</td></tr></form></TBODY></table></center>
</BODY>
</HTML>
“Bu sayfada ASP tekniği kullanmayı gerektiren hemen hemen hi&#231; bir &#246;ge yok!” diyebilirsiniz; ama demeyin. İki haric&#238; dosyayı #include yoluyla sayfaya eklediğimizi g&#246;ruyor musunuz? Bu sayfanın b&#252;t&#252;n işlevi işte bu iki dosyada gizli!
siteler.inc ve grafikler.inc, veritabanından veri &#231;eken ve bunu getirip yukarıdaki yerlere yazmakla g&#246;revli olacaklar. &#214;nce siteler.inc’i yapalım:
<%
'Siteler tablosundan siteAdi s&#252;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&#231;in su isi yap. %>
<% Do while Not siteler.eof %>
<Option value = "<%= siteler(1) %>"><%= siteler(0) %></Option>
<%siteler.MoveNext
Loop%>
</select>
<% siteler.close %>

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:42   #13
Ç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)




Hatırlarsanız, #include yoluyla sayfaya eklenen dosyanın i&#231;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&#252;ş&#252;n&#252;n. Şimdi siteler.inc, tek bir iş yapıyor: web isimli DSN’in verdiği bilgiler arasından Siteler tablosundan siteAdi ve siteNo s&#252;tunlarındaki b&#252;t&#252;n bilgileri &#231;ekiyor ve bunu HTML’in SELECT etiketinin i&#231;ini doldurmakta kullanıyor. OPTION’ın nasıl yazıldığını hatırlıyorsunuz değil mi?
Şimdi siteler.inc’in i&#231;ine bakabiliriz. &#214;nce “SELECT siteAdi, siteNO FROM Siteler” ifadesini ele alalım. Bu, yukarıda s&#246;z&#252;n&#252; ettiğimiz SQL dili ile, Windows’un ODBC aray&#252;z&#252;ne vereceğimiz VBScript komutudur. Peki, bu edindiğimiz veriler nerede duruyor? ASP’nin &#231;alıştığı Web Server’ın bulunduğu işletim sisteminin RAM’inde (veya sanal belleğinde) oluşturulan ge&#231;ici bir tabloda duruyor. Veritabanındaki Siteler tablosunda birinci s&#252;tunda siteNo, ikinci s&#252;tunda ise siteAdi alanları var. Burada &#246;nce siteAdi’ni okutuyoruz; yani dizi değişkenin siteler(0) adlı birinci &#246;gesi site t&#252;r&#252; adını, siteler(1) adlı ikinci &#246;gesi ise bu t&#252;r&#252;n numarasını tutuyor. Nitekim, bir Do d&#246;ng&#252;s&#252; ile bu değerleri SELECT’in &#246;geleri olarak kullandığımızda &#246;nce OPTION’ın VALUE &#246;zelliğini siteNo, metnini ise siteAdi ile dolduruyoruz. Ve tabi&#238; a&#231;tığımız veri bağlantısını kapatıyoruz: “siteler.close”.
Şimdi sayfa1.asp’nin ikinci haric&#238; 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&#231;enek kutusu yap. %>
<Option value = "<%= graf(0) %>"><%= graf(1) %></Option>
<%graf.movenext
loop%>
<% graf.close %>
</select>
Bu dosya &#252;zerinde uzun uzadıya durmaya gerek yok; yine aynı DSN’den, fakat bu kez veritabanıın Grafik tablosundan iki alandaki verileri &#231;ekiyoruz; Do d&#246;ng&#252;s&#252; ile yeni bir SELECT’in i&#231;ini dolduruyoruz. include dosyaları ile birlikte bu sayfa şu g&#246;r&#252;nt&#252;y&#252; veriyor:
sayfa1.asp’deki formun G&#246;nder d&#252;ğmesi tıklandığında bu bilgilerin GET metoduyla sayfa2.asp’ye g&#246;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 &#220;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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
arkOrange 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&#252;r tablosundan bilgi se&#231;. %>
<!--#include file="turler.inc"--> &nbsp;
<input type="Submit" value="G&#246;nder" align="LEFT">
</form></td></tr></table></center>
</BODY>
</HTML>
sayfa1.asp, ziyaret&#231;imizin Form’da yaptığı iki se&#231;imin değerini sayfa2.asp’ye g&#246;nderdiğinde, sayfa2.asp bunları otomatik olarak kullanamaz; bilgiler GET yoluyla geldiği i&#231;in QueryString değişkeninin i&#231;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&#246;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 &#246;l&#231;&#252;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 &#246;nce yazdığımız sorgu deyimlerine bakın? T&#252;m&#252; &#231;ift tırnak i&#231;inde değil mi? Peki, burada siteNo değişkenini tırnak i&#231;ine alırsak ne olur? Değişken, değişken olmaktan &#231;ıkar; metin olur; oysa biz burada siteNo değişkeninin vereceği değeri kullanmak istiyoruz. Bu yolla veritabanından &#231;ekeceğimiz değeri hemen aşağıda metnin i&#231;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&#231;tiğimiz i&#231;in veri okutma işini d&#246;ng&#252;yle yapmıyoruz bu kez; okunan ilk değeri Response.Write metodunun kısaltmasıyla, sayfaya g&#246;nderiyoruz. Bu arada ziyaret&#231;imizden ek bilgi almaya devam ediyoruz; yeni bir haric&#238; dosya ile bu kez size tasarlatmak istedikleri sitenin t&#252;r&#252;n&#252; 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&#231;ini dolduruyoruz. Devam etmeden &#246;nce sayfa2.asp’de dikkatinizi &#231;ekmiş olması gereken şu iki satıra d&#246;nelim:
<input type="Hidden" name="siteNO" value="<%= siteNO %>">
<input type="Hidden" name="grafNO" value="<%= grafNO %>">
HTML’den hatırlayacaksınız, Form’un i&#231;inde Server’a “gizli” (HIDDEN) t&#252;r&#252; değişken ve değer g&#246;nderebiliriz. Buradaki “gizli” kelimesi sizi aldatmasın; Form bir HTML &#246;gesidir ve ziyaret&#231;i Browser’ının kaynağı g&#246;r&#252;nt&#252;leme aracı vasıtasıyla gizli-a&#231;ık herşeyi g&#246;rebilir. Buradaki gizlilik sadece bu değişkenlerin sayfada g&#246;r&#252;nt&#252;lenmemesinden ibarettir. Bu iki s&#246;z&#252;m-ona gizli değişkene, taa kodumuzun başında elde ettiğimiz siteNo değişkeni ile biraz &#246;nce veritabanından &#231;ektiğimiz grafNo değişkenlerini atıyoruz. (Merak etmeyin! Hepsini daha sonra kullanacağız.)
Ve bu kullanımı, Form’umumuzun ACTION &#246;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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
arkOrange text="white"><br><br><br><br><br><center>
<table width="250"><tr><td>
<font face="arial" size="6">&#199;ok g&#252;zel!<p>Grafik malzemesi <%= grafdurum %> olan <%= siteadi %> ve <%= turadi %> ama&#231;lı bir Web sitesi, i&#231;in &#252;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&#246;r&#252;şme i&#231;in iki saatlik randevu almanız gerekir.</font>
<p><font face="arial" size="3">(A&#231;ı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&#246;re, bu sayfa &#231;ok iş icra ediyor olsa gerek! Ger&#231;ekten de bu sayfa, daha &#246;nceki sayfalarda elde ettiğimiz b&#252;t&#252;n bilgileri kullanarak ziyaret&#231;i sitesini ka&#231; paraya yapacağımızı hesap edecektir. icra.asp, &#246;nce Querystring’den alacağı bilgileri, kendi işine yarayacak değişkenlere yerleştirecek ve bunlarla &#252;&#231; katsayı hesaplayacak ve bu katsayıları kullanarak m&#252;şterinin sitesi i&#231;in bir bedel &#231;ıkartacak (“bedel = 100 * turkatsayi * grafkatsayi * sitekatsayi”). Sonra “bedel” değişkeninin i&#231;indeki değeri m&#252;şteriye Dolar olarak bildirecek (Bedel form&#252;l&#252;nde 100 yerine mesela 600000 rakamını, veya bu işi yaptığınız andaki Dolar’ın TL cinsinden kurunu g&#246;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&#231;erek m&#252;şteriye randevu alması i&#231;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&#238; dosyamız, &#246;ncekilerden farklı: bir OPTION etiketini değil; fakat bir Anchor etiketinin i&#231;ini dolduruyor. Bu etikete dikkat edersek, HREF &#246;zelliğinin değeri olan rezerv.asp’ye aslında bir &#231;ok bilginin g&#246;nderilmesine de yaradımcı oluyor, Herhangi bir ziyaret&#231;inin se&#231;imleri sonucu oluşacak bir &#246;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>
Bu, rezervasyon yaptıracak olan sayfaya, siteNo, grafNo, randNo ve biraz &#246;nce hesapladığımız randRayic değişkenlerini g&#246;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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
arkOrange text="white"><br><br><br><br><br><center>
<table width="250"><tr><td>
<font face="arial" size="6">L&#252;tfen elverişli randevu zamanı olan<font color="blue"><%= randzaman %></font> i&#231;in rezervasyon yapmak &#252;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&#246;nder">
</form>
</td></tr></table>
<p><p></center>
</BODY>
</HTML>
Ger&#231;i bu sayfanın sadece ziyaret&#231;iye se&#231;tiği randevu tarih ve saatini bildirdiğini ve ziyaret&#231;iden bize adını, soyadını ve elektronik mektup adresini vermesi istediğini g&#246;receksiniz, ama ger&#231;ekte bu sayfa şu ana kadar oluşturduğumuz veri k&#252;mesini veritabanına yazmak &#252;zere hazırlık yapmaktadır. Gizlenmiş (HIDDEN) değişkenlerin g&#246;revi bu.
Derlenen bu değişkenlerin t&#252;m&#252;, ziyaret&#231;inin gireceği bilgiler dahil, guncelle.asp’ye g&#246;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ı &#231;alıştırdıysanız, guncelle.asp’nin Browser’ın y&#252;z&#252;n&#252; bile g&#246;rmediğini farketmiş olmalısınız; Yukarıdaki kodun, ziyaret&#231;iye kendi yerine başka bir sayfayı g&#246;nderdiğini nereden anlıyoruz? En sondaki “Response.Redirect” komutundan. Bu komut ziyaret&#231;iye, son.asp sayfasını yolluyor. Fakat bu sayfaya ge&#231;meden &#246;nce yaptığımız g&#252;ncelleme işleminin &#252;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 &#246;nce SQL dilinin SELECT deyimini &#246;ğrenmiştik. INSERT de bir veritabanına veri ekleme işini yapan SQL deyimidir. Deyimin INTO b&#246;l&#252;m&#252;ne tablonun adını ve hangi alanların bulunduğunu; VALUES b&#246;l&#252;m&#252;ne ise bu alanlara atayacağımız değerleri yazarız. Bizim programımızda değerler, değişkenlerden alınacağı i&#231;in dikkatli bir yazma işlemi gerekiyor. Bu y&#252;zden değişken adları ile & (ve) işareti ve virg&#252;l&#252; birbirinden kolayca ayırt etmek i&#231;in uzunda bir yazma y&#246;ntemi kullanıyoruz. Hazırladığımız bu deyimle yeni m&#252;şteriyi m&#252;şteriler tablosuna ekliyoruz. Programımızda bir de SQL UPDATE deyimi var. Bu deyimle, mevcut Randevu tablomuzda m&#252;şterinin se&#231;tiği zaman aralığına ait girdiyi, SERBEST’ten DOLU’ya &#231;eviriyoruz ve bu zamanı kime ayırdığımızı, bu g&#246;r&#252;şmenin saat &#252;creti olan rayici tabloya işliyoruz. Bu ama&#231;la oluşturduğumuz SQL UPDATE deyimi ş&#246;yle g&#246;sterilebilir:
UPDATE Randevu SET email = "email", randNezaman = "simdi", randDurum = "DOLU", randRayic = "randRayic" WHERE randNO = "randNO"
SQL’in UPDATE deyiminin de b&#246;l&#252;mleri vardır. SET b&#246;l&#252;m&#252;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&#246;sterilen kelimeler değişken adı ise tırnak dışında yazılmalıdır. Bunu sağlamak ve aralarına gereken virg&#252;lleri koyabilmek i&#231;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
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
arkOrange 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. &#199;ok teşekk&#252;rler. G&#246;r&#252;şmek &#252;zere.&lt
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
font></td></tr>
</table>
</BODY>
</html>
Bu sayfa, ziyaret&#231;imize bir &#246;nceki sayfada kaydettiğimiz adi değişkenin değeri alarak, yani m&#252;şteriye adıyla hitabediyor ve randevusunun kesinleştiğini bildiriyor; ve veri-y&#246;nlendirmeli Web uygulamamızın da sonu oluyor.
İşte hepsi bu. Ziyaret&#231;imizden veri aldık; veritabanından veri &#231;ektik; bunları sayfalarımızda kullandık ve veritabanına işledik. Fakat bu ASP programlarında, veritabanıyla ilgili unsurların dikkatten ka&#231;maması i&#231;in, g&#252;venlikle ilgili &#246;nlemler alınmadığına, ziyaret&#231;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&#252;venlikle ilgili b&#246;l&#252;mler olması gerekir. Bu ve diğer program-konulu unsurları son b&#246;l&#252;mde ele alacağız.

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:43   #14
Ç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’DE G&#220;VENLİK
Internet’te iyiniyetli olunmaz. Acı, ama ger&#231;ek. Internet’e i&#231;ine zararlı kod yerleştirilebilecek bir Form koyarsanız, emin olmalısınız ki, birisi bu zararlı kodu koyacaktır. Sadece k&#246;t&#252;niyetli kişilerin size s&#246;z gelimi elektronik posta adresi veya mesaj g&#246;r&#252;n&#252;m&#252;nde zararlı kod g&#246;ndermesini &#246;nlemek i&#231;in değil, fakat normal kullanıcıların yapabilecekleri sıradan hataları yakalamak ve d&#252;zeltmek i&#231;in de &#246;nlem almanız gerekir.
Server g&#252;venliği son derece &#246;nemli bir konu olmakla birlikte, bunu sağlamak genellikle tasarımcının sorumluluğunda değildir. Bununla birlikte sayfalarımızın ve veritabanımızın g&#252;venliği ve Web uygulamalarımızın doğru işlemesi bizden sorulur.
Bir form ile sizin sayfalarınıza veya veritabanınıza ne gibi zararlar verilebilir? Bu zararların başında, en hafifinden sizin sayfanızı başka yere y&#246;nlendirmek gelebilir. K&#246;t&#252;niyetin &#246;l&#231;&#252;s&#252; arttık&#231;a bu, Server programının a&#231;ıklarından yararlanarak, Server’daki dosyaları değiştirmeye veya tahrip etmeye kadar gidebilir. Normal ziyaret&#231;i hataları arasında ise s&#246;zgelimi elektronik posta adresini iki @ işaretiyle yazmaktan tutun, bu işareti koymamaya, metktubun gideceği bilgisayarın adresini eksik yazmaya kadar uzanan bir dizi yanlışlık bulunabilir. Ziyaret&#231;iler formu eksik doldurabilirler. Bu gibi eksiklikler ve yanlışlıkları daha sonra d&#252;zeltmek zaman kaybına yol a&#231;ar. Kimi zaman eksik doldurulmuş bir Form, bu bilgilerin ulaştırılacağı ASP programında hataya yol a&#231;abilir. Bu sebeple, &#246;zellikle Form yoluyla alınan bilgilerin denetimi ve doğrulatılması şarttır.
Bir Form’un i&#231;erdiği bilgilerin denetimi ve doğrulanması iki yerde yapılabilir: istemci-tarafında, sunucu-tarafında. İstemci tarafında, yani ziyaret&#231;iye g&#246;ndereceğimiz HTML sayfasının i&#231;inde yer alan kodlarla yapacağımız denetim-doğrulama, hızlı &#231;alışır; ve ziyaret&#231;i ile sunucu arasında iletişim kurulmadan &#246;nce yapılır; b&#246;ylece ziyaret&#231;inin s&#246;zgelimi g&#246;nder d&#252;ğmesini tıkladıktan sonra &#231;ok beklemesi gerekmez. Ne var ki bu y&#246;ntemde denetim-doğrulama kodu ziyaret&#231;iye g&#246;nderilmiştir; k&#246;t&#252; niyetli kişi neyi denetlediğinizi g&#246;recek ve isterse bu denetimi kaldıracak size zararlı kod par&#231;acıkları g&#246;nderebilecektir. Denetimin sunucu tarafında yapılması, belki biraz daha fazla zaman harcamayı gerektirir, fakat g&#252;venlik a&#231;ısından daha etkili olabilir.
Bu b&#246;l&#252;mde ASP programlarınızın g&#252;venliği ve etkinliği a&#231;ısından almanız gereken bir &#231;ok &#246;nlemden ikisini, elektronik posta adresi doğırulama ile mesajların i&#231;inden zararlı kodları ayıklama y&#246;ntemlerini g&#246;relim.
Elektronik Adres Doğrulama
Ziyaret&#231;imizin doğru adres verdiğini, bu adresin ge&#231;erli bir elektronik posta alıcısına ait olduğunu doğrulamamız m&#252;mk&#252;n değil, ama en azından adresin doğru yazılıp yazılmadığını denetleyebiliriz. Bunu yapmanın bir yolu elektronik adresin i&#231;inde @ karakteri ile en az bir adet nokta bulunduğunu garantilemek olabilir.
Bunu denetleyecek kodu i&#231;eren aşağıdaki &#246;rnek kodu email.asp adıyla kaydedin:
<% @Language = VBscript %>
<HTML>
<HEAD>
<TITLE>E-Mail Form’u</TITLE>
<META http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<META http-equiv="Content-Type" content="text/html; charset=windows-1254"><%
If Not IsEmpty(Request.Form("Email")) Then
strEmail = Request.Form("Email")
If dogruMu(strEmail) Then
Response.Write strEmail & " adresini aldık; teşekk&#252;r ederiz.<BR>"
' .....[BURAYA DIĞER KODLAR GİRECEK]........................
Else *
*Response.Write strEmail & " adresi doğru g&#246;r&#252;nm&#252;yor.<BR>"
End If
End If
%>
<FORM "Name="Email" Action="email.asp" Method="post">
Enter an email address:
<INPUT Name="Email" Type=Text>
<BR>
<!- - Buraya formun diğer unsurları girecek - - >
<INPUT Type=Submit Value="G&#246;nder">
</FORM>
<SCRIPT RUNAT=SERVER LANGUAGE=VBScript>
Function dogruMu (byval adres)
AtIsareti=0 * * * 'saya&#231; olarak kullanacağımız
Nokta=0 * * * 'değişkenleri sıfırlayalım
dogruMu=false * * 'Fonksiyonun değerini yanlış olarak belirleyelim
KacKarakter=len(adres) * 'adresin boyutunu bir değişkene atayalım
For i=1 to KacKarakter 'd&#246;ng&#252;y&#252; başlatalım
*karakter=mid(adres, i, 1) 'sayacın g&#246;sterdiği karakteri alalım
*if karakter="@" then * '@ işareti olup olmadığına bakalım
* AtIsareti=AtIsareti + 1 '@ işareti ise sayacı bir arttıralım
*End If
*if karakter="." Then * * 'nokta işaretini arayalım
* Nokta=Nokta + 1 * 'nokta ise nokta sayasını bir arttıralım
*End if
Next * * * * * * 'bir sonraki karaktere ge&#231;elim
If AtIsareti=1 and Nokta >0 Then 'Bir @ ve en az bir nokta olduysa
dogruMu=true 'Fonksiyonun değerini doğru yapalım
End If
End Function
</SCRIPT>
</HTML>
Bu programı, bu şekliyle sınama amacıyla &#231;alıştırabilirsiniz. Fakat daha sonra programlarınızda kullanmanız gerekirse, bazı değişiklikler yapmanız gerekir. Bu değişiklikleri kodu inceledikten sonra ele alalım.
Sayfamızda tek elemanlı bir Form var ve sınama amacıyla buraya elektronik posta adresimizi yazabiliriz. Sayfa a&#231;ıldığında &#231;alışan VBScript’in kendi-i&#231;inde varolan isEmpty fonksiyonunu bir If d&#246;ng&#252;s&#252; i&#231;inde &#231;ağırarak, kendi i&#231;indeki formdan kendisine bir değer gelip gelmediğine bakacak; değer olmadığını g&#246;r&#252;nce formu sunacaktır. Forma herhangi bir şey yazıp, G&#246;nder d&#252;ğmesini tıkladığımız zaman ASP kodumuz, bu kez dogruMu adlı fonksiyona formdan gelen Email değişkeninin değerini vererek sonucu bekleyecektir.
dogruMu fonksiyonu g&#252;venlik kaygısıyla Server’da &#231;alışan sunucu-tarafı Script’tir; metni ve sonu&#231;ları kesinlikle kullanıcıya g&#246;nderilmeyecektir. Bu fonksiyon, kendisine aktarılan değişken değerinde, i&#231;i&#231;e iki If d&#246;ng&#252;s&#252; ile @ ve nokta işaretlerini arayarak sayacaktır. Bu sayımın sonucu iki değişkenin değerleri arzu ettiğimiz sayıda (AtIsareti bire eşit ve Nokta sıfırdan b&#252;y&#252;k) ise kendisini &#231;ağıran satıra True (doğru), değilse False (yanlış) değerini g&#246;nderecektir. Biliyoruz ki, bir fonksiyon doğru sonu&#231; verirse, If d&#246;ng&#252;s&#252; birinci komuttan, yanlış sonu&#231; verirse Else b&#246;l&#252;m&#252;nden yoluna devam eder. Bu &#246;rnekte, dogruMu fonksiyonu doğru sonu&#231; verirse Response.Write metoduyla Browser penceresine elektronik posta adresinin alındığına ilişkin teşekk&#252;r mesajı yazdırılacak; yanlış sonu&#231; verirse, adresin yanlış olduğu bildirilecektir.
Ger&#231;ek Internet uygulamasında bu t&#252;r bir sınama yapacağınız zaman, yukardaki programın fonksiyonu i&#231;eren SERVER SCRIPT (“<SCRIPT RUNAT=SERVER....>” diye başlayan ve “</SCRIPT>” diye biten) b&#246;l&#252;m&#252;n&#252; aynen sayfanızın herhangi bir yerine koyabilirsiniz. Daha sonra ziyaret&#231;iden gelecek elektronik posta adresine g&#246;ndermede bulunduğunuz ilk yerde ve bu adresi tutan değişken ile herhangi bir işlem yapmadan, &#246;rneğin veri tabanına yazmadan veya programın i&#231;inde bir başka şekilde kullanmadan &#246;nce, sadece şuna benzer bir kod b&#246;l&#252;m&#252; yazmanız yeter:
strEmail = Request.Form("Email")
If dogruMu(strEmail) Then
.....[BURAYA KODLAR GİRECEK]........................
Else *
*Response.Write strEmail & " adresi doğru g&#246;r&#252;nm&#252;yor.<BR>"
End If
Programınızın gereği olarak d&#246;ng&#252;n&#252;n ELSE b&#246;l&#252;m&#252;n&#252; değiştirebilirsiniz

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:43   #15
Ç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)




ZARARLI KOD TEMİZLEME
ASP-uyumlu Server dendiği zaman akla ilk gelen Microsoft Internet Information Server, site g&#252;venliği a&#231;ısından s&#252;rekli sınanan ve a&#231;ığı bulunduğu taktirde MS’un yama programları ile bu a&#231;ığı giderilen bir sunucu programı olarak bilinir. Bu, IIS’in ve diğer MS &#252;r&#252;n&#252; Web sunucu programlarının (MS Site Server ve MS Transaction Server &#252;r&#252;nlerinin) “kurşun ge&#231;irmez” olduğu anlamına gelmez. Fakat sunucu program &#252;reticisi ne kadar &#246;nlem alırsa alsın, sizin sitenize, kulllanıcıların yollayacağı zararlı kodları &#246;nlemeye &#231;alışmayacaktır. Bu bir zorunluktur. Sizin i&#231;in zararlı kod sayılan metin, bir başka Internet sitesi i&#231;in normal kullanıcı girdisi olabilir. Server programını geliştirenler sizin ne t&#252;r girdiyi zararlı sayacağını bilemezler. Bunu siz bilmek zorundasınız.
Son yılların deneyimleri g&#246;steriyor ki, başka yollarla Internet sitenizin k&#246;k dizinine ulaşmaya &#231;alışan Hacker tiplerin dışında kalan zararlı kullanıcılar (Hacker &#246;zentisi kişiler!), genellikle bir veritabanına gittiğini anladıkları Form bilgilerinin i&#231;ine Server Side Include (sunucu tarafında &#231;alışacak haric&#238; dosya) i&#231;eriği g&#246;revini yapacak kod par&#231;acıkları katabilirler. Bu ama&#231;la kullanılabilecek zararlı bir kod ş&#246;yle olabilir:
<script language="JavaScript"><!--
function reload() {
self.focus();
document.location.href = "[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
}
setTimeout("reload();", 5000);
// --></script>
Bu kodun b&#252;t&#252;n zararı, i&#231;erdiği veritabanını ASP sayfasının herhangi bir etiketi i&#231;inde kullanıldığı taktirde ziyaret&#231;iyi burada yazılı URL’e g&#246;t&#252;rmesi ve buradaki sayfayı Browser’ınızda g&#246;r&#252;nt&#252;lemek olacaktır. Acemi Hacker’ın ziyaret&#231;inizi zorla g&#246;t&#252;rd&#252;ğ&#252; yeni Internet sitesi, sadece i&#231;erik bakımından sakıncalı olmayabilir; ziyaret&#231;iniz a&#231;ısından ger&#231;ekten tehlikeli bir alan olabilir; g&#246;ndereceği &#231;erezlerle (cookie) ziyaret&#231;inin bilgisayarında zararlı işler yapabilir. Ziyaret&#231;i bu tuzağa sizin sitenizde bulunduğu sırada d&#252;şt&#252;ğ&#252; i&#231;in, sorumluluk, en azından manevi olarak, size ait demektir.
Zararlı kodlar genellikle bu &#246;rnekte olduğu gibi b&#252;y&#252;kt&#252;r-k&#252;&#231;&#252;kt&#252;r işaretleri, d&#252;z ve ters b&#246;l&#252; ile kesme işareti i&#231;erir. &#214;rneğin bir konuk defterinde ziyaret&#231;imizden ne gibi bilgi istersek isteyelim, yazacağı metinde “<” ve “>” işaretlerinin bulunmaması gerekir. Normal bir mesajda, ancak kod yazarken kullanılan bu işaretlerin yeri olamaz. Hatta daha hassas bir d&#252;ş&#252;nceyle, normal ve kısa bir konuk defteri mesajında tek ve &#231;ift tırnak, noktalı virg&#252;l satır başı (CR) ve yeni satır (LF) işaretleri de bulunmamalıdır. Eğer normal bir ziyaret&#231;i bu gibi işaretlerle dolu bir mesaj yazmışsa, k&#246;t&#252; niyetli kişilere karşı alacağımız &#246;nlemlerle bu iyiniyetli mesaj da yazarının verdiği bi&#231;imi kaybedecektir. Bir ka&#231; ziyaret&#231;imizin konuk defterine fiyakalı yazılar yazmasını sağlamak i&#231;in, g&#252;venlikten vaz ge&#231;memek gerektiğine g&#246;re, “Kurunun yanı sıra yaş da yanar!” demekten başka bir &#231;are d&#252;ş&#252;nmek kolay değil!)
Daha &#246;nceki b&#246;l&#252;mlerde yazdığımız kodları hatırlıyorsanız (veya kimse bakmazken o sayfaları &#231;evirir bakarsanız!), ziyaret&#231;ilerimizin Form yoluyla g&#246;nderdikleri verileri iki yolla alır ve bir değişkene yazarız: QueryString ve Request.Form. İşte size bir Internet’te ger&#231;ekten kullanılan bir konuk defterinin konuk girdilerini veritabanına işleyen b&#246;l&#252;m&#252;:
<%
Ad = Request.Form("Isim")
Mektup = Request.Form("MailAdr")
Gorus = Request.Form("Mesaj")
Defter = "INSERT INTO mesaj (Isim, Email, Mesaj) VALUES ( "&" '" & Ad &"' , "&" '" & Mektup &"' , "&" '" & Gorus &"')"
Set Veriyolu = Server.CreateObject("ADODB.Connection")
Veriyolu.Open("DSN=misdefter;")
Set RS = Veriyolu.Execute(Defter)
%>
Tasarımcı, Form’dan gelen &#252;&#231; değişkenin (Isim, MailAdr ve Mesaj) değerini, yeni &#252;&#231; değişkene atamakta ve bunları oluşturduğu SQL INSERT deyimi yoluyla “misdefter” adlı veriye yazdırmaktadır. Tasarımcının d&#252;nyayı sadece iyi insanlardan oluşan bir cennet sandığı, kendisini tanımasanız bile, bu koddan anlaşılıyor. D&#252;nyayı cennet yapmak elimizde olmakla birlikte, hen&#252;z b&#252;t&#252;n insanlar bu konuda g&#246;r&#252;şbirliği i&#231;inde olmadığına g&#246;re, ziyaret&#231;iden gelen Form değişkenlerini atadığımız yeni değişkenlerin değerlerini elden ge&#231;irmeli ve i&#231;indeki zararlı kodları ayıklamalıyız, ki sonra misafir defteriniz kevgire d&#246;nmesin!
Bu işlemi, s&#246;zgelimi yukarıdaki kodun sadece birinci değişkeni (Ad) i&#231;in yapalım. Buradaki Ad = Request.Form("Isim") satırını atacağız ve yerine şu 14 satırı koyacağız:
Ad = Trim(Request.Form("Isim"))'&#246;n&#252;ndeki sonundaki boşluklari atalım
If Len(ad) Then
'**************** BURADA ISTENMEYEN KARAKTERLERI AYIKLIYORUZ ******************
Ad = Replace(Ad, Chr(10) , "") 'satır başı
Ad = Replace(Ad, Chr(34) , "") '&#231;ift tıarnak
Ad = Replace(Ad, "'" , "") * 'tek tırnak
Ad = Replace(Ad, Chr(13) , " ") 'yeni satır
Ad = Replace(Ad, "<" , " ") * 'k&#252;&#231;&#252;kt&#252;r
Ad = Replace(Ad, ">" , " ") * 'b&#252;y&#252;kt&#252;r
Do While Instr(Ad, " ") * *'iki aralık
*ad = Replace(Ad, " " , " ")
Loop
Ad = Trim(Ad) *'&#246;n&#252;ndeki sonundaki boşlukları da attık mı tamam
End If
Bu kod, Ad değişkenini, VBScript’in kullanılmaya hazır Replace() fonksiyonundan ge&#231;irerek, i&#231;indeki istenmeyen karakterleri ya yok edecek ya da aralıkla değiştirecektir. B&#246;ylece eğer k&#246;t&#252;niyetli bir kişi, Form bilgisi olarak bize kod olarak kullanılacak bir takım metinler yollamışsa, kodun ana i&#231;eriği yerinde kalmakla birlikte, kod olarak kullanılmasını sağlayacak işaretler yok olacağı i&#231;in kod d&#252;z yazıya d&#246;nm&#252;ş olacaktır.
ADO G&#252;venliği ve Hata Mesajları
MS Internet Information Server (IIS) ve diğer Web Server programları, istemcinin siteye g&#246;nderebileceği talepleri hem kendi a&#231;ılarından, hem de işletim sistemi a&#231;ısından belirleme ve sınırlama imkanı sağlarlar. Windows NT işletim sistemi bakımından Internet ziyaret&#231;isi herhangi bir ağ kullanıcısından farksızdır ve ulaşabileceği sayfalar (dosyalar) ve bu dosyalarla yapabileceği işler, “Internet Kullanıcı Hesabı” denen kullanıcının haklarına bağlıdır. IIS’i kuran Web Y&#246;neticisi, bu hesaba istediği gibi haklar kazandırabilir veya sınırlamalar getirebilir. Burada iki noktayı birbirinden dikkatle ayırmak gerekir:
Web ziyaret&#231;isinin bir Web Sitesi’nde kullanabileceği haklar HTTP kaynakları ile sınırlıdır. İşletim sistemi ile ilgili haklar bunun dışındadır. Fakat ikisinin &#231;akıştığı nokta, &#246;zellikle veritabanına dayanan Web sitelerinde, veritabanı dosyasının g&#252;ncelleştirilmesi sırasında ortaya &#231;ıkar. HTTP’nin ziyaret&#231;iye sağlayabileceği b&#252;t&#252;n okuma-yazma hakları tanınsa bile, işletim sistemi bir veritabanı dosyasının yeniden yazılmasına izin vermeyebilir.
Bunu, &#246;nceki b&#246;l&#252;mlerde veritabanı dosyasını g&#252;ncelleştirme &#246;rneklerini yeniden &#231;alıştırarak sınayabilirsiniz. Kullandığınız veri tabanını s&#246;zgelimi Windows Gezgini’nde bulun ve sağ tıklayarak “Salt okunur” hale getirin ve ilgili ASP programını &#231;alıştırın; ODBC hata mesajı verecektir.
Bu noktada Web Tasarımcısı olarak akılda tutacağımız ilke şudur: HTTP izinleri ne olursa olsun, eğer işletim sisteminin izinleri daha kısıtlayıcısı ile, işletim sisteminin dediği olur.
Tasarımcı olarak bunun bize etkisi, genellikle Web sitemize evsahipliği yapan Server işletmecisinin veritabanı dosyalarımıza yazma-okuma izni vermesini sağlamaktır. Web sitesi evsahibi (Hosting) firması, veritabanı dosyasına DSN ayarı yaparken bu izni verecektir. Ancak DSN kaydı yaptırıldığı halde veritabanınız ziyaret&#231;ilerinize ODBC hata mesajı veriyorsa evsahibi firmanın y&#246;netimine, veritabanı dosyasının “haklarını” yeniden belirlemesini hatırlatmanız gerekebilir.
Veritabanı ile y&#246;nlendirilmiş Web sayfalarımızda en sık aldığımız hata mesajı:
[Microsoft] [ODBC Driver Manager] Data source name not found
olsa gerek. Bu mesaj, veritabanının ODBC’ye tanıtılması ile ilgili işlemde arıza olduğunu g&#246;sterir. Ya veritabanı dosyasının s&#252;r&#252;m&#252;, ODBC s&#252;r&#252;c&#252;lerinin kapsamı dışındadır, ya da ODBC s&#252;r&#252;c&#252;leri eksik kurulmuştur. Bunu, Windows’un Denetim Masası’nda ODBC Y&#246;nieticisi’ni &#231;alıştırarak ve s&#252;r&#252;c&#252;ler sekmesini se&#231;erek denetleyebilirsiniz.
Bir diğer sık alınan hata t&#252;r&#252; ise 80004005’dir. Bu hatanın bir ka&#231; t&#252;r&#252; olabilir:
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database engine cannot open the file ‘(unknown)’..
Bu hata mesajına bir ka&#231; farklı durum sebep olabilir:
1. Internet kullanıcısına veritabanının işletim sistemi d&#252;zeyinde yazma-okuma yetkisi verilmemiş olabilir.
2. Veritabanının bulunduğu dizinin işletim sistemi a&#231;ısından dosya oluşturma ve silme yetkileri yoktur.
3. Veritabanının bulunduğu dizin bir ağ sabit diskinde ise Internet kullanıcısının bu diske erişim hakkı yoktur.
4. DSN oluşturulurken veritabanı salt okunur veya Exclusive olarak işaretlenmiş olabilir.
5. O anda dosyaya Server tarafında InterDev gibi bir Web Tasarım Programı erişiyor olabilir.
6. S&#246;zkonusu Access dosyası, bulunduğu ağda yerel kullanıcıların hizmetine a&#231;ık olabilir.
Bu sorunların &#231;&#246;z&#252;m&#252; i&#231;in ODBC yapılandırma işleminin dikkatle yeniden tekrarı ve &#246;zellikle sabit disk izinlerinin g&#246;zden ge&#231;irilmesi gerekir. Bu hata mesajını evsahibi firmanın bilgisayarından alıyorsanız; Web Server y&#246;netimine yeniden başvurmanız şarttır.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] Couldn’t use the file ‘(unknown)’; the file already in use
Bu hata mesajının tek sebebi veritabanı dosyasının birden fazla kullanıcı tarafından kullanılmasını &#246;nleyen kilit deyimlerinin kullanılmış olmasıdır. &#199;&#246;z&#252;m&#252;, dosya ile ilgili .Recordset deyiminin kilidi &#246;nleyecek şekilde yazılmasından ibarettir.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] Data source name not found and no default driver specified
Veri tabanı ile veri-yolu bağlantısı kuracak Connection komutu, Global.asa dosyasından alınmak isteniyorsa ve IIS Global.asa dosyasını &#231;alıştıramıyorsa bu hata mesajıyla karşılaşırsınız. Global.asa dosyasında şu kodun bulunup bulunmadığını kontrol edin:
<%=”’auth_user’ ise & request.servervariables(“auth_user”)%>
<p>
<%=”’auth_type’ is & request.servervariables(“auth_type”)%>
<p>
<%=”connection string is & session(“baglanti_deyimi”%>
<p>
Burada “baglanti_deyimi ifadesi yerinde sizin Connection deyiminiz yer almalıdır. Global.asa’da bu ifadelerin bulunmasına rağmen yine de &#231;alışmıyorsa, Web Server programına, global.asa’nın i&#231;inde bulunduğu k&#246;k dizin i&#231;in &#231;alıştır (execute) izni verilmemiş olabilir. Bu kişisel Web Server’da veya yerel IIS’te oluyorsa, b&#252;t&#252;n yapacağınız şey k&#246;k dizin olan klas&#246;r&#252; sağ tıklayarak izinlerini değiştirmektir. Bu hata evsahibi firmanın sitesinde oluyorsa, Web Sitesi y&#246;netimi ile temasa ge&#231;meniz gerekir.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] Data source name not ??
Web Server’ın bulunduğu bilgisayarda MDAC (Microsoft Data Access Component) dosyaları ya bozulmuş ya da yanlış kurup kaldırma y&#252;z&#252;nden bazı bileşenleri arasında s&#252;r&#252;m farkı doğmuş demektir. MDAC’ın g&#252;ncellenmesi &#231;&#246;z&#252;m sağlayabilir.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access ODBC driver Driver] General error Unable to open registry key...
Registry Editor ile burada adı verilen kayıt anahtarı (Key) i&#231;in verilen izinlerikontrol etmelisiniz. Bunun i&#231;in Regedt32.exe programını kullanabilirsiniz.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC SQL Server Driver] [dbnmpntw] ConnectionOpen (CreateFile()).
Aynı bilgisayarda bile olsa SQL Server izinleri yeterli değilse, ODBC s&#252;r&#252;c&#252;leri veritabaına ulaşamazlar. Sorunu &#231;&#246;zmek i&#231;in SQL Server y&#246;netimiyle g&#246;r&#252;şmek ve izinleri değiştirmek gerekir.
Bu ve diğer 80004005 hata mesajları i&#231;in Microsoft’un sitesinde Q189408, Q174943, Q173742, ve Q175671 numaralı bilgi notlarına (Knowledgebase articles) başvurabilirsiniz.
ASP Hatası Arama
ASP teknolojisi, Internet’in kendisine g&#246;re nisbeten eski HTTP protokol&#252; ile işbirliği yapmak zorundadır ve bazen ASP sayfalarımızda oluşan hatalar, bizden (yazdığımız VBScript veya diğer Script kodlarından) değil, bu iki teknolojinin Server’daki uyumsuzluğundan kaynaklanıyor olabilir.
ASP teknolojisi &#252;&#231; adımda &#231;alışır:
1. Ziyaret&#231;i bir ASP sayfası talep eder
2. Server talep edilen belgenin bir ASP programı olduğunu belirler ve bunu ziyaret&#231;iye g&#246;ndermeden &#246;nce ASP.DLL aracılığıyla &#231;alıştırır.
3. Ortaya &#231;ıkacak olan HTML belgesi ziyaret&#231;iye g&#246;nderilir.
Bu bakımdan ASP hatasını ararken sorulacak birinci soru hatanın nerede olduğu olmalıdır. Hata istemci tarafında ise ASP sayfamız muhtemelen ziyaret&#231;inin Browser’ı ile uyumlu olmayan HTML kodu &#252;retiyor olabilir. Ayrıca hatanın hangi aşamada olduğunu yakalamamız gerekir.
Sık alacağımız bir ASP hatası, Server’ın vereceği “VBS Script Error:” şeklinde başlayan mesajlar olacaktır. Bu, ger&#231;ekten de sayfamızdaki VBScript kodlarında hata olduğunu g&#246;sterir. Yapılacak tek şey, iyi bir programcı gibi, biraz a&#231;ık havada gezdikten sonra kodu baştan sonra yeniden g&#246;zden ge&#231;irmek veya en iyisi başka bir programcının yardımını istemektir. Bir s&#252;re sonra insan kendi yazdığı kodlardaki hataları g&#246;remez hale gelir!
Nesne oluşturma hataları ise “Failed to create ...” diye başlar ve hemen hemen daima ASP sayfanızdaki Server.CreateObject.. diye başlayan deyimin icra edilemediğini g&#246;sterir. Bu sizin yanlış nesneye yanlış metod kullandırmaya kalkmanızdan olabileceği gibi, Web Server’ın size bazı bileşen dosyalarına (.dll ve .exe) erişim hakkı vermiyor olmasından kaynaklanabilir. &#220;cretsiz ASP desteği veren sitelerde &#231;oğu zaman bu t&#252;r komutlar i&#231;eren Script’lere izin verilmez.

 
Alıntı ile Cevapla

Alt 17 Mart 2007, 20:44   #16
Ç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 KAYNAKLARI

asp.superexpert.com/
aspwire.com/
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


arkadaslar bu iş sabır ve zaman isteyen bir iştir ve bıkmadan okuduğunuz i&#231;in tesekkurler
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


telNET 2007

 
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