Kendi blogunu oluştur ;)
WebmastersRSSYorum RSS
44 tane "asp" etiketli yazı bulundu (sayfa 1)"asp" tagli diger ogeler resimler , videolar

ASP.net ile Ziyaretçi Defteri 

Asp.NET 2.0 (Dil VB.Net)

Basit Ziyaretçi Defteri Uygulaması

Bir ziyaretci.mdb isminde veritabanımız ve tablo ismi de tablo1 olsun (Access kullanılacak). Tablomuzda sırasıyla “AdiSoyadi, eposta, mesaj ve tarih” alanları olmalı. Burada mesaj alanının özelliği “not” olarak ayarlanmalıdır. tarih alanın özleliği de Tarih/Saat olmalı..

VS.Net programını çalıştıralım ve New Web Site+ Asp.NET Web Site yolunu takip ederek (vb.net dili seçilecek) çalışma sayfasına geçelim. Önceden oluşturduğumuz ziyaretci.mdb veritabanı dosyasını açtığımız uygulamadaki App_Data klasörüne kopyalayalım.

Uygulama sayfamıza 3 adet Textbox, 4 adet Label ve bir adet Button nesnesi ekleyelim. Textbox3 nesnesinin TextMode özelliğini “Multiline” yapalım. Label4 ün Visible özelliğine False değerini verelim.Label4 ‘ün text özelliğine “Mesajınız İletilmiştir. Teşekkürler” yazalım.

1. 2. ve 3. textboxlara girilecek bilgiler sırasıyla veritabanının adisoyadi, eposta, mesaj alanlarına yazılacaktır..

Kodlara geçelim…

Imports System.Data.OleDb ‘Veritabanı bağlantısı yapacağımız için kullanılıyor.
Partial Class _Default
Inherits System.Web.UI.Page

Dim baglantim As OleDbConnection
Dim calis As OleDbCommand

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As_ System.EventArgs) Handles Button1.Click
baglantim = New_ OleDbConnection(”Provider=Microsoft.Jet.OleDb.4.0;Data_ Source=|DataDirectory|ziyaretci.mdb;”)
baglantim.Open()
calis = New OleDbCommand(”insert into_ tablo1(AdiSoyadi,eposta,mesaj,tarih) values(’” + TextBox1.Text + “‘,’” + TextBox2.Text + “‘,’” + TextBox3.Text + “‘,now())”, baglantim)
calis.ExecuteNonQuery()
baglantim.Close()
TextBox1.Text = “”
TextBox2.Text = “”
TextBox3.Text = “”
Label4.Visible = True
End Sub
End Class

“Data Source=|DataDirectory|ziyaretci.mdb;” Buradaki DataDirectory bizim başlangıçta veritabanını yapıştırdığımız klasörü temsil ediyor ( App_Data ).

Asp.NET İle Oracle Tablosundan Kayıt Almak 

Imports System
Imports System.Data
Imports System.Data.OleDb
’sayfanın page load olayına bu kodu yazıyoruz,siz isterseniz başka bir kontrole bağlarsınız.(buton vs)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim baglanti As New OleDbConnection(”Provider=MSDAORA.1;User ID=oraclekullanıcısı;password=sifresi;Data Source=databaseadı;Persist Security Info=False”)
baglanti.Open()
Dim oku As New OleDbCommand(”select * from customer_info_tab”, baglanti)
Dim okunan As OleDbDataReader
okunan = oku.ExecuteReader()
While okunan.Read()
Response.Write(okunan.Item(”customer_id”) & ” ” & okunan.Item(”name”) & “<p>”)
Response.Write(okunan.Item(”CREATION_DATE”))
End While
baglanti.Close()
END Sub

Access Veritabanının Online Compact İşlemi 

Compact and Repair



Accessle uzun süre calistigimizda veri ekleyip sildimizde veritanımızın boyu ve kendisi şişmeye başlayacaktır.
Genelde cok büyük sorunlar dogurmasada bu eger bir web sayfasında kullanıyorsak performans ve veribananı sıktınılarının giderilmesi için gerekebiliyor…

 

büyük bir ihtimalle tüm kayitlarinizi silsenizde veritabanınızın boyunun cokda degişmediginide gözleriz ve compact ederiz.
yazdıgım ufak scripti paylasmak istiyorum


Arayüzümüz… (Anasayfamiz)


 

DOSYA; Default.asp
——————————————————————-


<html>

 

<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
<title>Veritabanını Ufalt ve Tamir et</title>
<script language=”javascript” type=”text/javascript” src=”update.js”></script>

<script language=”javascript”>
function basla(CRdb,sIndex) {
executeRequest(’aop=compact,veritabani=’+CRdb+’,sIndex=’+sIndex);
}

function aop(sValue,sIndex) {
basla(sValue,sIndex)
}

function xtasarimcom(sIndex,sText) {
XTasarimComDCompact.DBFileName.options[sIndex].text = sText;
}
</script>

</head>

<body>
<font face=”Lucida Sans Unicode” size=”2″>
<!–#include file=”dblist.asp”–>
</font>
<p><font face=”Lucida Sans Unicode” size=”2″> Veritabanını Ufalt ve Tamir et</font></p>
<form method=”POST” name=”XTasarimComDCompact”>
<p><font face=”Lucida Sans Unicode” size=”2″><div id=”dblist”><% dbList %></div></font></p>
</form>

</body>

</html>

Update.Js



Bu dosya scriptimizin önemli parcalarından birtanesi
her nekadar AJAX kadar olmasada bu güncelleme yöntemini hemen hemen herşey için kullanabiliriz, sanırım tek kötü tarafi tam olarak asenktron calismiyor… olmasi

 

 

<!–

var SERVER_CONTROLLER = “dinamicCompactDB.asp”;

function executeRequest(params) {

var head = document.getElementsByTagName(’head’).item(0);
var old = document.getElementById(’lastLoadedCmds’);
if (old) head.removeChild(old);

script = document.createElement(’script’);

parameters = new String(params).split(’,');

var scriptUrl = SERVER_CONTROLLER + ‘?rnd=’ + Math.random();
for (var i = 0; i < parameters.length; i++) {
scriptUrl += “&” + parameters[i];
}

script.src = scriptUrl;
script.type = ‘text/javascript’;
script.defer = true;
script.id = ‘lastLoadedCmds’;
void(head.appendChild(script));
}

function update(id, html) {

var doc = eval(’document’);

if (doc.layers) {
var l = doc[id];
l.document.open();
l.document.write(html);
l.document.close();
} else if (doc.all && doc.all[id]) {
doc.all[id].innerHTML = html;
} else if (doc.createRange) {
var l = doc.getElementById(id);
var r = doc.createRange();
while (l.hasChildNodes()) {
l.removeChild(l.lastChild);
}
r.setStartAfter(l);
var docFrag = r.createContextualFragment(html);
l.appendChild(docFrag);
}

}

function updatemesajlar(id, html) {
update(’window’, id, html);

}

// –>

veritabanlarımızın bulundugu dizini listeleyelim…



DOSYA; DBList.asp
——————————————————————-

 


<!–#include file=”baglanti.asp”–>
<%
‘#################################################
strDatabase = Request.Form(”DBFileName”)
‘##################################################

 

Private Sub dbList()
Dim oFolders
Set oFolders = Server.CreateObject(”Scripting.FileSystemObject”)
Response.Write (”<Select Name=”"DBFileName”" size=”"15″” onclick=”"aop(this.value,XTasarimComDCompact.DBFileName.selectedIndex)”">”)
For Each Item In oFolders.GetFolder(strFolder).Files
If LCase(Right(Item, 4)) = “.mdb” Then
Response.Write (”<Option Value=”"” & Replace(Item, strFolder, “”)& “”" >” & Replace(Item, strFolder, “”) & ” [” & Replace(Item.size/1024, strFolder, “”)&”KB]”& “</Option>”)
End If
Next
Response.Write (”</Select>”)

Set oFolders = Nothing
End Sub
%>

JetEngine.CompactDatabase


 

DOSYA; dinamikCompactDB.asp

 

<!–#include file=”baglanti.asp”–>
<%

Jet_Conn_Partial = “Provider=Microsoft.Jet.OLEDB.4.0; Data source=”

strDatabase = Request(”veritabani”)

Private Sub dbCompact(strDBFileName)

SourceConn = Jet_Conn_Partial & strFolder & strDatabase
DestConn = Jet_Conn_Partial & strFolder & “Temp” & strDatabase

Set oFSO = Server.CreateObject(”Scripting.FileSystemObject”)
Set oJetEngine = Server.CreateObject(”JRO.JetEngine”)

With oFSO
If Not .FileExists(strFolder & strDatabase) Then
Response.Write(”alert(”" Eski veritabanı siliniyor… Lütfen tekrar deneyin “”);”)
Stop
Else
If .FileExists(strFolder & “Temp” & strDatabase) Then
Response.Write(”alert(”" Eski veritabanı siliniyor… Lütfen tekrar deneyin “”);”)
.DeleteFile (strFolder & “Temp” & strDatabase)
End If
End If
End With

With oJetEngine
.CompactDatabase SourceConn, DestConn
Response.Write(”xtasarimcom(”& Request(”sIndex”) &”,’”& Request(”veritabani”) &” Tamiredildi…’)”)

End With

oFSO.DeleteFile strFolder & strDatabase
oFSO.MoveFile strFolder & “Temp” _
& strDatabase, strFolder& strDatabase

Set oFSO = Nothing
Set oJetEngine = Nothing
End Sub

if (Request(”aop”)=”compact”) then
‘Response.Write(”alert(”"”& Request(”sIndex”) & Request(”veritabani”) &”"”)”)
dbCompact(Request(”veritabani”))
End if

%>

File System Objesi ile Windows Gezgini 

Bu yazımızda ASP ile File System objesini kullanarak basit bir windows gezgini yazacağız.
Bu işlem için Database yada benzeri bir harici dosya kullanmadan, bir tek dosya ile bu işlemi gerçekleştireceğiz.

Bu iş için öncelikle bir asp dosyası yaratalım ve de adını Filesystem.asp verdelim.daha sonra yarattığımız bu Filesystem.asp dosyasının içerisine aşağıdaki ASP kodunu ekleyelim.

——————- Filesystem.asp ————————

<HTML>
<HEAD>
<TITLE>Windows Gezgini…</TITLE>
</HEAD>
<BODY>
<div id=divdrives>
<font face=verdana size=2>Sisteminizdeki Sürücüler :<p>
<%
dim objfso
set objfso=server.CreateObject(”Scripting.FileSystemObject”)
for each x in objfso.Drives
set drivename=objfso.GetDrive(x)
Response.Write “<a href=filesystem.asp?drive=”&drivename.DriveLetter&”>”&drivename.DriveLetter&”</a> “
next
if Request(”drive”)<>”" then call FolderList(Request(”drive”))
if Request(”foldername”)<>”" then call FileList(cstr(Request(”foldername”)))
if Request(”filename”)<>”" then call FileDetails(cstr(Request(”filename”)))

‘Sürücüler.
Function FolderList(Drivename)
Response.Write ” &nbsp;<img src=ustfolder.gif id=ustfolder style=cursor:hand alt=”&chr(34)& _
“bir üst klasöre gitmek için tıklayınız.”&chr(34)&”>”
Response.Write “<br><br>”
set RootFolders=objfso.GetDrive(Drivename).RootFolder
set Folders=RootFolders.SubFolders
set SubFiles=RootFolders.Files
for each i in Folders
Response.Write “<img src=folder.gif> <a href=filesystem.asp?foldername=”&i.ShortPath& _
” style=text-decoration:none>”&i.name&”</a><br>”
next
for each x in SubFiles
Response.Write “<img src=file.gif> <a style=text-decoration:none href=”&chr(34)&”filesystem.asp?filename=”& _
x.path&chr(34)&”>”&x.name&”</a><br>”
next
End Function

‘Klasör içeriğini listeleme.
Function FileList(Foldername)
Response.Write ” &nbsp;<img src=ustfolder.gif id=ustfolder style=cursor:hand alt=”&chr(34)& _
“bir üst klasöre gitmek için tıklayınız.”&chr(34)&”>”
Response.Write “<br><br>”
set filesname=objfso.GetFolder(Foldername).Files
set Foldersname=objfso.GetFolder(Foldername).SubFolders
for each i in Foldersname
Response.Write “<img src=folder.gif> <a href=filesystem.asp?foldername=”&i.ShortPath& _
” style=text-decoration:none>”&i.name&”</a><br>”
next
for each x in filesname
Response.Write “<img src=file.gif> <a style=text-decoration:none href=”&chr(34)& _
“filesystem.asp?filename=”&x.path&chr(34)&”>”&x.name&”</a><br>”
next
End Function

Function FileDetails(Filename)
set filesdetail=objfso.GetFile(cstr(Filename))
Response.Write ” &nbsp;<img src=ustfolder.gif id=ustfolder style=cursor:hand alt=”& _
chr(34)&”bir üst klasöre gitmek için tıklayınız.”&chr(34)&”>”
Response.Write “<div id=divfiles class=divstyle>”
Response.Write “&nbsp;<b>Seçilen Dosyanın Ayrıntıları : </b><br><br>”
Response.Write “&nbsp;<b>Path:</b> ” & cstr(Filename) & “<br>”
Response.Write “&nbsp;<b>Dosya Adı :</b> ” & filesdetail.Name & “<br>”
Response.Write “&nbsp;<b>Dosya Büyüklüğü :</b> ” & filesdetail.Size & ” KB <br>”
Response.Write “&nbsp;<b>Dosya Tipi :</b> ” & filesdetail.Type & ” <br>”
Response.Write “&nbsp;<b>Son Düzenleme Tarihi :</b> ” & filesdetail.DateLastModified & “<br>”
Response.Write “&nbsp;<b>Son Erişim Tarihi :</b> ” & filesdetail.DateLastAccessed & “<br>”
Response.Write “<br><br>&nbsp;<b>!</b><a href=”&chr(34)&filename&chr(34)& _
” target=_new style=text-decoration:none>Bu Dosyayı açmak için buraya tıklayınız.</a>”
Response.Write “</div>”
End Function
%>

<script language=”VBScript”>
sub ustfolder_Onclick()
history.go(-1)
end sub
</script>
</div>
</BODY>
</HTML>

—————————————————————

Bu kod bizim bilgisayarımızda sürücüler ve klasörler arasında gezinmemizi ve istediğimiz herhangi bir dosya hakkında bize bilgi verilmesini sağlar.

Şimdi bu kodu bloklar halinde inceleyelim.

1. BLOK

<%
dim objfso
set objfso=server.CreateObject(”Scripting.FileSystemObject”)
for each x in objfso.Drives
set drivename=objfso.GetDrive(x)
Response.Write “<a href=filesystem.asp?drive=”&drivename.DriveLetter&”>”&drivename.DriveLetter&”</a> “
next
if Request(”drive”)<>”" then call FolderList(Request(”drive”))
if Request(”foldername”)<>”" then call FileList(cstr(Request(”foldername”)))
if Request(”filename”)<>”" then call FileDetails(cstr(Request(”filename”)))
%>

Bu blokta Filesytemobjesi yaratılıyor ve sistemde bulunan sürücüler (A:,C: v.s) listeleniyor.
Dikkat ederseniz 3. satırda For each döngüsü görüyoruz.Bu döngü belli koleksiyonların içerisindeki elemanları listeler.
Burada kullanmamızın sebebi Filesystem objesinin GetDrive koleksiyonun elemanlarını listemek içindir.
if ile başlayan satırlar kontrol amacıyla konulmuştur.

2. BLOK
<%
Function FolderList(Drivename)
Response.Write ” &nbsp;<img src=ustfolder.gif id=ustfolder style=cursor:hand alt=”&chr(34)& _
“bir üst klasöre gitmek için tıklayınız.”&chr(34)&”>”
Response.Write “<br><br>”
set RootFolders=objfso.GetDrive(Drivename).RootFolder
set Folders=RootFolders.SubFolders
set SubFiles=RootFolders.Files
for each i in Folders
Response.Write “<img src=folder.gif> <a href=filesystem.asp?foldername=”&i.ShortPath& _
” style=text-decoration:none>”&i.name&”</a><br>”
next
for each x in SubFiles
Response.Write “<img src=file.gif> <a style=text-decoration:none href=”&chr(34)&”filesystem.asp?filename=”& _
x.path&chr(34)&”>”&x.name&”</a><br>”
next
End Function
%>

Bir önceki kodda Sürücüleri listelemiştik fakat ordan seçilen sürücünün içerisindeki dosya ve klasörlerin nasıl listeleneceğinden bahsetmemiştik.
İşte burada o işlemi yani seçilen sürücünün içeriğinin listelenmesi işlemini bu fonksiyon sayesinde gerçekleştiriyoruz.
Ayrıca bu fonksiyon alt klasörlere gidildikçe onlara ait alt klasörleri de ekrana getirir.

3. BLOK
<%
Function FileList(Foldername)
Response.Write ” &nbsp;<img src=ustfolder.gif id=ustfolder style=cursor:hand alt=”&chr(34)& _
“bir üst klasöre gitmek için tıklayınız.”&chr(34)&”>”
Response.Write “<br><br>”
set filesname=objfso.GetFolder(Foldername).Files
set Foldersname=objfso.GetFolder(Foldername).SubFolders
for each i in Foldersname
Response.Write “<img src=folder.gif> <a href=filesystem.asp?foldername=”&i.ShortPath& _
” style=text-decoration:none>”&i.name&”</a><br>”
next
for each x in filesname
Response.Write “<img src=file.gif> <a style=text-decoration:none href=”&chr(34)& _
“filesystem.asp?filename=”&x.path&chr(34)&”>”&x.name&”</a><br>”
next
End Function
%>

Bu blok ise seçilen bir klasörün yada sürücünün altında bulunan dosyaları listemek amaçlı olarak kullanılır.
Sürücüler,klasörler ve alt klasörler altındaki tüm dosyalar bu fonksiyon sayesinde listelenir.

4. BLOK
<%
Function FileDetails(Filename)
set filesdetail=objfso.GetFile(cstr(Filename))
Response.Write ” &nbsp;<img src=ustfolder.gif id=ustfolder style=cursor:hand alt=”& _
chr(34)&”bir üst klasöre gitmek için tıklayınız.”&chr(34)&”>”
Response.Write “<div id=divfiles class=divstyle>”
Response.Write “&nbsp;<b>Seçilen Dosyanın Ayrıntıları : </b><br><br>”
Response.Write “&nbsp;<b>Path:</b> ” & cstr(Filename) & “<br>”
Response.Write “&nbsp;<b>Dosya Adı :</b> ” & filesdetail.Name & “<br>”
Response.Write “&nbsp;<b>Dosya Büyüklüğü :</b> ” & filesdetail.Size & ” KB <br>”
Response.Write “&nbsp;<b>Dosya Tipi :</b> ” & filesdetail.Type & ” <br>”
Response.Write “&nbsp;<b>Son Düzenleme Tarihi :</b> ” & filesdetail.DateLastModified & “<br>”
Response.Write “&nbsp;<b>Son Erişim Tarihi :</b> ” & filesdetail.DateLastAccessed & “<br>”
Response.Write “<br><br>&nbsp;<b>!</b><a href=”&chr(34)&filename&chr(34)& _
” target=_new style=text-decoration:none>Bu Dosyayı açmak için buraya tıklayınız.</a>”
Response.Write “</div>”
End Function
%>

Bu blokta bulunan fonksiyon ise ekrana seçilen dosya hakkında bilgiler getirir.
Bu bilgiler ;
· Dosyanın path’i
· Dosyanın adı
· Size olarak büyüklüğü
· Dosya Tipi (exe,txt v.s)
· Son düzenleme tarihi
· Son erişim tarihi
Ayrıca bu dosya Explorer tarafından açılabilecek bir dosya ise (txt,gif,jpg,excel,word,power point v.s) “ Bu Dosyayı açmak için buraya tıklayınız.” Linkine tıklayarak bu dosyayı açabiliriz.

<script language=”VBScript”>
sub ustfolder_Onclick()
history.go(-1)
end sub
</script>

Bu blok ise bir önceki klasöre gitmekte kullanılan alt programı içermektedir.

Jmail, aspmail, cdo, cdonts ve smtp mailserver componenetleri ile mail gönderme hakkında gelişmiş bir kod örneği. 

<%

‘########################
Sub SendMail(SendTo,From,ReplyTo,Subject,Body,Attachments)

MailComponent=”cdo”‘### Defines which email component to use. Valid values are: “jmail”, “aspmail”, “cdo” or “cdonts” (Note: cdonts only works with the local server, SMTPMailServer is ignored! CDO has problems on some servers.).
MailServer=”localhost”‘### SMTP Mailserver to be used to send account information to users.

SenderIp=Request.ServerVariables(”HTTP_X_FORWARDED_FOR”)’Sender ip

‘ ### Send mail with jmail
If LCase(MailComponent=”jmail”) Then
Set Msg = Server.CreateObject( “JMail.Message” )
Msg.ISOEncodeHeaders = false
Msg.AddRecipient SendTo
If ReplyTo<>”" Then Msg.ReplyTo = ReplyTo
Msg.From = From
Msg.Subject = Subject
Msg.Body = Body
If IsArray(Attachments) Then
For i = 0 To Ubound(Attachments)
Msg.AddAttachment Attachments(i)
Next
End If
Msg.AddHeader “Originating-IP”, SenderIp
Msg.send(MailServer)
Msg.close
Set Msg=Nothing

‘ ### Send mail with AspMail
ElseIf LCase(MailComponent=”aspmail”) Then
Set Mailer = Server.CreateObject(”SMTPsvg.Mailer”)
Mailer.FromAddress = From
Mailer.AddRecipient SendTo,SendTo
If ReplyTo<>”" Then Mailer.ReplyTo = ReplyTo
Mailer.Subject = Subject
Mailer.BodyText = Body
If IsArray(Attachments) Then
For i = 0 To Ubound(Attachments)
Mailer.AddAttachment Attachments(i)
Next
End If
Mailer.AddExtraHeader “Originating-IP: ” & SenderIp
Mailer.RemoteHost = MailServer
SentOK=Mailer.SendMail
Set Mailer=Nothing

‘ ### Send mail with Cdonts
ElseIf LCase(MailComponent=”cdonts”) Then
Set objNewMail = Server.CreateObject(”CDONTS.NewMail”)
objNewMail.From = From
If ReplyTo<>”" Then objNewMail.Value(”Reply-To”) = ReplyTo
objNewMail.Value(”Originating-IP”) = SenderIp
objNewMail.To = SendTo
objNewMail.Subject =Subject
objNewMail.Body = Body
objNewMail.BodyFormat=1
objNewMail.MailFormat=0
If IsArray(Attachments) Then
For i = 0 To Ubound(Attachments)
objNewMail.AttachFile Attachments(i)
Next
End If
objNewMail.Send
Set objNewMail = Nothing

‘ ### Send mail with Cdo
ElseIf LCase(MailComponent=”cdo”) Then
Set cdoConfig = Server.CreateObject(”CDO.Configuration”)
sch = “http://schemas.microsoft.com/cdo/configuration/”
cdoConfig.Fields.Item(sch & “sendusing”) = 2
cdoConfig.Fields.Item(sch & “smtpserver”) = MailServer
‘cdoConfig.Fields.Item(sch & “authenticate”) = 2 ‘Type of authentication, NONE, Basic (Base64 encoded), NTLM
‘cdoConfig.Fields.Item(sch & “sendusername”) = “username”
‘cdoConfig.Fields.Item(sch & “sendpassword”) = “parolam”
cdoConfig.Fields.Item(sch & “smtpserverport”) = 25
‘cdoConfig.Fields.Item(sch & “smtpusessl”) = False
cdoConfig.fields.update
Set objNewMail = Server.CreateObject(”CDO.Message”)
Set objNewMail.Configuration = cdoConfig
objNewMail.From= From
objNewMail.To= SendTo
objNewMail.ReplyTo= ReplyTo
‘objNewMail.Cc= SendTo
‘objNewMail.Bcc= SendTo
objNewMail.Subject=Subject
objNewMail.TextBody=Body
‘objNewMail.HtmBody = “<h1>Thtml</h1>”
‘objNewMail.HtmBody = “file://c|/temp/test.htm”
‘objNewMail.HtmBody = “http://www.smslust.net”

If IsArray(Attachments) Then
For i = 0 To Ubound(Attachments)
objNewMail.AddAttachment Attachments(i)
Next
End If
objNewMail.Send
Set objNewMail = Nothing
End If
End Sub

SendTo=”a@dd.com”
From=”noreply@prowww.net”
ReplyTo=”sss@dd.com”
Subject=”Selam”
Body=”Test”
SendMail SendTo,From,ReplyTo,Subject,Body,Attachments

%>

Online Kitapevi Sitesi Yazalım - 2 

FORM ALANLARININ DOLULUĞUNUN KONTROL EDİLMESİ
Bir form oluşturduğum zaman istediğimiz alanların doldurulup doldurulmadığını kontrol etmemiz gerekir. Bunun için form alanının değerini sıfır uzunluğundaki bir stringle karşılaştırırız. Şimdi ekle2.asp’ye bir formHata isimli bir altrutin ekleyeceğiz:

<%@ Language=VBScript %>
‘Hata olduğunda çalışacak altrutin
<%
SUB formHata(Hata)
%>

 

<html>
<head><title>Hata</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</head>

<body bgcolor=”#ECF5FF” text=”#000000″>

‘Bu kısım hatanın ne olduğunu ekrana yazdırır
<%=Hata%>
‘bizi ekle.asp’ye gönderecek buton
<form name=”hata” method=”post” action=”ekle.asp”>

<input type=”submit” name=”Submit” value=”Geri”>

</form>

</body>
</html>
<%
‘Response.End scripin çalışmasını durdurur, böylece sadece hata mesajının görüntülenmesi sağlanır.
Response.End
End SUB
%>

<%

KitapAdi=TRIM(Request(”KitapAdi”))
Yazari=TRIM(Request(”Yazari”))
YEvi=TRIM(Request(”YEvi”))
Fiyati=TRIM(Request(”Fiyati”))
Aciklama=TRIM(Request(”Aciklama”))

If YEvi=”" Then
YEvi=”???”
End If

If Aciklama=”" Then
Aciklama=”???”
End If

set Con=server.CreateObject(”ADODB.Connection”)
Con.open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(”/wwwliste/db.mdb”)

%>

<html>
<head>
<title>ekle2.asp</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</head>

<body bgcolor=”#ECF5FF” text=”#000000″>
<%
‘Gerekli alanların doluluğu kontrol edilir. Alanlar boş değilse kayıt işlenir
If (KitapAdi<>”" and Yazari<>”" and Fiyati<>”") Then

sqlString = “INSERT INTO liste ” &_
“( KitapAdi, YEvi, ” &_
“Fiyati ) VALUES ( ” &_
” ‘” & KitapAdi & “‘, ” &_
” ‘” & YEvi & “‘, ” &_
” ‘” & Fiyati & “‘)”
Con.Execute sqlString

sqlString2 = “INSERT INTO ayrinti ” &_
“( Yazari, Aciklama ) VALUES ( ” &_
” ‘” & Yazari & “‘, ” &_
” ‘” & Aciklama & “‘)”
Con.Execute sqlString2

%>

<table width=”100%” border=”0″ align=”center”>
<tr>
<td><font color=”#CC3300″><b><%=KitapAdi%></b></font> kaydedildi</td>
</tr>
</table>
‘Şart sağlanmıyorsa altrutine ilgili hata gönderilir
<%
Else
If KitapAdi=”" Then
formHata “Kitap adını girmediniz!”
End If

If Yazari=”" Then
formHata “Kitap yazarını girmediniz!”
End If

If Fiyati=”" Then
formHata “Kitap fiyatını girmediniz!”
End If

End If
%>

</body>
</html>


FORM ALANLARININ TEKRAR GÖRÜNTÜLENMESİ
Uzun bir form doldurduğunuzu düşünün, sonra da bir hata mesajı aldığınızı. Zorunlu alanlardan biri gözünüzden kaçmış. Geri dönüp bütün formu tekrar doldurmak oldukça sıkıcı olsa gerek. Bu problemi çözmek için ekle.asp ve ekle2.asp de değişiklik yapmamız gerekiyor.

Ekle2.asp’de, hata oluştuğunda çalışan formHata altrutinini değiştirmemiz gerekiyor. Bizi ekle.asp’ye geri döndüren formumuza form alanlarına girdiğimiz bilgilerinde geri döndürülmesi için aşağıdaki döngüyü ekleyelim:

<%=Hata%>

 

<form name=”hata” method=”post” action=”ekle.asp”>

<% For Each item In Request.Form %>
<input type=”hidden” name=”<%=item%>” value=”<%=Server.HTMLEncode(Request.Form(item))%>”>
<% Next %>

<input type=”submit” name=”Submit” value=”Geri”>
</form>

Bu script formdaki her bir öğe için gizli bir alan oluşturuyor. Geri butonu tıklandığında bütün form verileri gizli olarak ekle.asp’ye geri döndürülüyor.
Son olarak, ekle.asp’de de değişiklik yapmalıyız:

‘ekle2.asp’den alınan değerler değişkenlere atanıyor.
<%
KitapAdi=TRIM(Request.Form(”KitapAdi”))
Yazari=TRIM(Request.Form(”Yazari”))
YEvi=TRIM(Request.Form(”YEvi”))
Fiyati=TRIM(Request.Form(”Fiyati”))
Aciklama=TRIM(Request.Form(”Aciklama”))
%>

 

<html>
<head>
<title>Kayıt Ekle</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</head>

<body bgcolor=”#ECF5FF” text=”#000000″>
<form name=”kekle” method=”post” action=”ekle2.asp”>
<table width=”100%” border=”0″>
<tr>
<td colspan=”3″ bgcolor=”#FF6600″ height=”11″>
<div align=”center”>
<p><b><font color=”#FFFFFF”>Kayıt Ekleme Formu<br>
</font></b><font color=”#FFFFFF”><font size=”1″>(*) alanlar zorunlu</font></font></p>
</div>
</td>
</tr>
<tr>
<td width=”24%”>Kitap Adı*:</td>
<td colspan=”2″>
<input type=”text” name=”KitapAdi” size=”30″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%= KitapAdi%>”>
</td>
</tr>
<tr>
<td width=”24%”>Yazarı*:</td>
<td colspan=”2″>
<input type=”text” name=”Yazari” size=”25″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%= Yazari%>”>
</td>
</tr>
<tr>
<td width=”24%”>Yayın Evi:</td>
<td colspan=”2″>
<input type=”text” name=”YEvi” size=”20″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%= YEvi%>”>
</td>
</tr>
<tr>
<td width=”24%”>Fiyatı*:</td>
<td colspan=”2″>
<input name=”Fiyati” type=”text” size=”10″ maxlength=”25″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%= Fiyati%>”>
</td>
</tr>
<tr>
<td width=”24%”>Açıklama:</td>
<td colspan=”2″>
<textarea name=”Aciklama” wrap=”VIRTUAL” rows=”5″ cols=”35″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″><%= Aciklama%></textarea>
</td>
</tr>

Orijinal form verileri ekle2.asp’deki gizli form alanlarından alınıyor.Her form alanına value özelliğinin eklendiğine dikkat edin. Bu özellik orjinal form alanlarının tekrar görüntülenmesi için kullanılıyor.

BİR KAYDI GÜNCELLEMEK
Yeni kayıtlar ekledik. Peki ürün bilgilerimizde değişiklik olursa ne olacak? Elbette kayıtların güncellenmesi gerekecek. Bunun için UPDATE SQL ifadesini kullanacağız. Genel yazılımı:

UPDATE tablo_adi SET sutun_adi=ifade WHERE anahtar_sutun_adi=ifade

Burada tablo_adi güncellenecek kaydın bulunduğu tablonun adını, sutun_adi ise güncellenecek kaydın bulunduğu sütunu temsil etmektedir. anahtar_sutun_adi güncellenecek kaydın sütununun belirlenmesini sağlıyor. Buradaki sütun adı bir kaydı diğerinden ayıran bir değer olmalıdır. Bizim örneğimizdeki KayitID gibi. Her ürünün farklı bir KayitID değeri vardır.

İlk önce ayrinti.asp’de gerekli değişiklikleri yapalım:

<tr>
<td width=”13%”>Fiyatı:</td>
<td width=”23%”><%=rs.Fields.Item(”Fiyati”)%> TL</td>
</tr>

 

</table>

<table width=”100%” border=”0″>
<tr>
<td><a href=”guncelle.asp?kid=<%=RS(”KayitID”)%>”>Güncelle</a></td>
</tr>
<%RS2.MoveNext
wend
%>
<%RS.MoveNext
wend
%>
</table>

</body>
</html>


Burada bir “Güncelle” linki oluşturuyoruz ve bu linkin bulunduğumuz kaydın bilgilerini gösterecek şekilde ayarlıyoruz.

Şimdi de bahsettiğimiz guncelle.asp sayfasını tasarlayalım. Bu sayfa, ayrintilar.asp sayfasında “Güncelle” linki tıklandığında ayrinti.asp’deki gösterilen ürünün bilgilerini gösteren bir form içeriyor. Burada değişiklik yapılıyor ve Güncelle butonuna bastığımızda kayıt güncelleniyor. guncelle.asp ekle.asp’ye çok benziyor. Fakat bazı farklılıkları var:

<%@Language=VBScript%>

 

<!–#Include file=”adovbs.inc”–>
‘Geçerli ürünün KayitID’sini bir önceki sayfadan al.
‘Buraya ayrinti.asp’den geldik. O da geçerli ID’yi index.asp’den almıştı
<%
KaID=TRIM(Request(”kid”))

‘Veritabanı bağlantısını oluştur.
set Con=server.CreateObject(”ADODB.Connection”)
Con.open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(”/wwwliste/db.mdb”)

‘Bağlantı aç
‘Burada, iki tablo kullandığımız için her iki tablo için kayıtseti oluşturuyoruz
‘Where SQL ifadesi veritabanımızdan KayitID’si KaID’ye yani geçerli kayda eşit olan kaydı çekiyor.

‘Kayıt güncellerken adLockOptimistic imleç türü seçilir. İmleç türü kayıtseti açılmadan belirtilir.
‘İmleç türünü kullanabilmek için “adovbs.inc” dosyası sayfaya dahil edilir.

sqlString= “select * from liste where KayitID=” & KaID
set RS = server.CreateObject(”ADODB.Recordset”)
RS.CursorType= adLockOptimistic
RS.ActiveConnection=Con
RS.Open sqlString

%>

<%

sqlString= “select * from ayrinti where KayitID=” & KaID
set RS2 = server.CreateObject(”ADODB.Recordset”)
RS2.CursorType= adLockOptimistic
RS2.ActiveConnection=Con
RS2.Open sqlString

%>

<%
‘Kayıt sonu değilse değişkenleri ata
‘Parantez kullanıyoruz çünkü şartımız her iki kayıtseti için geçerli
If Not (RS.EOF and RS2.EOF) Then

KitapAdi=rs.Fields.Item(”KitapAdi”)
Yazari=rs2.Fields.Item(”Yazari”)
YEvi=rs.Fields.Item(”YEvi”)
Fiyati=rs.Fields.Item(”Fiyati”)
Aciklama=rs2.Fields.Item(”Aciklama”)
End If

‘Kayıtsetlerini kapat
RS.Close
RS2.Close
%>

<HTML>
<HEAD>
<META NAME=”GENERATOR” Content=”Microsoft Visual Studio 6.0″>
</HEAD>
<BODY bgcolor=”#ECF5FF” text=”#000000″>
<form name=”kekle” method=”post” action=”guncelle2.asp”>
<table width=”100%” border=”0″>
<tr>
<td colspan=”3″ bgcolor=”#FF6600″ height=”11″>
<div align=”center”>
<p><b><font color=”#FFFFFF”>Kayıt Güncelleme Formu<br>
</font></b><font color=”#FFFFFF”><font size=”1″>(*) alanlar zorunlu</font></font></p>
</div>
</td>
</tr>
<tr>
<td width=”24%”>Kitap Adı*:</td>
<td colspan=”2″>
<input type=”text” name=”KitapAdi” size=”30″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%=Server.HTMLEncode(KitapAdi)%>”>
</td>
</tr>
<tr>
<td width=”24%”>Yazarı*:</td>
<td colspan=”2″>
<input type=”text” name=”Yazari” size=”25″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%=Server.HTMLEncode(Yazari)%>”>
</td>
</tr>
<tr>
<td width=”24%”>Yayın Evi:</td>
<td colspan=”2″>
<input type=”text” name=”YEvi” size=”20″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%=Server.HTMLEncode(YEvi)%>”>
</td>
</tr>
<tr>
<td width=”24%”>Fiyatı*:</td>
<td colspan=”2″>
<input name=”Fiyati” type=”text” size=”10″ maxlength=”25″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″ value=”<%=Server.HTMLEncode(Fiyati)%>”>
TL </td>
</tr>
<tr>
<td width=”24%”>Açıklama:</td>
<td colspan=”2″>
<textarea name=”Aciklama” wrap=”VIRTUAL” rows=”5″ cols=”35″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″><%=Server.HTMLEncode(Aciklama)%></textarea>
</td>
</tr>
<tr>
<td width=”24%”>&nbsp;</td>
<td width=”7%”>
<input type=”submit” name=”btnGuncelle” value=”Güncelle” style=”color: #006FA4; font-family: Tahoma; font-size: 10pt; border-style: solid; border-width: 1″>
</td>
<td width=”69%”>&nbsp;</td>
</tr>
</table>
KayitID’yi tutan gizli alan
<input type=”hidden” name=”KitapID” value=”<%=KaID%>”>
<input type=”hidden” name=”guncelle” value=”1″>
</form>

</BODY>
</HTML>

Dikkat ettiniz mi? Değişkenler görüntülenmeden önce HTMLEncode metodunu kullandık. Bu metot değişkenleri HTML için kodlar. Örneğin HTML (”) tırnak işaretlerini bir stringin başlangıcı ve bitişi olarak kabul eder. Eğer değişkenlerimizin birinde (”) tırnak işareti olsaydı değişken düzgün görüntülenemezdi. (Örneğin; Kitap Adı: Çağ; “Bil?”gi çağı . Tırnak işaretleri sringin sonunun yanlış işaretlenmesine yol açacaktı). HTMLEncode her tırnak işaretini &quot HTML koduyla değiştirir. Bu, tırnak işaretlerinden doğacak problemi önler.

Guncelle2.asp

<%@ Language=VBScript %>

 

<%
‘UPDATE stirnginden kaynaklanan (’) tek tırnak problemini çözmek için bu fonksiyon kullanılır.
‘Tek tırnak işareti çift tırnakla değiştirilir.
Function tirnak(string)
tirnak=Replace(string,”‘”,”””)
End Function

KaID=TRIM(Request(”KitapID”))
KitapAdi=TRIM(Request(”KitapAdi”))
Yazari=TRIM(Request(”Yazari”))
YEvi=TRIM(Request(”YEvi”))
Fiyati=TRIM(Request(”Fiyati”))
Aciklama=TRIM(Request(”Aciklama”))

If YEvi=”" Then
YEvi=”???”
End If

If Aciklama=”" Then
Aciklama=”???”
End If

set Con=server.CreateObject(”ADODB.Connection”)
Con.open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(”/wwwliste/db.mdb”)

%>

<HTML>
<HEAD>
<META NAME=”GENERATOR” Content=”Microsoft Visual Studio 6.0″>
</HEAD>
<BODY bgColor=#ECF5FF>

<%

‘Zorunlu alanlar doldurulmuşsa kaydı güncelle
‘formHata altrutinini bu forma da ekleyebilirsiniz

If (KitapAdi<>”" and Yazari<>”" and Fiyati<>”") Then

‘ KitapAdi= -veritabanımızdaki alan adı-
‘tirnak fonksiyonunun içindeki değerler ise formdaki alan değerlerini temsil eden değişkenlerimizdir.
‘Böylece KayitID değeri bulunduğumuz değer olan ürün güncellenir.
sqlString = “UPDATE liste SET ” &_
“KitapAdi=’” & tirnak( KitapAdi ) & “‘,” &_
“YEvi=’” & tirnak( YEvi ) & “‘,” &_
“Fiyati=’” & tirnak( Fiyati ) & “‘” &_
“WHERE KayitID=” & KaID

Con.Execute sqlString

sqlString2 = “UPDATE ayrinti SET ” &_
“Yazari=’” & tirnak( Yazari ) & “‘,” &_
“Aciklama=’” & tirnak( Aciklama ) & “‘” &_
“WHERE KayitID=” & KaID

Con.Execute sqlString2

%>

<table width=”100%” border=”0″ align=”center”>
<tr>
‘Güncellenen ürünün adı görüntülenir.
<td><font color=”#CC3300″><b><%=KitapAdi%></b></font> güncellendi</td>
</tr>
</table>

<%
End If
%>
</BODY>
</HTML>

ASP’de Built-In Objects 

ASP bildiğiniz gibi temelde VBScript’i kullanır ve VBScriptte geçen tüm fonksiyonlar,Operatörler,Metodlar ve diğer işlemler aynı şekilde ASP içinde geçerlidir.
Burada aklınıza “O zaman neden VBScript kullanmıyoruzda ASP kullanıyoruz ?” diye bir soru gelebilir. Bunu ASP ile VBScript farkları olarak şöyle açıklayabiliriz.

• ASP Server tabanlı bir script dilidir ve Webserver olmadan çalışmaz. VBScript ise normal HTML sayfalarında da kullanılabilir.
• ASP hem VBScript in getirdiği özellikleri kullanabilir hem de objelerle ilişkilidir. VBScript ise ASP kadar obje yönelimli değildir.
• ASP nin tabanında yapı objeleri ( Built-In Objects ) vardır fakat VBScriptte bu şekilde objeler yoktur.
• ASP , VBScript ‘ e göre veritabanları ile daha kolay anlaşabilir ve daha çarpıcı işlemler yapabilir.
• ASP de yazdığınız kodlar kullanıcının bilgisayarına gittiğinde HTML tagları olarak görünür fakat VBScript kodları kullanıcının bilgisayarına gittiğinde yazıldığı gibi görünür.

Bu farkları gördüğümüzde neden ASP kullandığımızı daha iyi anlıyoruz.

ASP 2.0 da 5 adet yapı objesi bulunurken ASP 3.0 da bu sayı 7 ye çıkarılmıştır.

ASP 2.0 da bulunan yapı objeleri :
• Response
• Request
• Session
• Application
• Server

ASP 3.0 da bulunan yapı objeleri :
• Response
• Request
• Session
• Application
• Server
• Errors Object
• ObjectContext Object

Gördüğünüz gibi ASP 3.0 ile birlikte hata kontrolleri için Errors objesi ve Transaction işlemleri için ObjectContext objesi gelmiştir.

Bu yazımızda bu objelerden Response ve Request objesini inceleyeceğiz.

RESPONSE :
Bu obje ASP’de en çok kullanılan objelerden biridir. Webserver’ın kullanıcıya ( Client ) cevap vermesi anlamına gelir.
Yani kullanıcı Webserver dan bir istekte bulunur ve Webserver da kullanıcıya Response objesi ile cevap verir.
Örneğin, kullanıcı herhangi bir ASP sayfasını çağırdığında ekrana gelen değişken değerleri veya kişinin bilgisayarına çerezlerin ( Cookie ) gönderilmesi gibi işlemler bu obje sayesinde olur.
Şimdi Response objesine ait özellikleri ve metodları inceleyelim …

Response.Write : Bu metod ASP sayfalarında çok fazla kullanılır. Bir değişkenin değerini yada herhangi bir yazıyı ekranda görüntülemek için kullanılır.
Örnek kullanımı : Response.write (“ bu bir deneme yazısıdır…”)
şeklindedir. Bu örneği kullandığınızda ekranda “ bu bir deneme yazısıdır…” yazısını görürsünüz.
Bunun dışında tek satırlık işlemler yapıyorsanız “ = “ işareti kullanabilirsiniz.Bu işlem Response.Write metodunun yaptığı işi yapar. Örnek kullanımı : <%=data(“kisiadi”)%> Şeklindedir.

Response.Redirect : Bu metod bulunduğunuz sayfadan başka bir sayfaya yada başka bir internet adresine yönlendirilmek istediğinizde size yardımcı olacaktır.Örneğin bir kişiyi sitenize kayıt ettikten sonra otomatikman o kişiyi kayıt olmuş kişiler sayfasına yönlendirmek isterseniz redirect metodunu kullanabilirsiniz.
Örnek kullanımı : Response.Redirect (“default.asp”)
şeklindedir. Bu örneği kullandığınızda bulunduğunuz sayfadan default.asp sayfasına yönlendirilirsiniz.

Response.Expires : Bu özellik sayfanın kaç saniye sonra iptal ( Expire ) olacağını belirler. Örneğin kullanıcı hiçbir işlem yapmadan 20 saniye beklerse sayfa expire olur.tabi burada 20 saniye yada diğer zaman birimlerini belirlemek size kalmış.
Örnek kullanımı : Response.Expires=50
Şeklindedir. Burada 50 rakamı sayfanın 50 saniye sonra expire edileceğini belirtmektedir.

Response.Cookies : Bu koleksiyon Zzyaretçinin bilgisayarına Cookie ( Çerez ) denilen, genelde içinde kişi ve site hakkında bilgi barındıran küçük bilgi dosyacıkları gönderir.Cookieler siteler tarafından fazlaca kullanılır ve kullanıcıyı tekrar tekrar sitede bir takım olayları gerçekleştirmekten kurtarır. Örneğin kişi bilgilerini içeren bir Cookie niz varsa ziyaretçi sizin sitenize girdiğinde
O kişiye ismi ile hitap edebilirsiniz ve bunun o kişiyi memnun edeceğinden emin olabilirsiniz.
Örnek kullanımı : Response.Cookies(“isim”)=”ismail AKTAŞ”
Şeklindedir. Bu Örneği kullandığınızda ziyaretçinin bilgisayarına isim adında ismail AKTAŞ değerini içeren bir cookie göndermiş olursunuz .

Response.IsClientConnected : Bu özellik sitenizde herhangi ziyaretçinin olup olmadığı hakkında size bilgi vermektedir.
Eğer sitenizde ziyaretçi var ise geriye değer olarak true döndürmektedir.
Örnek kullanımı : Response.IsClientConnected
Şeklindedir. Burada size döndürecek True , False değerlerinden birine göre işlemler yapabilirsiniz.

Response.Buffer : Bu özellik sayfanın tam olarak yüklenmeden gösterilmemesini sağlar. Yani bu özelliği kullandığınızda sayfanızdaki objeler,elemanlar ve diğer tüm işlemlerin oluşması tamamlanmadan sayfanız ekranda görünmez.
Örnek kullanımı : Response.Buffer=True
Şeklindedir. Burada True değerini girmezseniz yada buffer özelliğini hiç kullanmazsanız mevcut değeri olan False aktif olacaktır.

Response.Charset : Bu özellik bölgesel ayarlarda kullanılır ve sayfada kullanılan karakterlerin set edilmesi işlemini içerir.
Örnek kullanımı : Response.Charset=1254
Şeklindedir.Buradaki 1254 değeri türkçe karakterlerin yazılacağını belirtir.

Response.End : Bu metodu sayfanın neresine koyarsanız kodlar oraya kadar normal bir şekilde çalışır ve response.end satırını gördüğü anda durur. Bu metod daha çok kodlama sırasında kontrol işlemlerinde kullanılır fakat bazı sayfalarda da işlemleri sonlandırmak için kullanıldığı görülmüştür.
Örnek kullanımı : Response.End şeklindedir.

Response.ContentType : Kullanacağınız ASP sayfasının içeriğini tanımlamakta kullanılır.Örneğin Browser’ ınızda bir Excel,Word yada bir PowerPoint sayfasını ContentType özelliğini kullanarak açabilirsiniz.
Örnek kullanımı : Response.ContentType=”application/msword” yazdığınızda browser bir Word sayfası açar.
Eğer Excel sayfası açmak isterseniz ; Response.ContentType = “application/vnd.ms-excel” yazarak bu işlemi de yapabilirsiniz.

Şimdi de Request objesinin özelliklerini ve metodları görelim.

REQUEST :
Request objesi Webserver ‘ ın ziyaretçiden bilgi alması anlamına gelmektedir.

Request.QueryString : Formlarda GET metodu ile bilgi gönderilmek istediğinde bu bilgi request objesinin QueryString koleksiyonu ile alınır.Ayrıca linkler aracılığı ile bilgi gönderilmek istendiğinde de bu bilgi GET metodu ile gönderilmiş sayılıp yine QueryString koleksiyonu ile alınır.
Örnek kullanımı : Response.QueryString(“formdan gelen bilgi”) Şeklindedir.

Request.Form : Bu koleksiyon ise QueryString in yaptığı işlemlerinin bir benzerini yapmaktadır. Tek farkı formlarda GET metodu yerine POST metodu aktif olduğunda kullanılır ve linkler aracılığıyla gönderilen veriler bu koleksiyon ile alınmaz.
Örnek kullanımı : Response.Form(“formdan gelen bilgi”) Şeklindedir.

Request.ServerVariables : Bu koleksiyon server bilgilerini almak için kullanılır. Webserver’ların tuttuğu bilgilere ihtiyacımız olduğunda bu koleksiyonu kullanırız.
Örnek kullanımı : Response.Servervariables(“REMOTE_ADDR”)
Şeklindedir. Bu örneği uyguladığınızda sitenize gelen ziyaretçinin IP ( Internet Protokol ) numarasını almış olursunuz.

Request.Cookies : Bu koleksiyon ise Response objesi ile gönderilen cookieleri alma da kullanılır.
Örnek kullanımı : Request.Cookies(“isim”)=”İsmail AKTAŞ”
Şeklindedir.Bu örneği uyguladığınızda ziyaretçinin sisteminde bulunan içeriği İsmail AKTAŞ olan cookie ‘ yi okumuş olursunuz.

DirectX ile Web Sayfalarında Grafik Çizme 

w=65
For i = 1 to 7
X=-280 + w*(i-1) + 10*i
Y=-i*50
call dk.rect(x,180,w,y)
Next

(Yukarıdaki satırda veri i değişkenidir.)

Soruyu sormadık ama ne olduğunu hepimiz tahmin edebiliyoruz, o halde hemen aklımıza gelen bir cevabı yazalım;

1- İlk cevabımız kodlar arasına veritabanına bağlantı yapan satırları eklemek olabilir. Ama scriptimiz kullanıcı taraflı. Bu riskli olur, veri
tabanı bağlantı parametreleri görüldüğü için.

2- İkinci bir alternatif ise asp sayfası hazırlayıp veritabanından alınan değişkeni grafik kodları arasına yazmak ? Bu da çalışmayacaktır. Çünkü asp sayfaları sonuçları HTML olacak şekilde kullanıcıya bilgi gönderir. Bu şekilde çalışabilmesi için istemciye boyutlu bir değişkeni gönderebiliyor
olmamız gerekir veya sunucu tarafında DIRECTX i kullanıyor olmamız gerekir, ama DIRECTX sunucu taraflı çalışınca grafiği istemciye gönderemeyiz.

3- Peki HTML kodlarının bir çoğunu değişken olarak kullanmayı önersem ? Evet benim çözüm önerim bu olacak ve bu yazıda bu kodların yazımını ve kullanımını açıklayacağım. (Farklı yöntemlerle çözüm bulanlarında bilgisini paylaşması dileğiyle)

Hepimiz web sayfası tasarımına geçmeden önce HTML komutlarını öğreniriz. (aslında mecburuz.)

Şimdi HTML nin şu komutlarına dikkat edin bunlar arasından bizim amacımıza en uygun olanlarını kullanabiliriz :

TABLE (Table, Tr, Td)
INPUT
IMAGE

Elbette burdaki amacımız verimizin türüne bağlı olarak veri taşıyacak değişkeni saptamak. Bizim için önemli olan bu komutların kullandığı VALUE
veya TITLE parametresidir.

VALUE INPUT tag’ının parametresi TITLE ise yukarıda yazılanların ve bir çok HTML tag’larının parametresidir. VALUE parametresi eğer INPUT tag’ının tipi TEXT ise girilen değeri, BUTTON ise butonun üzerindeki yazısı olur. TITLE ise mouse bu HTML elemanlarından birinin üzerine getirdiğinizde onun ne işe yaradığını anlatan açıklama satırlarını oluşturur.

Örneğin;

<INPUT type=”TEXT” title=”Bu bir textbox’dur.”>

İşte biz bu TITLE veya VALUE parametrelerini değişken olarak kullanacağız. Şimdi aşağıdaki örneği inceleyelim. Bu örnek yazılar arasında süreklilik sağlamak amacıyla bir önceki yazıda kullandığım örneğe bugünkü konunun eklenmiş halidir.

Ben veri tabanı olarak SQL Server kullanıyorum. Sizde verilerinizi nerede saklıyorsanız aşağıdaki kodda veri tabanı bağlantısı kısmını düzenleyerek çalıştırabilirsiniz. Veri tabanı bağlantısı kısmını açıklamıyorum bu konu ile ilgili bu sitede (www.aspnedir.com) yeteri kadar bilgi var.

Şimdi basit (görece basit) faydalı ve ilginç satırımı cımbızla çekip biraz analiz edeyim.

response.write “<TR><TD ID=’Xeks” & i & “‘ title=” & rst(”X”) & “>” &
rst(”X”) & “</TD><TD id=’Yeks” & i & “‘ title=” & rst(”Y”) & “>” & rst(”X”)
& “</TD></TR>”

Bu satırda bizim için ID ve TITLE parametresi önemli. ID kullandığımız taga isim vererek onu diğerlerinden ayırmamızı sağlar. Bazı tagların içinde ID yerine NAME vardır aynı görevi yapar. işte bizde verilerimizi TD tagı içinde saklarken hangi sutunda hangi bilginin olduğunu unutmamak için ona bir isim verdik. X Eksen bilgilerini saklayan sutunun ID sine Xeks, Y Eksen bilgilerini saklayan sutunun ID sine Yeks diyelim. Ama elimizde 1 den fazla veri var. Eğer boyutlu değişkenleri kullanabiliyor olsaydık A(1)=10, A(2)=20, … A(N)=M şeklinde yazabilirdik. işte ortam HTML olunca bizde her bir satıra farklı isim vererek boyutlu değişkeni kendimiz oluşturuyoruz. Herbir satıra farklı bir isim vermek yerine bir ismin önüne rakam ekleyerek onu türetiyoruz;

ID=”Xeks” & i

i=0 için Xeks0
i=1 için Xeks1
i=2 için Xeks2

i=N için XeksN

Buraya kadar tamam. N veri için N tane TD değişkeni oluşturduk. Şimdi bu değişkende verileri toplayalım. Aşağıdaki kodu inceleyelim ;

… “<TD ID=’Xeks” & i & “>” & rst(”X”) & “</TD>” (tam kod için bkz. yukarı)

bu şekilde bir kodlama yaparsak istemci verileri Tablo içinde görecek ama grafiği göremeyecektir. kodumuzu düzenleyelim;

… “<TD ID=’Xeks” & i & “‘ title=” & rst(”X”) & “>” & rst(”X”) & “</TD>” (tam kod için bkz. yukarı)

Evet şimdi istemcinin ne göreceğine bakalım. Ekranda X ekseni için verilen değerleri görecek. Hepsi bu kadar mı ? Elbette hayır. Eğer kodu
çalıştırırsanız mouse’unuzu rakamların üzerine götürmeyi unutmayın. Evet açıklama satırı olarak aynı rakamları okuyacaksınız. İşte bizim
kullanacağımız TITLE içinde saklanan bu veriler. Tabi birde sütunun adı olan ID parametresi.

(Hımm biraz eğlenelim bu kodlarla ne dersiniz ? :) )

Şöyle bir soru akla gelebilir; Yüzlerce veri var hepsi ekranda gözükecek tablo uzayacak görüntü bozulacak. Kolayı var tabloda Border=0 yapın, bir de title dışında verileri yazdırmayın. Oldu olacak bir de style=’visibility:hidden’ css komutu ekleyelim tabloya ve görünürlüğünü
tamamen kaldıralım şöyle ki;

Response.write ” <TABLE Border=’0′ style=’visibility:hidden’>”
Response.write ” <TR><TD ID=’Xeks” & i & “‘ title=” & rst(”X”) &
“></TD></TR>”
Response.write ” </TABLE>”

Yine de işlem zamanı ve istemcinin bu verileri görebilmesi veri büyüklüğüyle doğru orantılı. Her ne kadar tabloda gözükmesede title içine aktarılan verilerin istemciye gönderilmesi zaman alacatır. Ama bir faydasıda veriler üzerinde herhangi bir matematiksel düzenlemeyi istemciye butonlar sunarak verebiliriz. Bu durumda istemci grafik üzerinde yaptığı her değişiklik için sadece kendi bilgisayarının hızı kadar beklemek zorunda. Her seferinde web üzerinden bu bilgileri alması gerekmez. (Ama sizde herşeyi HTML den beklemeyin :))

Unutmayalım ki biz burada DIRECTX, HTML, ASP ve DHTML kullanarak biraz uzun yoldanda olsa grafik çizdirmeye çalışıyoruz. Bunun en kısa yolu grafik cizip onu JPG kayıt eden bir ActiveX DLL yazıp sonra o DLL’i ASP içinden çağırmaktır. Konumuza tekrar dönelim.

Önemli bir kod satırımızda DHTML (Dinamik HTML) ile ilgili;

document.all.item(”Xeks1″).title

Yukarıdaki satır DHTML kodudur. Buradaki DOCUMENT ifadesi bizim sayfamızı, ALL bu sayfa üzerindeki tüm tagları, ITEM ise bu taglardan herhangi birini seçmemizi sağlıyor.
Dikkat ederseniz item(”Xeks1″) yazdık. Buradaki Xeks1 yukarıda bahsedilen verilerin saklandığı sütunun adıdır. Yani Xeks1 TD tagının ID ’sidir. İşte istemci tarafında tablo veya diğer bir HTML kodu içindeki bilgilere ulaşmamıza yarayan güzel bir DHTML kodudur. TITLE TD tagının parametresiydi ve yukarıda kullanacağımız verileri oraya yazdırmıştık. O halde

For i = 1 to M
X = document.all.item(”Xeks” & i).title
y = document.all.item(”Yeks” & i).title
next

M veri sayımız diğer bir değişle tablonun satır sayısı olmak üzere, TD tagı içine sakladığımız tüm verilere bu şekilde ulaşabiliriz. Ayrıca madem IE kullanıyoruz. O halde IFRAME kullanarak fazla verilerin sayfa düzenini bozmasını engelleyebiliriz. verileri IFRAME içinde sunabiliriz. Butonlarla
IFRAME in kaynağını değiştirip farklı verilere ulaşıp farklı grafikler çizdirebiliriz.
örneğin;

<IFRAME ID=”VERI” HEIGHT=”30%” WIDTH=”100%” FRAMEBORDER=1 SCROLLING=YES
SRC=”veri.asp”></IFRAME>

veri.asp dosyası veri tabanından verileri okuyup yine aynı sayfada tablolar halinde yayınlasın.

Bu durumda grafik çizdireceğimiz sayfamızın asp olmasına gerek olmayacak. Tek sorun IFRAME içindeki tablodan veri okutmak olacaktır. Bunu ise;

M = document.frames(”VERI”).document.all.item(”sayi”).value

şeklinde yapabiliriz. bu bize veri.asp dosyasında yer alan

<input name=’sayi’ value=10></input>

satırındaki Value yani 10 değerini okuyacaktır. Son olarak önemli bir HTML kodunu açıklayalım;

<META HTTP-EQUIV=”REFRESH” CONTENT=”60″>

META tagı HEAD tagı içinde tanımlanır. Daha çok sayfanın içeriği dili vb. hakkında bilgi içerir.

Yukarıdaki parametreleriyle kullanıldığında sayfanın yeniden yüklenmesi sağlanır. yani bu kod için 60 saniye sonra sayfa Refresh edilerek yeniden yüklenir. Böyle bir parametre veritabanına belli zaman aralıklarıyla bağlanıp verilerimizi vede grafiklerimizi güncellemeye yarayabilir.

Aşağıda anlatmaya çalıştığım konuyla ilgili geçen yazımdaki örneğin değiştirilmiş halini bulacaksınız. Satırlar arasında yine açıklama satırları
var. Umarım anlaşılır bir örnek olmuştur.

Bu makaleyi okuyan ve katkı koyabilecek herkese şimdiden teşekkür ediyorum.

Bilgi Paylaştıkça Çoğalır. Farkınız bilmek değil, bilginizi kullanabilmek
olsun.

İlk sayfamızın adı veri.asp olsun;

‘ Bu sayfada veritabanı bağlantısı kurulabilir.

 

<!@ Language=”VBScript”>
<html>
<body>
<%
Dim X, Y, i

response.write “<TABLE width=’100%’ align=’center’ border=’0′ >”
response.write “<TR><TD>X Ekseni</TD><TD>Y Ekseni</TD></TR>”

for i = 1 to 7
X = i*5
Y = int(70*rnd(1))
response.write ” <TR><TD ID=’Xeks” & i & “‘ title=” & X & ” >” & X &
“</TD><TD id=’Yeks” & i & “‘ title=” & Y & ” >” & Y & “</TD></TR>”
next
response.write “</TABLE>”

‘ i veri sayisi ise input ile saklıyor görünür olmaması içinde visible false
yapıyoruz.

Response.Write “<input type=’hidden’ name=’sayi’ Value=” & (i-1) &
“></input>”
%>
</body>
</html>

İkinci sayfamızın adı drx.htm olsun;

<html>

 

<head>
<META HTTP-EQUIV=”REFRESH” CONTENT=”60″>
<title>DIRECT-X ile Dinamik Grafik Çizdirmek.</title>
</head>
<body>

<TABLE width=”100%”>
<TR><TD>
<input type=”BUTTON” name=”button” value=”Grafik”>
<IFRAME ID=”VERI” HEIGHT=”30%” WIDTH=”100%” FRAMEBORDER=1 SCROLLING=YES
SRC=”veri.asp”></IFRAME>
</TD><TD>
<Table border=”1″ align=”center” bordercolorlight=”#C0C0C0″
bordercolordark=”#808080″ bordercolor=”#808080″ bgcolor=”#808080″
cellspacing=”5″ cellpadding=”4″>
<TR><TD bgcolor=”#FFFFFF”>
<OBJECT ID=DRW STYLE=”WIDTH:600; HEIGHT:400; Z-INDEX:1″
CLASSID=”CLSID:369303C2-D7AC-11d0-89D5-00A0C90833E6″>
</OBJECT>
</TD></TR>
</TABLE>
</TD></TR>

</body>

<SCRIPT LANGUAGE=VBSCRIPT >
<!–
sub button_onclick()
Dim dk, lib, M
set lib = DRW.Library ‘ DirectX kütüphanesi açılıyor.
set dk=DRW.DrawSurface ‘ Çizim kütüphanesi açılıyor.

call dk.fillcolor(lib.ColorRGB255(0,0,0)) ‘ Cizgi Rengi
call dk.linecolor(lib.ColorRGB255(0,0,0)) ‘ Dolgu Rengi
call dk.oval(0,0,5,5) ‘ 0,0 merkez noktasının yerine dikkat edin.
‘ X ekseni
call dk.rect(-280,180,560,5) ‘ dörtgen,kare çizen komut
‘ Y ekseni
call dk.rect(-280,-180,5,360) ‘ dörtgen,kare çizen komut
‘ BAR GRAFIK
call dk.fillcolor(lib.ColorRGB255(0,100,0)) ‘ Dolgu Rengi
call dk.linecolor(lib.ColorRGB255(0,100,0)) ‘ Cizgi Rengi

‘ M veri sayisi <input> tagından alınıyor. <input> tagının type özelliğine
dikkat edin.

M = document.frames(”VERI”).document.all.item(”sayi”).value

w=65
For i = 1 to M
YY = document.frames(”VERI”).document.all.item(”Yeks” & i).title ‘ Tablodan
Y değerleri okunuyor
X=-280 + w*(i-1) + 10*i
Y=-YY*5
call dk.rect(x,180,w,y)
Next

‘ TEXT GRAFIK
call dk.fillcolor(lib.ColorRGB255(255,0,0)) ‘ Dolgu Rengi
call dk.linecolor(lib.ColorRGB255(255,0,0)) ‘ Cizgi Rengi
call dk.Font(”Times New Roman”,18,300,0,0,0) ‘ Text adi,boyu

w=65
For i = 1 to M
YY = document.frames(”VERI”).document.all.item(”Yeks” & i).title ‘ Tablodan
Y değerleri okunuyor
X=-260 + w*(i-1) + 10*i
Y=175-YY*5
call dk.text(YY,x,y) ‘ Y değerleri grafik üzerine yazdırılıyor.
XX = document.frames(”VERI”).document.all.item(”Xeks” & i).title ‘ Tablodan
X değerleri okunuyor
call dk.text(XX,x,200) ‘ X değerleri grafik üzerine yazdırılıyor.
Next


‘ Çizimlerin ekranda gösterilmesisini sağlamak için
‘ aşağıdaki komutlar eklenir.

dk.RestoreGraphicsState()
DRW.DrawSurface=dk
end sub
–>
</SCRIPT>

Online Kitapevi Sitesi Yazalım 

Önce veritabanını hazırlayalım. Program bir veritabanından ve şimdilik iki tablodan oluşuyor.
“db” isimli bir veritabanı oluşturun. Daha sonra da liste isimli bir tablo.

Alan Adı Veri türü
KayitID Otomatik Sayı
KitapAdi Metin
YEvi Metin
Fiyati Metin
KayitID KitapAdi YEvi Fiyati
KayitID Yazari Aciklama

*** Alan adlarında Türkçe karakter girmemeye dikkat edin. Türkçe karakterler hataya sebep olacaktır. Kodlarınız doğru olsa da programınız hata verecektir.
*** Elimizde ufak bir veritabanı ve tablolar var. Bu kadar küçük tabloları ikiye bölmek saçma gelebilir ama büyük ölçekli tablolar için uygun bir yöntemdir. Böylece veritabanınızın şişmesini engellemiş olursunuz.

Tablolar KayıtID alanı ile birbirleriyle ilişkilendirilmiştir. Yani KitapID’si 3 olan kitap:

KayitID KitapAdi YEvi Fiyati Yazari Aciklama

Değerlerine sahiptir.

***Fiyat değerlerini salladım :) ama herhalde böyle birşeylerdir. Ayrıntılı bilgi için yayınevlerinin web adreslerini ya da en yakın kitapçıyı ziyaret edebilirsiniz.

TABLO İÇERİĞİNİN ASP SAYFASINA YAZDIRILMASI

Tablomuzu hazırladık peki nasıl görüntüleyeceğiz? İlk önce sayfamızın tasarlanması gerekiyor. Bunun için birçok editör kullanabilirsiniz. Endişelenmeyin NotePad de işinizi görür. Ama ben yine de Dreamweaver ya da FrontPage gibi bir editör kullanmanızı tavsiye ederim. Elle kod girmekten daha kolay. Ama Asp kodlarını yazmaktan kurtulamazsınız :)

<%@Language=VBScript%>
<%
‘Veritabanı bağlantısını yap
set Con=server.CreateObject(”ADODB.Connection”)
‘Bu durumda veritabanının yeri asp server içinde wwwliste/db.mdb’dir
Con.open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(”/wwwliste/db.mdb”)
‘Bağlantıyı aç

 

set RS = server.CreateObject(”ADODB.Recordset”)
RS.ActiveConnection=Con

‘liste tablosundaki bütün alanları KitapAdı’na göre sırala

sqlString= “select * from liste order by KitapAdi”

RS.Open sqlString

%>


<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
<meta name=”GENERATOR” content=”Microsoft FrontPage 4.0″>
<meta name=”ProgId” content=”FrontPage.Editor.Document”>
<title>İndex</title>
</head>

<body bgcolor=”#ECF5FF”>

<table border=”1″ width=”100%” bordercolor=”#000000″ cellspacing=”0″>
<tr>
<td width=”100%” height=”2″ valign=”top”>
<table border=”1″ width=”100%” bordercolor=”#FFFFFF” cellspacing=”0″>
<tr>
<td width=”13%”>Kitap Adı</td>
<td width=”15%”>Yayın Evi</td>
<td width=”14%”>Fiyatı</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width=”100%” height=”29″ valign=”top”>

<table border=”1″ width=”100%” bordercolor=”#808080″>
<%

‘Son kayıda kadar döngü
while not rs.EOF
%>
<tr>
<td width=”13%”>
‘KitapAdi alanının değeri browser’a yazdırılır
<%=rs.Fields.Item(”KitapAdi”)%></td>
‘Yevi alanı yazdırılır
<td width=”15%”><%=rs.Fields.Item(”YEvi”)%></td>
‘Fiyati alanı yazdırılır
<td width=”14%”><%=rs.Fields.Item(”Fiyati”)%></td>
</tr>
‘Sonraki kayıta git
<%RS.MoveNext
wend
%>
</table>

</td>
</tr>
</table>
</html>

AYRINTI SAYFALARI OLUŞTURMAK

Bu bölümde index.asp’deki Kitap Adı’na link verip bu linki kitap ayrinti.asp sayfasına yönlendireceğiz. Bunu yaparken index.asp’de tıkladığımız kayıt ile ayrıntı.asp de göstereceğimiz kayıtın “KayitID” alanlarının aynı olmasından yararlanacağız.
İlk önce index.asp’de gerekli eklemeyi yapalım:

Eklediğimiz kod index.asp’deki listelenen kaydın KaytID’si ile ayrinti.asp’de görüntülenecek kaydın KayitID’sinin eşit olduğunu sorgular. Bir başka değişle ayrinti.asp’de, tıkladığınız kaydın KayitID’si ile eşit olan kaydın ayrıntıları görüntülenecektir. “kid” index.asp’deki listelenen kayıtların KayitID değerini tutmaktadır.


<table border=”1″ width=”100%” bordercolor=”#808080″>
<%
while not rs.EOF
%>
<tr>
<td width=”13%”><a href=”ayrinti.asp?kid=<%=RS(”KayitID”)%>”><%=rs.Fields.Item(”KitapAdi”)%></a></td>
<td width=”15%”><%=rs.Fields.Item(”YEvi”)%></td>
<td width=”14%”><%=rs.Fields.Item(”Fiyati”)%></td>
</tr>
<%RS.MoveNext
wend
%>
</table>

Şimdi sırada ayrinti.asp’nin yazılması var:


<%@Language=VBScript%>
<%
‘KaID değişkeni index.asp’deki tıklanan kaydın KayitID’sini tutar.

 

KaID=TRIM(Request(”kid”))

Veritabanı bağlantısını yap
set Con=server.CreateObject(”ADODB.Connection”)
Con.open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(”/wwwliste/db.mdb”)

‘liste tablosundaki KayitID’si geçerli olan kayda eşit olan (KaID’ye) kaydı al.
sqlString= “select * from liste where KayitID=” & KaID
‘Bağlantıyı aç
set RS = server.CreateObject(”ADODB.Recordset”)
RS.ActiveConnection=Con

RS.Open sqlString

%>

<%

‘İki tablo kullandığımız için ayrinti tablosunun da değerlerinin alınması gerekir.
‘İkinci bir bağlantı oluşturulur ve istenen değerler ayrinti tablosundan da alınır.


sqlString= “select * from ayrinti where KayitID=” & KaID
set RS2 = server.CreateObject(”ADODB.Recordset”)
RS2.ActiveConnection=Con

RS2.Open sqlString

%>

<html>
<head>
<title>Ayrıntı</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</head>

<body bgcolor=”#ECF5FF” text=”#000000″>
<table width=”100%” border=”0″>
‘Döngüler başlatılır
<%
while not rs.EOF
%>

<%
while not rs2.EOF
%>
<tr>
<td colspan=”3″>&nbsp;</td>
</tr>
<tr>
<td width=”13%”>Kitap Adı:</td>
‘Kayıtlar browser’a yazdırılır
<td width=”23%”><%=rs.Fields.Item(”KitapAdi”)%></td>
<td rowspan=”4″><%=rs2.Fields.Item(”Aciklama”)%></td>
</tr>
<tr>
<td width=”13%”>Yazarı:</td>
<td width=”23%”><%=rs2.Fields.Item(”Yazari”)%>
</td>
</tr>
<tr>
<td width=”13%”>Yayın Evi:</td>
<td width=”23%”><%=rs.Fields.Item(”YEvi”)%></td>
</tr>
<tr>
<td width=”13%”>Fiyatı:</td>
<td width=”23%”><%=rs.Fields.Item(”Fiyati”)%></td>
</tr>
<tr>
<td width=”13%”>&nbsp;</td>
<td colspan=”2″>&nbsp;</td>
</tr>
<%RS2.MoveNext
wend
%>
<%RS.MoveNext
wend
%>
</table>
</body>
</html>

TABLOYA YENİ KAYIT EKLEMEK

Peki database’imiz hep böyle mi kalacak? Elbette hayır. Yeni kayıtlar girmek gerek:
İlk önce index.asp’nin sonuna aşağıdaki kodu ekleyelim:

<table width=”100%” border=”0″>
<tr>
<td><a href=”ekle.asp”>Kayıt Ekle</a></td>
</tr>
</table>

Bu değişikle sadece sayfa sonuna “Kayıt Ekle” linkini oluşturduk.
Sıra bu link tıklanınca ekrana gelecek olan sayfanın hazırlanmasına geldi:

<html>
<head>
<title>Kayıt Ekle</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</head>
<body bgcolor=”#ECF5FF” text=”#000000″>
‘Form içeriği ekle2.asp’ye gönderilir
<form name=”kekle” method=”post” action=”ekle2.asp”>
<table width=”100%” border=”0″>
<tr>
<td colspan=”3″ bgcolor=”#FF6600″ height=”11″>
<div align=”center”>
<p><b><font color=”#FFFFFF”>Kayıt Ekleme Formu
</font></b><font color=”#FFFFFF”><font size=”1″>(*) alanlar zorunlu</font></font></p>
</div>
</td>
</tr>
<tr>
<td width=”24%”>Kitap Adı*:</td>
<td colspan=”2″>
<input type=”text” name=”KitapAdi” size=”30″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″>
</td>
</tr>
<tr>
<td width=”24%”>Yazarı*:</td>
<td colspan=”2″>
<input type=”text” name=”Yazari” size=”25″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″>
</td>
</tr>
<tr>
<td width=”24%”>Yayın Evi:</td>
<td colspan=”2″>
<input type=”text” name=”YEvi” size=”20″ maxlength=”50″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″>
</td>
</tr>
<tr>
<td width=”24%”>Fiyatı*:</td>
<td colspan=”2″>
<input name=”Fiyati” type=”text” size=”10″ maxlength=”25″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″>
</td>
</tr>
<tr>
<td width=”24%”>Açıklama:</td>
<td colspan=”2″>
<textarea name=”Aciklama” wrap=”VIRTUAL” rows=”5″ cols=”35″ style=”color: #006FA4; font-family: Tahoma; font-size: 8pt; border-style: solid; border-width: 1″></textarea>
</td>
</tr>
<tr>
<td width=”24%”>&nbsp;</td>
<td width=”7%”>
<input type=”submit” name=”btnEkle” value=”Ekle” style=”color: #006FA4; font-family: Tahoma; font-size: 10pt; border-style: solid; border-width: 1″>
</td>
<td width=”69%”>
<input type=”reset” name=”Reset” value=”Temizle” style=”color: #006FA4; font-family: Tahoma; font-size: 10pt; border-style: solid; border-width: 1″>
</td>
</tr>
<tr>
<td width=”24%”>&nbsp;</td>
<td colspan=”2″>&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Dikkat ederseniz bu sayfada database’e kayıt yazdıracak herhangi bir kod yok. Sayfada bir form var ve bu formdaki değerler, “ekle2.asp”‘ye gönderiliyor. Tahmin ettiğiniz gibi veritabanına kaydı girecek olan kodlar “ekle2.asp”‘de:

<!–#INCLUDE FILE=”adovbs.inc”–>
<%
‘Değişkenler atanır
KitapAdi=TRIM(Request(”KitapAdi”))
Yazari=TRIM(Request(”Yazari”))
YEvi=TRIM(Request(”YEvi”))
Fiyati=TRIM(Request(”Fiyati”))
Aciklama=TRIM(Request(”Aciklama”))
Alanlar boşsa varsayılan değerleri gir
If KitapAdi=”" Then
KitapAdi=”???”

 

If Yazari =”" Then
Yazari =”???”

If Fiyati =”" Then
Fiyati =”???”

If YEvi=”" Then
YEvi=”???”
End If

If Aciklama=”" Then
Aciklama=”???”
End If

set Con=server.CreateObject(”ADODB.Connection”)
Con.open “DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(”/wwwliste/db.mdb”)

%>

<html>
<head>
<title>ekle2.asp</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</head>

<body bgcolor=”#ECF5FF” text=”#000000″>
<%

‘liste tablosuna ilgili alanları gir
sqlString = “INSERT INTO liste ” &_
“( KitapAdi, YEvi, ” &_
“Fiyati ) VALUES ( ” &_
” ‘” & KitapAdi & “‘, ” &_
” ‘” & YEvi & “‘, ” &_
” ‘” & Fiyati & “‘)”
Con.Execute sqlString

‘ayrinti tablosuna ilgili alanları gir
sqlString2 = “INSERT INTO ayrinti ” &_
“( Yazari, Aciklama ) VALUES ( ” &_
” ‘” & Yazari & “‘, ” &_
” ‘” & Aciklama & “‘)”
Con.Execute sqlString2

%>

<table width=”100%” border=”0″ align=”center”>
<tr>
‘Eklenen kaydın adını göster.
<td><font color=”#CC3300″><b><%=KitapAdi%></b></font> kaydedildi</td>
</tr>
</table>

</body>
</html>

AspHttp ile başka web sitelerinden bilgi alımı 

AspHttp şuanda başka sitelerden bilgi almak için kullanılan
bileşenlerin arasında benim en iyisi olarak gördüğüm bir bileşendir.
AspTear ve XmlHttp ile başka web istelerinden bilgi alımı yapılabilir ama
kullandığınız Server’da AspTear veya XmlHttp yoksa ama AspHttp varsa işte size çözüm:
AspHttp’nin kullanımına geçmeden AspHttp’nin kurulumuna bir gözatalım.

AspHttp’yi http://www.serverobjects.com/comp/asphttp3.zip adresinden indirebilirsiniz.
AspHttp bileşeni deneme sürümüdür. AspHttp ile ilgili düşünceleriniz olumlu ise
bileşeni kullanabilmeniz için satın almanız gerekiyor.

AspHttp’yi kullanabilmeniz için asphttp3.zip içerisindeki “Asphttp.dll” dosyasını register etmeniz gerekmektedir. asphttp3.zip dosyasının içerisinde bulunan “Asphttp.dll” dosyasının Windows ‘un sistem klasörüne kopyalayınız (NT için ‘winntsystem32′, Win9x için ‘WindowsSystem’). Daha sonra “Başlat/Start” menüsünden “çalıştır/Run” menüsünü seçiniz. Açılan ufak pencereye “regsvr32 asphttp.dll” yazıp “Tamam” ‘ı tıklayınız. Bu sayede register işlemimiz gerçekleşecektir.

AspHttp ‘nin Kullanımı:

ısterseniz AspHttp ile istediğiniz web sitesinin tamamını (resimler hariç) gösterim yapabilirsiniz.

AspHttpHTM.Asp
<%
Server.ScriptTimeout = 240
‘Bağlantımızı Kuralım
Set HttpObj = Server.CreateObject(”AspHTTP.Conn”)
HttpObj.Url = “http://www.microsoft.com”
rem HttpObj.Port = 80
rem HttpObj.TimeOut = 80
HttpObj.FollowRedirects = true
HttpObj.RequestMethod = “GET”
HttpObj.UserAgent = “Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)”
strResult = HttpObj.GetURL

‘Sayfamızı Yazdılarım…
Response.Write strResult
Response.Write “<blockquote><hr>URL is now: ” & HttpObj.URL
Response.Write “<hr><pre>” & HttpObj.Headers & “</pre>”

‘Bileşenimizin Kayıtlı Olup Olmadığını öğrenelim…
Response.Write “<hr>”
strRegName = HttpObj.RegisteredUser
if Left(strRegName, 5) <> “Unreg” then
Response.Write “Bileşenin Kayıtlı Olduğu ısim: ” & strRegName & “<br>”
else
Response.Write “Bileşen Kayıtlı Değil.<br>”
end if
%>
‘AspHttpHTM.Asp Bitti

AspHttp ile yapabileceğimiz diğer bir işlem ise verilen web sitesi adresindeki tüm linkleri
listeleyebilmektir.

ASpHttpList.Asp

<html>
<body>
<%
Server.ScriptTimeout = 240
‘Bağlantımızı Kuralım
Set HttpObj = Server.CreateObject(”AspHTTP.Conn”)
HttpObj.Url = “http://www.genusa.com/asp/tools.html”
rem HttpObj.Port = 80
rem HttpObj.TimeOut = 80
HttpObj.RequestMethod = “GET”
HttpObj.UserAgent = “Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)”
strResult = HttpObj.GetURL

‘Linklerimizi Listeleyelim…
Response.Write “<h2>A HREF Listesi</h2>”

varHREFArray = HttpObj.GetHREFs

intHREFArrayLimit = UBound(varHREFArray) -1
For I = 0 to intHREFArrayLimit
Response.Write varHREFArray(I) & “<br>” & VBCrLF
Next
%>
‘ASpHttpList.Asp Bitti
Bu bileşenin diğer bir avantajı başka web sitelerinden istediğimiz satır veya bilgiyi alabilmektir. Buna bir örnek olarak TR.Net sitesinden hava durumunu nasıl alabileceğimizi bir örnekle gösterelim:

Hava.Asp
<%
‘Bağlantımızı Kuralım
set HttpObj = Server.CreateObject(”AspHTTP.Conn”)
HTTPObj.Url = “http://www.tr.net”
odunc = HTTPObj.GetURL

‘Sayada Ankara nın yerini belirleyelim.
yer = Instr(1,odunc,”Ankara”)
ankara = Mid(odunc,yer+89)
son = Instr(1,ankara,”<”)
son = son - “1″
‘Ankara nın HavaDurumunu öğrenelim
ankara = Mid(odunc,yer+89,son)

‘Sayada ıstanbul un yerini belirleyelim.
yer = Instr(1,odunc,”ıstanbul”)
istanbul = Mid(odunc,yer+103)
son = Instr(1,istanbul,”<”)
son = son - “1″
‘ıstanbul un HavaDurumunu öğrenelim
istanbul = Mid(odunc,yer+103,son)

‘Sayada ızmir in yerini belirleyelim.
yer = Instr(1,odunc,”ıstanbul”)
izmir = Mid(odunc,yer+103)
son = Instr(1,izmir,”<”)
son = son - “1″
‘ızmir in HavaDurumunu öğrenelim
izmir = Mid(odunc,yer+103,son)
%>
<html>
<head><title>AspHttp ile TR.Net ‘ten HavaDurumu</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
<style>
table {font-family: verdana; font-size: 7pt};
</style>
</head>
<body>
<table border=”0″>
<tr><td>Ankara</td><td><%=ankara%></td></tr>
<tr><td>ıstanbul</td><td><%=istanbul%></td></tr>
<tr><td>ızmir</td><td><%=izmir%></td></tr>
</table>
</body></html>
‘Hava.Asp Bitti