******************************************************************************************************************************************
Bu Sitedeki Tüm Yazılar Ücretsizdir. Sadece Sizden İstediğimiz "Allah Bu Siteyi Hazırlayandan Razı Olsun" Amin... Demenizdir.
************************************************************************************************************************************ www.odeveson.blogspot.com adresindeki yazı ve makalelerin Kaynak göstermeksizin Tamamı veya Bir Kısmının KOPYALANMASI YASAKTIR.
BİLGİSYAR etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
BİLGİSYAR etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
8 Haziran 2008 Pazar Gönderen admin 0 yorum

ÇALIŞTIR KISAYOL KOMUTLARI

compmgmt.msc Bilgisayar yönetimini açar.
clipbrd.exe Pano işlemcisini açar.
cleanmgr.exe Disk temizleyiciyi açar.
ciadv.msc Dizin yöneticisini açar.
charmap.exe Karakterleri ayarlamanızı sağlar.
calc.exe Hesap makinesini açar.
diskmgmt.msc Disk yönetimini açar.
devmgmt.msc Aygıt yöneticisini açar.
dfrg.msc Disk birleştiriciyi açar.
eudcedit.exe Karakter imal edebilirsiniz.
appwiz.cpl Program ekle kaldırı açar.
access.cpl Erişebilirlik seçeneklerini açar.
accwiz.exe Erişebilirlik sihirbazını açar.
desk.cpl Görüntü özelliklerini açar.
eventvwr.exe Olay görüntüleyicisini açar.
freecell.exe İskambil oyununu açar.
fsmgmt.msc Paylaşılan klasörler menüsünü açar.
hdwwiz.cpl Donanım ekleme sihirbazını açar.
iexpress.exe Setup programını açar.
inetcpl.cpl İnternet özelliklerini açar.
intl.cpl Bölge ve dil ayarlarını açar.
joy.cpl Oyun kontrollerini açar.
magnify.exe Büyüteçi açar.
main.cpl Fare özelliklerini açar.
mmsys.cpl Ses ayarlarını açar.
mspaint.exe Paint programını açar.
narrator.exe İngilizce ekran okuyucusunu açar.
ntbackup.exe Yedekleme sihirbazını açar.
nusrmgr.cpl Kullanıcı hesaplarını açar.
osk.exe Ekran klavyesi açar.
telnet.exe Telnet'i açar.
spider.exe Kağıt oyunu açar.
gpedit.msc Grup poliçesi açar.
msconfig.exe Sistem ayarlarını açar.
verifier.exe Sürücü monitörünü açar.
drwtsn32.exe Sorun tanıma aracını açar.
dxdiag.exe DirectX sürümünüzü öğrenmenizi sağlar.
mobsync.exe Senkronizasyon sağlar.
mplay32.exe Media Player'ın çok basit bir halini açar.
odbcad32.exe Database işleme sağlar.
packager.exe Obje paketleyiciyi açar.
perfmon.exe Sistem monitörünü açar.
progman.exe Masaüstü yöneticisini açar.
rasphone.exe Erişim defterini açar.
shrpubw.exe Network paylaşımı bilgisini açar.
sigverif.exe İmza denetleyicisini açar.
sysedit.exe Sistem yöneticisini açar.
syskey.exe Şifre databaseini açar.
sndrec32.exe Ses kaydedicisini açar.
timedate.cpl Tarih ayarlama penceresini açar.
tourstart.exe Windows XP turu başlatır.
winchat.exe Windows içinde bulunan chat programını açar.
winmine.exe Mayın Tarlası oyununu açar.
write.exe WordPad'i açar.
wupdmgr.exe Windows güncelleştirme penceresini açar.
explorer.exe Windows Gezgini'ni açar.
powercfg.cpl Güç seçeneklerini açar.
rasphone.exe Ağ bağlantılarını açar.
regedt32.exe Windows Kayıt Düzenleyicisi'ni açar.
regedit.exe Windows Kayıt Düzenleyicisi'ni açar.
sndvol32.exe Ses ayarlarını yapmanızı sağlar.
notepad.exe Not defterini açar.
taskmgr.exe Görev yöneticisini açar.
compmgmt.msc - Bilgisyar Yöneticisi
devmgmt.msc - Aygıt Yöneticisi
diskmgmt.msc - Disk Yöneticisi
dfrg.msc - Disk birleştirme
eventvwr.msc - Olay Görüntülüyicisi
fsmgmt.msc - Paylaşılan Dosyalar
gpedit.msc - Grup Poliçeleri
lusrmgr.msc - Yerel Kullanıcılar ve Gruplar
perfmon.msc - Performans Monitörü
rsop.msc - Poliçe Sonuçarını Ortaya koymak
secpol.msc - Yerel Güvenlik Ayarları
services.msc - Çeşitli Servisler
msconfig - Sytem Bilgisi Hizmetleri
regedit - - Kayıt Defteri Editörü
msinfo32 - Sistem bilgisi
sysedit - Sistem Şekli Editörü
win.ini - Windows Yükleme Bilgisi
winver - Şu anki Windows Sürümünü Görüntüle
mailto: - Varsayılan E-mail alıcısı Görüntüle
cmd - Komut satırını çalıştır

Etiketler:
Gönderen admin 0 yorum

INTERNET AĞLARI




GİRİŞ
Burada ele aldığım konular ayrıntılı olarak LINUX altında "NET-3-HOWTO" (Copyright (c) 1997 Terry Dawson) adlı belgede İnglizce olarak yazılmıştır. Benim yaptığım bu belgeyi Türkçe'ye çevirmek. Buradaki bilgilerde daha çok LINUX işletim sistemindeki ayrıntıları anlatır, ama iyi bir programcı (C dili ve UNIX biliyorsa) bu bilgileri kullanarak diğer UNIX işletim sistemleride benzeri tanımlamaları kolaylıkla yapabilir. Ben bu bölümde adı geçen bazı programları ve komutları başka UNIX ortamlarında derledim, denedim ve çalıştırabildim. Programları çalıştırırken biraz kod üzerinde değişiklik yapmak gerekebiliyor. Ama emek harcanmadan sonuç elde edilmez ki...




INTERNET İÇİN KENDİ AĞINIZI KURMAK

Önce bilgisayarınızda kullanacağınız araçlara ve "fire-wall" yazılımına ihtiyacınız var. Bu araçlar ya aldığınız bilgisayarın işletim sistemi ile gelmiştir, ya da siz bunları INTERNET üzerinden sağlamışsınızdır. Benim gördüğün kadarı ile Türkiye'deki en iyi ve en son bilgi sunsite.bilkent.edu.tr sunucusunda var. Ama isterseniz ODTÜ ve EGE Üniversitesi sunucularından da gereken yazılımı alabilirsiniz.

GEREKLİ AĞ ARAÇLARI

Bu araçlar, sisteminizin Ağ bilgilerini (parametrelerini) düzenlediğiniz yönlendirmeyi (routing) yaptığınız programlardır.

INTERNET ADRESLERİ

Bugün için INTERNET adresleri 4 byte uzunluğunda bir sayıdır (Bu sayının 6 byte uzunluğunda olması çalışmaları devam etmektedir). Bu sayıyı kolay hatırlamamız ve söyleyebilmemiz için "noktalı tamsayı kavramı" geliştirilmiştir. Bu sayıdaki her byte için kullanılan 0-255 değeri ayrı ayrı aralarına nokta konarak yazılınca belirttiğimiz noktalı tamsayı kavramı çıkar. Bu kavramda sayı sıfır değilse soldaki sıfırla yazılmaz ve okunmaz.

INTERNET kavramlarına göre ağdaki her bilgisayarın noktalı tamsayılarla gösterilen bir adresi vardır ve bu adres tekildir. Bu kavramı biraz genişletip her ağ donanımı için bir adres kullanmak gerekir diyebiliriz. Böylece bir bilgisayarda seri uçtan bağlantı olanağı varsa bu seri uç için bir adres, iki ethernet kartı varsa, her ethernet için ayrı bir adres gerekir. Biz bu adreslere IP adresi adını veriyoruz.

Bir yerel ağda bulunan bilgisayarların IP adreslerinin bir bölümü (2 ayda 3 byte'lık bir bölümü) ortaktır. Ortak olan adreslere yerel ağ adresi ya da "yöre" (domain) adresi diyoruz. Kalan bölümüne ise adresin bilgisayar bölümü diyoruz. O yerel ağdaki ortak adres bilgisinin ilki her zaman yerel ağın adresi olarak kabul edilir. Ağ maskesi ise o ağa gelecek mesajlardan yalnız o ağa ait olanları almak için kullanılan maskeye verilen addır. Bir ağ içindeki tüm bilgisayarlara mesaj göndermek için Yayım Adresi kullanılır ve bu adres ağ için tanımlanmış bilgisayar adreslerinin en büyüğüdür.

Örneğin :

Bilgisayar Adresi 192 .168 .110 .23

Ağ Maskesi 255 .255 .255 .0

Ağ (Yöre) Bölümü 192 .168 .110 .

Bilgisayar Bölümü .23



Yerel Ağ Adresi 192 .168 .110 .0

Yayım Adresi 192 .168 .110 .255



Bir yerel ağın INTERNET için bir anlam taşıyabilmesi ancak bir ağ adresi, bir yayım adresi ve en az iki bilgisayar adresi olması gerekir. INTERNET ortamında ardaşık en az dört adres bir ağ oluşturur. Bu sayı iki sayısının katları olarak artar (4, 8, 16, 32 v.b.)

Ağ maskesi ile mantıksal VE işlemine sokulan bir adres sonunda bulunduğu ağın adresini verir.

Ağ içindeki tüm bilgisayarlar kendi adresleri dışında bir de yayım adresine gelen mesajları dinlerler. Onun için yayım adresi ağ içindeki en büyük IP adresi olarak tanımlanır. Bazı yönlendirme mesajları ve uyarı mesajları yayım adresini kullanır. Böylece ağ içindeki tüm bilgisayarlar bu mesajı aynı anda alabilirler. Bazen yayım adresi olarak ağ adresi kullanılabilir. Aslında yayım adresinin ne olduğu pek önemli değildir. Ağ maskesi sınırları içinde kalmak ve ağ içindeki tüm bilgisayarlarda aynı tanımlanmak koşulu ile herhangi bir IP olabilir.

Eskiden kalan bir kullanım biçimine göre IP adresleri ağlara ve sınıflara ayrılmıştır. Bu sınıflar ve ağlar aşağıdaki tabloda gösterilmiştir :

Ağ Sınıfı Ağ Maskesi Ağ Adresi

A 255.0.0.0 0.0.0.0 - 127.255.255.255

B 255.255.0.0 128.0.0.0 - 191.255.255.255

C 255.255.255.0 192.0.0.0 - 223.255.255.255

Multicast 240.0.0.0 224.0.0.0 - 239.255.255.255

Hangi tür adres kullanacağınız aslında sizin ne yapmak istediğinize göre değişir. Bazen yapacağınız işleme bağımlı olarak yukarıdaki adreslerin bir dolu karışımını kullanabilirsiniz.

Bir bilgisayarı mevcut bir yerel ağa bağlamak için gerekli olan adresler :

Bilgisayar IP Adresi Ağ için IP adresi Yayım IP adresi Ağ Maskesi Eşik - Router (Gateway) adresi Yörenin Ad Sunucu Adresi

Yeni bir ağ kuruyorsanız ve bu ağı INTERNET ortamına hiç bağlamayacaksanız :

Aslında ağınızı INTERNET ortamına hiç bağlamayacaksanız herhangi bir adresi seçebilirsiniz. Ama aşağıdaki tabloda bulunan adresleri kulanırsanız, bu adresler INTERNET ortamında tanımlı olmadığından, dah güvenli bir yerel ağ kurmuş olursunuz.

Bu tabloda yer alan adresler RFC1697 belgelerinde belirtilmiştir.

ÖZEL AĞLAR İÇİN AYRILMIŞ ADRESLER

Ağ Sınıfı Ağ Maskesi Ağ Adresi

A 255.0.0.0 10.0.0.0 - 10.255.255.255

B 255.255.0.0 172.16.0.0 - 172.31.255.255

C 255.255.255.0 192.168.0.0 - 192.168.255.255

Önce ağınızın büyüklüğünü belirlemek daha sonra bu ağ için hangi adres sınıflarını kullanacağınızı seçmek sizin ilk tasarım işiniz olacaktır.

AĞ BİLGİSİ VE KOMUTLARI NEREYE KONULMALI (TANIMLAMA)

Tüm UNIX ortamlarında kernel yüklendikten sonra ilk olarak 'init' programı çalışır. Bu program işlemleri nasıl yapacağını /etc/inittab kütüğündeki bilgilerden öğrenir.

Genelde inittab kütüğünde aşağıdaki gibi bir satır bulunur :

si::sysinit:/etc/init.d/boot

Bu satır işletim sisteminin belleğe yüklenmesi, ilk anda çalışacak programların belirlenmesi için kullanılır. Bu bir "shell" yazılımıdır. Bu kütük MS-DOS ortamındaki AUTOEXEC.BAT gibidir.

Aynı mantıkla yazılmış bakşa "shell" yazılımları da vardır. Bunlardan bazıları ağı tanımlamak için kullanılır.

Aşağıdaki tablo çeşitli Linux dağıtıcılarının kullandığı "shell" yazılımlarının yerlerini gösteren bir örnektir. Diğer UNIX sistemleri için de aynı bilgiler benzer yollarda bulunmaktadır.

Distrib. Interface Config/Routing Server Initialisation

Debian /etc/init.d/network /etc/init.d/netbase
/etc/init.d/netstd_init
/etc/init.d/netstd_nfs
/etc/init.d/netstd_misc

Slackware /etc/rc.d/rc.inet1 /etc/rc.d/rc.inet2

RedHat /etc/sysconfig/network-scripts/ifup- /etc/rc.d/init.d/network

Pek çok UNIX dağıtıcısı bu tür "shell" yazılımlarını ayarlamak için hazır programların dağıtımını yapmışlardır. Kullanıcı yalnız bu programları çalıştırarak "shell" yazılımlarının içine girmeden ağ ayarlamalarını yapabilir.




KENDİ AĞ ARAYÜZLERİNİZİ YARATMA

Pekçok UNIX ortamında ağ donanımlarına ilişkin çevre birimi tanımı /dev yolu altında yer alır (Linux hariç). Linux ortamında dinamik olarak ağ arayüzü çevre birimi yaratılır, ayrıca /dev altında tanım gerekmez.

Çoğunlukla çevre birimi tanımı işletim sistemindeki donanım arayüzü tarafından otomatik olarak yaratıldığından ve donanıma bağlanmış olduğundan ayrıca bir işlem yapmak gerekmez. Tabi ilk işlemde bu donanım arayüzü kernel (çekirdek) yazılıma eklenmiş olmalı ve arayüz çalışır durumda bulunmalıdır.

Bazı koşullarda (slip ya da ppp için geçerlidir) ağ çevre birimleri bir kullanıcı programı tarafından oluşturulur. Bir dizi çevre birimi numaralaması yapılır ancak bu çevre birimleri sistem başlarken otomatik olarak üretilemez. Bunun en büyük nedeni, sistem çalışırken, slip ve ppp çevre birimlerinin sayısının kullanıcı sayısına göre değişiklik göstermesidir.

BİR AĞ ARAYÜZÜNÜ HAZIRLAMA

Burada söylemek istediğimiz, donanıma ve diğer parametrelere göre ağ bilgilerini sisteme tanıtma işlemidir. Bu işlem için en çok kullanılan komut ifconfig (interface configure) komutudur.

Çoğu zaman aşağıdakine benzer bir komut kullanılır :

# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

Burada bir ethernet arayüzü 192.168.0.1 adresi ve 255.255.255.0 ağ maskesi ile sisteme tanıtılmıştır. Ve bu arayüz aktif olarak çalışmaya başlayacaktır. Bu örnekte ağ adresi ve yayım adresi kullanılmamıştır. ANcak programlar ve çekirdek kod IP adresinin tipinden belirtilmeyen adres yerine en uygun adresi tanımlar. Bu örnekte ağ adresi (C sınıfı adres olarak) 192.168.0.0 biçiminde, yayım adresi ise 192.168.0.255 biçiminde belirlenir.

ifconfig komutunun bir dolu parametresi vardır. Her UNIX ortamında başka parametreler, kullanılan donanıma ve arayüze göre değişik işlevler yapabilir. Bu nedenle her UNIX ortamında bu komutun dökümanı incelenmelidir. Biz burada en çok kullanılan parametreleri anlatmaya çalışacağız :

up
Bu seçenek bir arayüzü çalışır duruma getirir.
down
Bu seçenek bir ayaüzün çalışmasını durdurur.
-arp
Bu seçenek adres çözümleme protokolunun kullanılmasını ya da kullanılmamasını sağlar.
· -allmulti
Bu seçenek gelen paketlerin çevre birimi tarafından algılanıp algılanmamasını sağladığı için önemlidir. Aslında bir çevre birimi tanımlanan adres dışındaki paketleri algılamaz. Ancak tcpdump ve snooper tipi programlar için tüm paketlerin algılanması gerekir.

mtu N
Bu seçenek bu çevre birimi için Metrik Birim tanımlamaya yarar. (Metrik Birim IP paketlerinin boyu ile ilgili bir parametredir).
netmask addr
Bu seçenek ağ için maske tanımlamakta kullanılır.
irq addr
Bu parametre bazı ağ donanımları için geçerlidir ve donanımın IRQ adresini belirlemek için kullanılır.
-broadcast addr
Bu parametre yayım adresini tanımlamak için kullanılır.
-pointopoint addr
Uç uca bağlanmış bilgisayarlarda diğer uçtaki bilgisayarın adresini tanımlamak için kullanılır (slip ya da ppp bağlantılar için önemli olabilir).
hw
Bazı ağ donanımlarının donanım adreslerini tanımlamak için kullanılır.
Bir ifconfig komutunu hertür ağ arayüzü tanımlamak için kullanabilirsiniz. Bazı programlar (pppd, dip gibi) kendi ağ arayüzlerini otomatik olarak tanımlayabildiklerinden ayrıca ifconfig komutu kullanmak gerekmez.




AD ÇÖZÜCÜSÜNÜ TANIMLAMA

UNIX ortamında ad çözücü noktalı tamsayı tanıma göre hazırlanmış IP adresleri yerine kullanılan bilgisayar adlarını (bodrum.yore.com.tr gibi) bilgisayarların anladığı IP adreslerine çevirme işlemini yapan programlardır.

BİLGİSAYAR ADI NEDİR ?

Bu dökümanı okumak için bu sayfaya bağlandığınıza göre bilgisayar adlarına alışkın olmalısınız. Ancak arkasındaki mantık ilişkisini bilmeyebilirsiniz. Bu isimler nasıl üretilir ve nasıl IP adresi haline dönüştürülür bilmiyor olabilirisin. Burada bilgisayar adlarının nasıl bir mantığa göre hazırlanmış olduğunu anlatmaya çalışacağız.

Internet yöre adları bir sınıf ya da bir aileye verilen addır. Bir yöre kendi içinde alt yörelere bölünebilir. En üst düzey yöre adı alt yörelere bölünmemiş olan addır. Türkiye için en üst düzey yöre adları : COM : Ticari Kurumlar
EDU : Eğitim Kurumları
GOV : Devlet Kuruluşları
MIL : Askeri Kuruluşlar
ORG : Diğer Organizasyonlar
Ülke Kodu : İki hane ülke kodu, o ülkeyi belirtir. Türkiye için "tr" tanımlanmıştır.

Bu üst düzey yörelerin alt yöreleri vardır. Ülke adına göre düzenlenen yöre adları yukarıda sıralanan alt yörelere bölünür. Ülke kodu olmayan üst düzey yöre adları ABD kuruluşlarını belirtir.

Üst düzey sınıflamadan sonra gelen yöre adı genelde kuruluşun kendi adıdır. Bu tanımın altındaki yöre adı ayrımları kuruluşların bölümlerine göre düzenlenebilir.

En soldaki ad o bilgisayarın tekil adıdır. Bu ad genelde "hostname" olarak adlandırılır. Bilgisayar adının sağındaki yöre adının tamamı ise açıkça tanımlanmış yöre adı olarak geçer `Fully Qualified Domain Name'.

Bu sayfaların bulunduğu bilgisayarın adını açıkça yazınca "bodrum.yore.com.tr" olduğunu görürsünüz. Burada bilgisayarın adı "bodrum". Açık yöre adı "yore.com.tr" olarak belirtilmiştir. "yore" firmanın adı, "com.tr" ise Türkiyede faaliyet gösteren ticari bir kurum olduğunu belirtir.

NE TÜR BİLGİYE GEREKSİNİM VARDIR.

Bilmeniz gerekenen önemli özellik, bilgisayarınızın bağlandığı yöre adının açık olarak ne olduğudur. Adres çevirim yazılımı IP adresini yöre adı sunucusundan (Domain Name Server) alır. Eğer varsa yerel ad sunucunun IP adresinin bilmeniz gerekir. Böyle bir adres yoksa en yakın ad sunucunun IP adresinin bilmelisiniz. Türkiye için en yakın ad sunucu adresini bulamadı iseniz ODTU ve TURNET tarafından tanımlanmış ad sunucuları yazabilirsiniz. Ancak bu adresleri kullandığınızda ilk bağlantılarınız çok yavaş olacaktır. Kendi yörenizdeki ad sunucunun IP adresini kullanmanız en doğrusudur.

Üç değişik kütükte düzeltme yapmanız gerekir. Bunlar sırası ile :

/etc/resolv.conf

Ad çözücü kodlama için en önemli kütüktür. Yapısı oldukça basittir. Her satırında bir anahtar kelime olan basit bir metin kütüğüdür. En çok kullanılan anahtar kelimeler :

domain : Bu komut yerel yöre adını belirtir.

search : Bu komut bilgisayar adına eklenerek adres çözümlemesi yapılacak yöre adlarını belirtir.

nameserver : Açık adlara ilişkin IP adreslerinin çözümünde kullanılacak ad sunucuların IP adreslerinin tanımlandığı satırdır.

Örnek bir resolv.conf aşağıdaki satırlardan oluşur :

domain yerel.yore.com.tr
search yore.com.tr yerel.yore.com.tr
nameserver 195.174.26.15
nameserver 195.174.26.1

Bu örnekte yöre adı verilmemiş bilgisayar adlarının sonuna yöre adı ekleneceği belirtilmiştir. Ayrıca iki ad sunucu belirtilmiştir. Ad sunucular, bilgisayar adının çözümlenmesinde kullanılır.

/etc/host.conf

Bu kütük, ad çözücü kodlamanın ad çözüm biçimini tanımlamaya yarayan bilgilerden oluşur. Pekçok koşul için aşağıdaki satırlar sorunlarınızı çözümler :

order hosts,bind
multi on

Bu tanım ad çözümleyicisine bir adı çözümlerken önce /etc/hosts adlı kütüğe bakmasını söyle. Buradan bilgi alınamazsa ad sunucuya bağlanılır. Bir bilgisayar adı için bu kütükte bulunan tüm geçerli IP numaralarının alınmasını sağlar.

/etc/hosts

Bu kütüğe yerel bilgisayarın adını ve IP numarasını yazarız. Eğer bir bilgisayarın adını buraya yazdıysanız IP adresini almak için ad sunucuya sorgulama yapmaya gerek olmaz. Bunun en kötü yanı bu kütüğün her zaman güncel tutulmasını sağlamak gerektiğidir. İyi düzenlenmiş bir yerel ağda bu kütükte yalnız :

# /etc/hosts
127.0.0.1 localhost loopback
192.168.0.1 this.host.name

satırların bulunmalıdır.

İlk satırda belirtildiği gibi bir satıra birden çok bilgisayar adı yazabilirsiniz.

Loopback arayüzünü tanımlama.

Kendi bilgisayarınıza bağlantı yapabilmeniz için gereken arayüz tanımına "loopback" tanım denir. Kendi bilgisayarınızda kendinize bağlantı yapmak istediğinizde (program denemeleri gibi) yerel ağdaki başka bilgisayarları etkilemeden çalışmanız sağlanır. Tanım olarak bu adres 127.0.0.1 olarak belirtilmiştir. Diğer bir deyimle hangi bilgisayarda olursanız olun 127.0.0.1 için telnet bağlantısı kurmak istediğinizde kendi bilgisayarınıza bağlantı kurarsınız.

"loopback" arayüzünü tanımlamak için aşağıdaki komutları kullanmak yeterlidir :

# ifconfig lo 127.0.0.1
# route add -host 127.0.0.1 lo




YÖNLENDİRME (ROUTE KOMUTU)

Yönlendirme çok geniş bir konudur. Bu konuda sayfalarla yazı yazılabilir. Bir çoğunuzun basit yönlendirme komutlarına gereksinimi vardır. Bir kısmınızın hiçbir yönlerdirmeye gereksinimi yoktur. Biz burada oldukça basit yönlendirme gereksinimlerini ele alacağız.

IP yönlendirmesi nedir ?

IP yönlendirmesi bir bilgisayarın IP data gram mesajlarını çoklu bir ağda nereye yönlendirmesi gerektiğini belirleme işlemi olarak tanımlanabilir.

Bu tanımı bir örnekle anlatmaya çalışalım. Bir işyerindeki bir Router (Yönlendirici) düşünelim. Bu alete birden çok yerel ağ bağlı olsun. Bu alet PPP ile INTERNET ortamına bağlansın, bir başka PPP bağlantı ile uzakta bir yerleşime bağlantısı olsun. Bu alet bağlantılardan birinden bir datagram aldığında, yapacağı işlem bu mesajı hangi bağlantıya yönlendireceğini bulmasıdır. INTERNET bilgisayarlarının üç değişik bağlantısı bulunur. Biri yukarıda belirttiğimiz "loopback" bağlantı, ikincisi bağlı olduğu yerel ağ, sonuncusu ise PPP ya da SLIP ile bağlandığı INTERNET ortamı.

Bu durumda yönlendirme nasıl yapılır. Her bilgisayar kendi içinde yönlendirme tabloları tutar. En basit koşulu ile bu tabloda üç alan bulunur. İlki gideceği adres, ikincisi arayüzün adı, sonuncusu ise datagramı başka bilgisayarlara iletecek olan bilgisayarın IP adresidir.

Bu tabloyu görmek için kullanılacak komut :

# netstat -rn

olabilir.

Yönlendirme işlemi oldukça basittir. Bir datagram alındığında gideceği adres incelenir. Yönlendirme tablosunda bu adrese en uygun olan satır seçilir ve datagram burada belirtilen adrese, yine burada belirtilen arayüz üzerinden yönlendirilir. Eğer eşik (gateway) adresi tanımlı ise datagram bu adresin bulunduğu arayüze iletilir. Eğer eşik adresi yoksa iletilen arayüzde gideceği adres var olduğu kabul edilir.

Bu tabloda değişiklik yapmak, kernel bilgilerine değişikliği işlemek için özel bir komut kullanılır. Bu komuta "route" adı verilir.

Basit bir örnek. Ethernet yerel ağınız olsun. Ve bu ağda C sınıfı ağ adresi 192.168.1.0 olarak tanımlanmış olsun. Sizin kullanımınız için tanımlanan IP adresi 192.168.1.10 olarak verilmiş olsun ve 192.168.1.1 adresli router INTERNET'e bağlantı ucunuz olarak size verilmiş olsun. Yapacağınız işlemler :

Önce ethernet arayüzünü tanımlamanız gerekir :

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up

Yönlendirme tablosuna eklemeniz gereken bilgi ise 192.168.1.* adresi ile başlayan tüm data gram bilgilerinin ethernet arayüzüne yönlendirilmesi gerektiğidir. Bunun için aşağıdaki komutu kullanmanız gerekir :

# route add -net 192.168.0.0 netmask 255.255.255.0 eth0

Burada "-net" seçeneğini "route" komutu ile kullanmak gerekir. Burada ağ yönlendirmesi yapıldığı belirtilir. Diğer seçenek ise "host" yönlendirmesi olup yalnız bir IP adresine yönlendirme yaparken kullanılır.

Bu yönlendirme sizinle aynı ağı paylaşan tüm bilgisayarlarla bağlantı kurmanızı sağlar. Ancak sizin ethernet ağınızda olmayan diğer bilgisayarlarla bağlantı için bu komut yetersiz kalır.

Her tür bilgisayar ağı için bir yönlendirme komutunu tabloya eklemek çok zor olacağından bu işlem için bir kaçamak yöntem kullanılır. Buna "default" yönlendirme adı verilir. Bir adres için en zayıf uyum "default" yönlendirmede bulunur. Ancak bir adres için daha başka bir tanım daha uygun ise yönlendirme o adrese yapılır. "default" yönlendirme kısaca başka seçenek yoksa buraya yönlendirilecek anlamını taşır.

# route add default gw 192.168.1.1 eth0

"gw" seçeneği route komutuna bir sonraki IP adresi bu satıra uygun datagram bilgilerinin gönderileceği adrestir bilgisini tanıtır.

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
# route add default gw 192.168.1.1 eth0
olur.

Eğer kendi bilgisayarınızdaki ağ ile ilgili "rc" kütüklerine bakacak olursanız en az biri yukarıdaki tanıma uygun bir yapıdadır. Bu örnek çok genel bir yönlendirme kuralıdır.

Şimdi daha karmaşık bir yönlendirme işlemine bakalım. Şimdi Router birimininde yönlendirme yaptığımızı varsayalım. Router için bir PPP bağlantısı ve üç ethernet ağına bağlantı olsun. Bu durumda bizim Router tanımı aşağıdaki gibi birşey olur :

# route add 192.168.1.0 netmask 255.255.255.0 eth0
# route add 192.168.2.0 netmask 255.255.255.0 eth1
# route add 192.168.3.0 netmask 255.255.255.0 eth2
# route add default ppp0

Bu ağlarda yer alan iş istasyonları yukarıda belirtilen en basit yönlendirme tablolarını kullanabilir. Burada mesajları ethernet ağlarına dağıtmak Router biriminin görevidir.

"default" parametresinde "gw" tanımı bulunmaması çok doğaldır. Çünkü SLIP ve PPP tipi seri uç bağlantılarında bu bağlantının her iki ucunda da bir tane bilgisayar olduğundan, hattın öteki uçundaki bilgisayarı tanımlamak gerekmez.

"ethernet", "tokenring" ve "arcnet" gibi diğer ağlardaki tanımlarda "gw" belirtmek zorunludur. Çünkü ağ içinde birden çok bilgisayar vardır. Mesajın hangisine yönlendirileceği bilinmelidir.

O HALDE ROUTE PROGRAMININ GÖREVİ NEDİR ?

Yukarıda anlatılan ağlara ve route komutuna ilişkin örnekler eğer gönderilecek adrese bir çıkış varsa çok uygun bir yöntemdir.

Elle yapılan yönlendirme (static routing) işlemi yönlendirme yapan bilgisayarda sorun olduğunda datagram mesajlarının doğru yere gitmesi için yeniden bir dizi komut kullanmayı zorunlu kılar. Doğal olarak bu işlem oldukça yavaş ve pratik olmayan bir yöntemdir. Hattın düşmesi, bilgisayarların bozulması gibi olasılıklarda dinamik yönlendirme protokolları kullanılmalıdır.

En çok kullanılan dinamik yöntendirme protokolları RIP (Routing Information Protocol) ve OSPF (Open Shortest Path First Protocol) protokollarıdır. RIP küçük ölçekli ağlar için çok kullanışlıdır. OSPF ise daha büyük ve karmaşık ağlar için yeni ve kullanışlı yöntemdir.

Bu protokolların kullanıldığı programlar 'routed' ve 'gated' programlarıdır. 'routed' RIP için, 'gated' ise RIP ve OSPF için kullanılır.

Dinamik yönlendirme işlemlerine uygun bir örnek aşağıdaki çizimde açıklanmıştır :



Burada üç tane Router birimi sırası A, B, C vardır. Her birine C sııfı bir ethernet ağı bağlanmıştır (ağ maskesi 255.255.255.0). Aynı zamanda her Router diğer Router birimlerine PPP ile bağlanmıştır. Bu ağ PPP bağlantılarla bir üçgen gibi çalışır.

Router A üzerindeki yönlendirme tablosu aşağıdakine benzer :

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1

Bu yönlendirme tablosu A ile B arasındaki bağlantı kopmadığı sürece düzgün çalışır. Ancak bu bağlantı koptuğunda A ethernet ağındaki bilgisayarlar B ethernet ağındaki bilgisayarlarla bu yönlendirme tablosu yüzünden konuşamazlar. Ancak her iki ethernet ağı da C ethernet ağı ile hala konuşabilmektedir.

Eğer A, C ile konuşabiliyorsa, C de B ile konuşabiliyorsa neden A ile B konuşamasın ki. A datagramları C üzerinden B'ye gönderirse konuşabilirler. Yani dinamik olarak yönlendirme tablosu değişirse konuşabilirler. RIP protokolu bu tür sorunları dinamik yönlendirme ile çözmek için tasarlanmıştır. Her Router kendi üzerinde çalışan bir "deamon" programla kendi yönlendirme tablolarını duruma göre değiştirebilir ve bunu diğer Router birimlerine iletebilir. Bu tür ağları düzenlemek için aşağıdaki komutları kullanmak yeterlidir (Burada Router A için gereken komut verilmiştir).

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# /usr/sbin/routed

"routed" programı tüm çalışan ağ uçlarını otomatik olarak bulur ve buna göre kendi yönlendirme tablolarını düzenler.

Burada anlatılan dinamik yönlendirme işleminin en kısa ve kullanılabilir açıklamasıdır.

Dinamik yönlendirme ile ilgili önemli noktalar :

1. Sizin yapmanız gereken yalnız dinamik yönlerdirme protokolunu kullanan programı çalıştırmaktır.

2. Ağınızdaki değişiklikleri yönlendirme tablolarına otomatik olarak yansıtır.

3. RIP protokolu küçük ve orta büyüklükteki ağlar için uygun bir çözümdür.




AĞ SUNUCULARINI VE SERVİSLERİ TANIMLAMA

Ağ sunucuları ve servisleri kısaca ağ içindeki başka bilgisayarların bu sunucu hizmetlerini kullanması olarak adlandırılabilir. Uzak kullanıcı sunucu bilgisayara bir ağ bağlantısı kurar. Servis sunucu program "port"tan gelen mesajı kabul eder ve mesaja ilişkin programı çalıştırır. Ağ programları iki biçimde çalışır :

Yalnız Başına (Standalone)

Bu durumda program ağ protunu dinler, bağlantı geldiğinde bağlantıyı kurar ve port üzerinden servisi vermeye başlar. Program bellekte sürekli çalışır ve portu her zaman dinler.

inetd sunucusu tarafından çalıştırılarak

"inetd" özel bir ağ programı olup tanımlanan portların tümünü dinler. Bağlantı isteği olduğunda bu bağlantı için çalıştırması gereken programı belleğe yükler ve çalıştırarak servisi sunar. Bu işlem için gereken tanıtım kütüğü aşağıdaki parafgarflarda anlatılmıştır.

Burada düzenleme yapmamamız gereken iki önemli kütük vardır. Bulardan biri /etc/services diğeri ise /etc/inetd.conf kütükleridir. Birincisinde port numaralarına servis adları atanır (21 protu için ftp atamak gibi). İkincisinde inetd programı bir portu dinlerken bu porta gelen bağlantı mesajında hangi programı nasıl çalıştıracağını belirtmek içindir.

/etc/services

/etc/services kütüğü insanların anlayacağı port adları ile bilgisayarın anladığı port numarası arasındaki bağı tanımlayan bir veri tabanıdır. Yapısı oldukça basittir. Her satır boşluklarla ayrılmış üç ana bilgiden oluşur. Bu bilgi alanları kısaca :

adı port/protokol eşanlamlı_ad # açıklama

olarak tanımlanır.

Adı

Bir kelimelik port adı. Bu servisin adını belirtir.

port/protokol

Bu alan iki parçaya ayrılır.

port

port numarası, adlandırılan servisin numarasıdır. Pekçok ortak servis numarası RFC-1340 dokumanında anlatılmıştır.

protocol

Bu parça ya "tcp" ya da "udp" olarak tanımlanır.

Bilinmesi gereken önemli bir özellik 18/tcp port tanımı ile 18/udp port tanımı tümüyle birbirinden ayrı kavramlar olduğudur. Neden aynı port numarası kullanıldığı ise kısca şöyle tanımlanabilir : Bu servis hem "tcp" hem de "udp" için geçerlidir.

eşanlamlı_ad (aliases)

Bu servis için kullanılabilecek diğer adlar

"#"

işaretinden sonra yazılan tüm bilgi açıklama olarak kabul edilir.

Örnek bir /etc/services kütüğü

/etc/inetd.conf

Bu kütük inetd programı için işlem tanımlama kütüğüdür. İşlevi inetd programına bir hizmet için bağlantı isteği geldiğinde ne yapması gerektiğini belirtir. Burada ağ programlarının hangilerinin hangi hizmetler için çalışacağı ve nasıl çalışacağı söylenir. inetd programı buradaki tanıma göre programı belleğe yükler.

Yapısı oldukça basittir. Her atırı bir hizmet için tanımlanmış metin kütüğüdür. Bir satırdaki '#' işaretinden sonrası açıklama kabul edilir. Her satırda yedi bilgi alanı vardır. Bilgi alanları boşluklarla ayrılmıştır.

hizmet socket_tipi protokol değerler kullanıcı program_yolu program_parametreleri

Hizmet

kullandığınız bilgisayar için /etc/services kütüğündeki hizmet adlarından bir tanesidir.

socket_tipi

Gerçekli değerler "stream", "dgram" "raw", "rdm" ya da "seqpacket" olabilir. Bu değerler programın kabul ettiği mesaj türüne göre tanımlanır. (Ayrıntılı bilgi için socket_tipi konusuna bakın).

protokol

Burada tanımlanan protokol tipik olaak "tcp" ya da "udp" olur. Bu bilgi /etc/services kütüğü ile uyumlu olmalıdır. Sun RPC (Remote Procedure Call) tabanlı programlarda rpc/tcp or rpc/udp kullanılır.

değerler

Bu bilginin gerçekte alabileceği değer iki tanedir. Ya "inetd" program işi bitince socket'i boşaltacağı için hizmeti dinlemeye devam eder. Aynı socket'ten gelen yeni bağlantı isteklerini kabul edip yeni program başlatabilir ("nowait"), ya da inetd bekler ve başlattığı program yeni bağlantı isteklerini kendi çözümler ("wait").

Genelde tüm tcp programlar için bu eğer "nowait" olamalı, upd programlar için "wait" olmalıdır. Yapıları gereği bu programlar ancak belirtilen biçimde doğru çalışabilirler.

kullanıcı

Bu alan program başladığında /etc/passwd altında tanımlı hangi kullanıcı adına başlatıldığını belirtmek için tanımlanır. Güvenlik nedeniyle pekçok ağ programının kullanıcısını "nobody" yapmak gerekebilir.

program_yolu

Bu bilgi çalışacak programın tüm yolunu gösterir

program_parametreleri

Bu bilgi alanı zorunlu değildir. Başlatılan programa geçirilecek parametrik bilgi bu alana yazılabilir.

Örnek bir /etc/inetd.conf kütüğü




AĞLAR İÇİN GEREKLİ DİĞER ÖNEMLİ TANIM KÜTÜKLERİ

Çeşitli UNIX ortamlarında bulabileceğiniz ağ tanımlarına ilişkin kütüklerin içeriği hakkında kısa açıklama burada anlatılmıştır. Belki bu kütükleri hiç değiştirmeniz gerekmez. Ama gerektiğinde yapılarını bilmenizde yarar vardır.

/etc/protocols

/etc/protocols adı kütük kullanılan protokol adları ile numaralarının gösterildiği bir tablo biçimindedir. Protokolları adları ile kullanan programlarda (tcpdump gibi) ilgili hizmeti adı ile yazmak gerektiğinde kullanılır. Genel yapısı :

Protokol_adı numarası eşanlamlı_adı

Örnek bir /etc/protocols kütüğü :

# /etc/protocols:

# $Id: protocols,v 1.1 1995/02/24 01:09:41 imurdock Exp $

#

# Internet (IP) protocols

#

# from: @(#)protocols 5.1 (Berkeley) 4/17/89

#

# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

ip 0 IP # internet protocol, pseudo protocol number

icmp 1 ICMP # internet control message protocol

igmp 2 IGMP # Internet Group Management

ggp 3 GGP # gateway-gateway protocol

ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')

st 5 ST # ST datagram mode

tcp 6 TCP # transmission control protocol

egp 8 EGP # exterior gateway protocol

pup 12 PUP # PARC universal packet protocol

udp 17 UDP # user datagram protocol

hmp 20 HMP # host monitoring protocol

xns-idp 22 XNS-IDP # Xerox NS IDP

rdp 27 RDP # "reliable datagram" protocol

iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4

xtp 36 XTP # Xpress Tranfer Protocol

ddp 37 DDP # Datagram Delivery Protocol

idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport

rspf 73 RSPF # Radio Shortest Path First.

vmtp 81 VMTP # Versatile Message Transport

ospf 89 OSPFIGP # Open Shortest Path First IGP

ipip 94 IPIP # Yet Another IP encapsulation

encap 98 ENCAP # Yet Another IP encapsulation

/etc/networks

/etc/networks kütüğü işlevsel olarak /etc/hosts adlı kütük gibi çalışır. Ağ adları ve numaraları ile ilgili basit bir veri tabanı olarak kullanılır. Ad sunucu kullanılmadığı durumlarda önemli olabilir. Bu kütüğün her satırında iki bilgi alanı vardır :

# ağ_adı ağ_adresi

Bu konuda bir örnek şöyle tanımlanabilir :

loopnet 127.0.0.0
localnet 195.174.130.0
amprnet 44.0.0.0

Eğer "route" komutu gibi komutlar kullanıyorsanız ve bu komutta yer alan ağ bilgisi /etc/networks kütüğünde varsa, "route" komutu ağ numarası yerine ağ adını görüntüler.

Ağ güvenliği ve Erişim Denetimi

Bu konuda ayrıntılı bilgi UNIX Ortamında Güvenlik Önlemleri adlı yazıda anlatılmıştır. Buarada yinelemek yerine oraya bağlantı verdim.




AĞ TEKNOLOJİSİNE İLİŞKİN BİLGİLER

Burada yer alan ağ teknolojilerine ilişkin bilgiler LINUX için geçerlidir. Başka UNIX otamlarındaki ağ teknolojilerine uyumlu olmayabilir, ama konuya ilişkin genel bilgi amacı ile kullanılabilir (Bakınız : AĞ TEKNOLOJİSİ).




KABLOLAR VE KABLOLAMA

Kablo yapabilenler ve lehimlemeyi bilenler için size yardımcı olabilecek bazı kablo bilgileri burada anlatılmıştır.

NULL Modem (Modemsiz) Seri uç Kablosu

Tüm NULL modem kabloları benzer değildir. Pekçok NULL modem kablosu yalnız bilgisayarınızı kandırmakla kalmaz, tüm sinyallerin var olduğunu kabul ederek "Transmit" ve éReceive" uçlarını ters çevirir. Bunda bir sakınca yoktur. Ama o zaman yazılım akış kontrollu olan XON/XOFF protokolu kullanmanız gerekir. Bu protokol donanım akış protokoluna göre çok daha yavaş çalışır. Aşağıdaki kablo iki bilgisayar arasındaki en uygun ve olası sinyal alış verişini sağlayan RTS/CTS kontolunu kullanmanıza olanak veren bir örnektir.

Pin Adı Pin Pin

Tx Data 2 ----------------------------- 3

Rx Data 3 ----------------------------- 2

RTS 4 ----------------------------- 5

CTS 5 ----------------------------- 4

Ground 7 ----------------------------- 7

DTR 20 -\--------------------------- 8

DSR 6 -/

RLSD/DCD 8 ---------------------------/- 20

\- 6

Paralel uç kablosu (PLIP kablosu)

İki makine arasında PLIP protokolu kullanmak isterseniz aşağıdaki kablo ne tür paralel uç bağlantınız olursa olsun çalışır.

Pin Adı pin pin

STROBE 1*

D0->ERROR 2 ----------- 15

D1->SLCT 3 ----------- 13

D2->PAPOUT 4 ----------- 12

D3->ACK 5 ----------- 10

D4->BUSY 6 ----------- 11

D5 7*

D6 8*

D7 9*

ACK->D3 10 ----------- 5

BUSY->D4 11 ----------- 6

PAPOUT->D2 12 ----------- 4

SLCT->D1 13 ----------- 3

FEED 14*

ERROR->D0 15 ----------- 2

INIT 16*

SLCTIN 17*

GROUND 25 ----------- 25

Notlar :

'*' ile işaretlenmiş uçları sakın lehimlemeyin, boş kalsın.

Diğer topraklar 18, 19, 20, 21, 22, 23 ve 24 nolu pin'lerdir.

Eğer kullandığınız kablonun metalik koruyucu kafesi varsa bu kafes kablonun yalnız bir ucundan DB-25 şasesine lehimlenmelidir.

Uyarı : Yalnış lehimlenmiş bir kablo paralel uçunuzu yakıp kartınızı bozabilir. Kabloyu takmadan birkaç kez kontrol edin lütfen.

10base2 (thin coax) Ethernet Kablolaması

10base2, 52 ohm'luk 5mm çapında ince coaxial kablodur ve ethernet ağlarını kablolamak için kullanılır. Bilgisayarları 10base2 ile bağlarken dikkate alınması gereken bazı önemli noktalar vardır. Kablonun her iki ucunda terminatör (sonlandırıcı) bulunmalıdır. Bir sonlandırıcı 52 ohmluk resistans'dır. Böylece kablonun sonuna ulaşan mesaj sonlandırıcı tarafından emilir ve kablo boyunca yasıma yapmak. Bilgisayarları kabloya yerleştirmek için "T" tipi konnektör gereklidir. (Örnek kablo için çizim-2'ye bakın). Burada kullanılan "T" konnektör doğrudan ethernet kartına takılır (arada uzatma kablosu kullanılmaz).

Twisted Pair Ethernet Kablosu

Eğer yalnız twisted pair ethernet kartlarınız varsa, onları ağa bağlamak için bir hup kullanmanız gerekmez. İki kartı birbirlerine doğrudan bağlayabilirsiniz.



SÖZLÜK



Bu belgede kullanılan terimlere ilişki küçük bir sözlük

ARP

Adres çözümleme Protokolu (Address Resolution Protocol) için bir kısaltmadır. Bu yöntem donanım adresi ile ağ adresinin birbirine nasıl bağdaştırıldığını gösterir.

ATM (Asynchronous Transfer Mode)

Asynchronous Transfer Mode için bir kısatmadır. Bir ATM ağında mesajlar değişmez boydaki paketlere dönüştürülerek bir noktadan diğerine aktarılır. ATM devre anahtarlamalı paket ağı teknolojidir.

client

Kullanıcının bulunduğu yerdeki bilgisayar ya da yazılım parçasının adıdır. Bu program ya da bilgisayar sunucudan hizmet alır. SLIP ve PPP gibi iki uç arasındaki bağlantılarda çağırılan tarafa verilen addır.

datagram

Bir datagram veri ve adresleri içeren başlık bilgisi ile bir paketin tümüne verilen addır. IP ağının temel öğesidir. Buna yalnızca "paket" adı da verilebilir.

DLCI (Data Link Connection Identifier)

Frame Relay bağlantıda iki uç arasındaki sanal bağlantıyı tanımlar. DLCI Frame Relay sunucusu tarafından atanır.

Frame Relay

Bir ağ teknolojisi olarak üzerinden geçen trafik yüküne uyumlu bir yapısı vardır. Ağ maliyetleri ağı paylaşan müşteriler tarafından azaltılablir.

Hardware address

Bilgisayarı fiziksel ağ içinde (media access layer) tekil olarak adlandırmaya yarayan bir sayıdır. Ethernet adresi, AX.25 adresi örnek olarak kullanılabilir.

ISDN (Integrated Services Dedicated Network).

Bu Inegrated Services Dedicated Network sözlerinin kısaltması olan bir deyimdir. Ses ve veri iletişimi için İletişim kurumu tarafından sunulan bir alt yapıdır. Teknik olarak ISDN, devre anahtarlamalı veri ağıdır.

ISP

Bu INTERNET Servis Sunucusu için kullanılan bir kısaltmadır. ISP kurum ve insanları INTERNET ortamına bağlama görevini üstlenir.

IP address (IP adresi)

Bu sayı bir TCP/IP bilgisayaraını ağ içinde tekil olarak tanımlanmsında kullanılan bir değerdir. 4 byte uzunluğundaki adres 'noktalı sayısal gösterim' ile yazılır. Bu gösterim biçiminde her byte 0 ile 255 arasındaki ondalık sayılarla yazılır ve aralarında nokta bulunur.

MSS (Maximum Segment Size - En büyük parça boyu)

Bir işlemde gönderilebilecek en büyük veri boyuna verilen addır. Yerel ortamda mesajların parçalanmasını istemiyorsanız MMS ile MTU-IP değerleri eşit olmalıdır.

MTU (Maximum Transmission Unit - En büyük gönderme birimi)

IP arayüzü tarafından parçalanmadan taşınabilecek en büyük datagram boyunu tanımlayan bir parametredir. Bu datagram gideceği yere ulaşıncaya kadar geçeceği yollarda değişik MTU parametre değerleri yüzünden parçalanabilir, ama tanımlandığı ağ arayüzünde parçalanmaz. Bu değer parçalanmadan taşınmasını istediğiniz en büyük datagram boyundan büyük olmalıdır. ethernet arayüzü için 1500, SLIP arayüzü için 576 byte tipik değerlerdir.

route (yol, yön)

"route" bir datagram mesajının gideceği yere ulaşması için kullandığı yol ya da yön olarak adlandırılır.

server (sunucu)

Bu genelde kullanıcıdan uzakta bulunan bir bilgisayar ya da yazılım parçasıdır. Sunucu, bir ya da daha çok isteğe hizmet verir. Sunucu için tipik örnekler "ftp", "NFS", "Domain Name Server". İki uç arasındaki bağlantılarda (slip ya da ppp bağlantıda) sunucu kendisine bağlantı yapılan uç olarak adlandırılır. Bağlantıyı yapana da .... denir.

window

Mesaj alan tarafta, verilen bir zamanda, alınabilen en büyük mesaj boyuna window adı verilir.

Etiketler:
Gönderen admin 0 yorum

Denetim Masası Öğeleri İçin Çalıştır Komutları

Program Ekle Kaldır / control appwiz.cpl
Tarih Saat özellikleri /control timedate.cpl
Ekran özellikleri / control desk.cpl
Hızlı bul / control findfast.cpl
Fontlar / control fonts
İnternet Özellikleri /control inetcpl.cpl
Klavye özellikleri /control main.cpl keyboard
Mouse Özellikleri / control main.cpl
Multimedya Özellikler /control mmsys.cpl
Ağ Özellikleri / control netcpl.cpl
Şifre özellikleri / control password.cpl
Printer /control printers
Ses Özellikleri / control mmsys.cpl sounds
Sistem Özellikleri /control sysdm.cpl
Windows XP Shortcuts

Etiketler:
Gönderen admin 0 yorum

Windows XP Kısayol komutları

ALT+ENTER / seçili ögelerin özellikleri
ALT+ESC / en son acılan ıtem lerı gecıs saglar
ALT+F4 / aktif pencerelerı kapatır
ALT+SPACEBAR / aktif sayfanın menusu
ALT+TAB / menuler arasında geçiş
BACKSPACE / bir önceki sayfaya geçiş
CTRL+A / hepsini seç
CTRL+B / kalın yazı
CTRL+C / kopyala
CTRL+I / italik
CTRL+O / dosya açma
CTRL+U / alt cızgı
CTRL+V / yapıştır
CTRL+X / kes
CTRL+Z / geri tusu
CTRL+F4 / dökümanları kapatır
CTRL while dragging / seçili ögeleri tutar
CTRL+SHIFT while dragging / seçili ögeleri kısayol oluşturur
SHIFT+DELETE / çöp kutusuna atmadan siler
ESC / ıslemlerı durdurur
F1 / help
F2 / seçili öğenin ismini degiştirme
F3 / arama dosya ve klasörlerde
F4 / adres çubuğunu açar
F5 / yenileme
F6 / adres çubuğuna gider
F10 / active sayfalarda çubuğa gider “dosya eklemek araçlar filan”
SHIFT+F10 / sağ tıkladıgınızda açılan menu
CTRL+ESC / start menusu
SHIFT+CTRL+ESC / görev yönetıcısı
WIN / start menüsü
WIN+BREAK / sistem özellikler menüsü
WIN+D / bütün aktif sayfalari küçültme
WIN+E / bilgisayarımı açar
WIN+F / arama dosya ve klasörlerde
WIN+F+CTRL / bilgisayarımda arama
WIN+L / kullanıcı degiştirme kapatmadan
WIN+M / küçültme veya restore etme sayfaları
WIN+R / çalıştırı açar
WIN+TAB / açık olan sayfalarda geçiş
ALT+SPACEBAR / aktif sayfanın menüsü
CTRL+ESC / windows menusu
ALT+F4 / windows penceresini ve cerayann eden olayları kapatır
CTRL+A / bütün parçaları seçer
CTRL+X / seçili kısmı keser
CTRL+C / seçili kısmı kopyalar
CTRL+V / seçili kısmı yapıştırır
CTRL+Z / geri döner son yapılana
CTRL+(+) / sutun icindeki pencereleri otomatik olarak dogru sıralar
TAB / 7 sutun atlatma yada digger seçili ögeye geçme
SHIFT+DELETE / direk silme
BACKSPACE / bir önceki sayfaya yada slime işlemi
ALT+ENTER / seçili ögelerin özellikleri
F10 / aktif sayfanın menusu
F6 / adress bara gider /
F5 / sayfayı yenıler
F3 / arama ögesi
F2 / ismini degistirme seçili ögenin

Etiketler:
Gönderen admin 0 yorum
Internet Explorer Kısayol Komutları

CTRL+A / bütün sayfanın seçimi
CTRL+D / favorite ekler
CTRL+E / aktif sayfada arama yapar
CTRL+F / sayfada bulma
CTRL+H / geçmiş sayfasını açar
CTRL+I / favorite sayfalarının oldugu kısmı açar
CTRL+N / yeni pencere açar
CTRL+O / yenı lokasyonlar gider
CTRL+P / printer menusu
CTRL+S / degisiklikleri kaydeder
CTRL+W / aktif sayfayı kapatır
CTRL+ENTER/ basına www ve sonuna .com koymayı yapar
SHIFT+CLICK / yeni pencerede açar
BACKSPACE / bir önceki sayfaya gider
ALT+HOME / anasayfaya gider
HOME / sayfanın başına gider
TAB / Itemler arasında atlamayı sağlar
END / sayfanın sonuna gider
ESC / açılan sayfayı sonlandırır
F11 / tam ekran yapar sayfayı
F5 / sayfayı yeniler
F4 / adress barı açar
F6 / adress bara gider
ALT+RIGHT ARROW / ileri sayfaya götürür
SHIFT+CTRL+TAB / address bara gider
SHIFT+F10 / sağ tus olayı
SHIFT+TAB / geri tab olayı
CTRL+C / kopyalama
CTRL+V / yapıştırma
ENTER / aktif etmek /
F1 / internet explorer help
Etiketler:
Gönderen admin 0 yorum
ASP NEDİR?




ASP,
Server-Side Tabanlı bir dildir. Yani Sunucu tarafında yorumlanır. Ve bu sayede
kimse kaynak kodlarınıza ulaşamaz...



Bu şöyle oluyor: Siz URL hanesine adresi girdiğinizde, bana falanca dosyayı bul,
çağır ve yorumla diye bir istemde bulunuyorsunuz. (Bu durumda siz Client-Side
yani istemci oluyorsunuz.) Server'da (Sunucu) kendisinden icra etmesini
istediğiniz dosyayı arar bulur ve eğer bulursa, bu dosyayı hemen "asp.dll" adlı
bir programa iletir. asp.dll'de aldığı bu dosyayı hemen yorumlamaz. Önce
serverda bulunan, belki sizin de gözünüze çarpmıştır, "Global.asa" adlı dosyanın
çalışıp çalışmadığına bakar.



Global.asa ne mi diyeceksiniz. Global.asa'da diğer asp dosyaları gibi aslında
düz bir text dosyasıdır ama farkı şudur. ASP dosyalarının çalışma kurallarını
belirler. Bu dosyayı sonra tekrar ele alacağız. Özellikle Counter ve Active User
Konusunda...



Asp.dll önce gelen dosyada hangi script dilinin kullanıldığına bakar. Ve buna
göre kendini hazırlar. Nereden mi anlar. Belki dikkatinizi çekmiştir. ASP veya
Java dosyalarında. ScriptLanguage diye bir satır. İşte buradan anlar. Asp.dll
sonra bu derlediği bilgileri, tamamen asp kodlarından ayrılmış, temiz bir halde
browser'a gönderir. Bizde böylece sadece HTML kodlarını görürüz. ASP yazmak için
iki dil kullanabiliriz.



Visual Basic ve Java Script... Fakat şu anda dünyada en geçerli olanı Visual
Basic'tir. İşin bir ilginç yanı da şudur. Normalde Netscape ASP Scriptini
yorumlayamaz. Ama bizim kodlarımızda böyle bir korkumuz yoktur. Çünkü niye.
Hatırlayın bakalım niye? Umarım çoğunuz püf noktasını anlamıştır. Çünkü "asp.dll"
Browser'a VB kodlarından tamamen arındırılmış, yorumlanmış, tertemiz bir HTML
sayfası gönderir. Ve böylece bizim de acaba netscape'i olanda çalışacak mı diye
bir korkumuz kalmaz.




STATİK SAYFA NEDİR?

Statik sayfa onu oluşturan
kişinin ( webmaster ) bu sayfanın içeriğini bitirdiği tamamladığı ve
kullanıcıların bu sayfaya her uğradıklarında aynı içeriği gördüğü sayfalardır.
İçeriklerinin değişmesi için yeniden tasarlanılmaları gereklidir. Bu zaman ve iş
gücü kaybına yol açan bir etkendir.

DİNAMİK SAYFA NEDİR?

İçeriği tamamı ile önceden
belirlenmiş bazı kriterlere bağlı olarak değişen sayfaları dinamik sayfalar
olarak adlandırabiliriz. Bu değişiklik sayfanın aldığı bazı girdilere göre
olabilir.



ASP SAYFALARININ
ÇALIŞMA İLKESİ






Şimdi, ilk ASP'mizi
çalıştırdığımıza göre, biraz teknikten söz edebiliriz. HTML'in ziyaretçinin
bilgisayarında çalıştığını biliyorsunuz; istemci Browser, sizin URL hanesine
adını yazdığınız HTML dosyasını yine adresteki sunucu Web Server'dan ister. Web
Server da bu dosyayı bulur ve içinde kayıtlı resim ve diğer unsurlarla birlikte
istek sahibine gönderir. Fakat kimi zaman Server'a bize sadece bir dosyayı
göndermesini değil, fakat bu dosyanın içinde kayıtlı komutlar varsa onları icra
etmesini de bildirebiliriz. Bunu yapmanın bir yolu CGI programlarıdır. Bir diğer
yolu ise ASP'dir. Web Server, kendisinden bir ASP belgesi talep edildiğinde,
kendi kendine "Dur bakalım! ASP istendiği zaman hemen alıp göndermek yok, önce
bunu ASP.DLL programına gönderelim.. Ondan sonra işimize devam ederiz!" der.





ASP.DLL, kendisine bir
.asp dosyasının geldiğini görünce, hemen ASP'lerin Anayasası olan global.asa'nin
çalışıp çalışmadığına bakar. global.asa, tıpkı diğer ASP dosyaları gibi
bir düz yazı dosyasıdır ve ASP programlarının çalışma koşullarını düzenleyen
kuralları içerir. (Bu dosyayı sırası gelince ele alacağız.) Yukarıdaki örnekte
gördüğümüz gibi ASP dosyası hem HTML kodları içerir, hem de içinde bir Script
diliyle yazılmış kodlar vardır. ASP'ye "program" özelliği kazandıran bu Script
dili ile yazılmış kodlardır. ASP.DLL, önce gelen .asp dosyasında hangi Script
dilinin kullanıldığına bakar ve bunun için gerekli ortamı oluşturur; yani bu
Script dilini yorumlayacak programı çalıştırır; bu program Script'i yorumlar ve
icra edilecek komutları icra eder; ASP.DLL, icra edilen komutlar, işletim
sisteminin yardımını istiyorsa (örneğin bir veritabanından veri çekmek gibi,
veya dosya sistemine bir dosya açtırmak, yazdırmak, sildirmek gibi) bu yardımın
edinilmesini de sağlar. Bütün bu işlerin sonunda sizin yazdığınız HTML kodlarına
ek yapmak (örneğin bir tablonun içini, çekilen verilerle doldurmak veya dosya
sisteminden edinilen bir dosyanın içeriğini sayfaya aktarmak gibi) gerekiyorsa
bu ekleri ASP.DLL yapar.

ASP.DLL, kendisine sevk
edilen dosyayı satır satır okur ve önce dosyadaki ASP kodlarının gerektirdiği
HTML değerlerini bulur; yani önce ASP icra edilir, gereği yerine getirilir.
Sonra HTML bölümleri ile birleştirilip sonuçta sunucuya saf ve temiz bir HTML
sayfası gönderilir. Bu sayfanın içinde bir satır bile ASP kodu bulunmaz. Eğer
sayfanıza ziyaretçinin Browser'ında çalışması amacıyla Javascript veya VBScript
kodları koydu iseniz, elbette bu kodlar HTML'in parçası olarak ziyaretçiye
gidecektir. Fakat giden sayfada artık ASP'ye ilişkin hiç bir şey kalmamış
olacaktır.





ASP'nin Dili



ASP, bir teknolojidir.
Kendi başına bir yazım kuralı yoktur. ASP tekniğini kullanabilmek için, ASP
sayfasının talep edilmesi halinde ziyaretçiye gönderilmeden önce ASP.DLL'ye
teslim edilmesi bu teknolojinin kullanılabilmesi için hemen hemen tek şarttır.
Bunu, dosya uzantısını .asp yaparak sağlarız.

ASP.DLL ise, dünyada
mevcut bütün Script dilleri ile verilecek komutları kabul edebilir. Sadece ASP.DLL'e
sayfadaki kodların hangi dilde olduğunu söylemeniz gerekir. Bunu, ASP sayfasının
birinci satırında yaparız. Örneğin ASP'ye VBScript dilini kullanmasını belirtmek
için bu satırı şöyle yazarız:

<% @Language=VBScript %>


ASP sayfalarında
genellikle VBScript, JavaScript ve JScript kullanılır. Ancak örneğin Perl
dilinden türetilen PerlScript, PHP'den türetilen PHPScript de giderek ilgi çeken
ASP dilleri arasına giriyor.

Bir ASP sayfası içinde
farklı Script dilleri kullanılabilir.

Biz bu kitapçıkta
örneklerimizi VBScript diliyle yazacağız.



YAZILIM KURALLARI



VBScript komutları,
anahtar kelimeleri ve değişken adlarının büyük harf-küçük harf olması önemli
değildir. Yani yukarıdaki ifadelerden birini şu biçimlerden birinde
yazabilirdik; kodumuz yine de çalışırdı:

For fontBoyut = 1 To 7


FOR FONTBOYUT = 1 TO 7


for fontboyut = 1 to 7


Fakat... Bu demek
değildir ki, VBScript ile kodlamanın kendi gelenekleri yok! VBScript'çiler
genellikle komutların birinci harfini büyük yaparlar:

For
gibi. Değişken adlarında ise kendinize anlamlı gelen bir biçim tutturabilir ve
öyle devam edebilirsiniz.

Eğer bir kod satırı çok
uzun geliyor ve daha sonra anlaşılması imkansız derecede uzuyorsa, bu satırı alt
çizgi (_) ile aşağı satırda devam ettirebilirsiniz. Örnek:

<% If degisken1 > 1 And _


değisken1 <>












DEĞİŞKENLER



İyi programcılık
değişkenlerin önceden beyan edilmesini gerektirir. Bunu DIM komutuyla yaparız.
DIM, Dimension (boyutlandır) kelimesinden kısaltılmıştır. Pek akıllıca görünmese
de bu komut, bilgisayarın değişken yeri olarak bir bellek alanının boyutunu
belirtmesini sağlar.

Değişkenlere verilecek
ismimlerin anlaşılır olması programın okunulurluğunu kolaylaştırır. Ayrıca
değişken tanımlamaları ile ilgili bazı kurallar mevcuttur. Bu kurallar aşağıda
verilmiştir:

1-
Değişken ismi bir harf ile
başlamalıdır

Ad1,Ad2 şeklinde değişken tanımı yapılabilir fakat 1Ad veya 2Ad kullanımı
yanlıştır.



2-Değişken isminde boşluk bulunamaz. Bunun yerine alt çizgi karakteri
kullanılabilir.

Adi_Soyadi doğru bir kullanım fakat Adi Soyadi gibi arasında boşluk içeren
değişken tanımı yapılamaz.



3-Değişkene verilecek isim Vbscript komutlarını içeremez

Dim bir değişken ismi olamaz.



4-Değişken ismi 255 karakterden fazlada olamaz.

<% DIM Gun, Ay, Ogrenci, Not Gun = "Pazartesi" Ay = "Ocak" Ogrenci = "Necip" Not = 5 %>

Bir ASP sayfasının
birinci satırı olarak

<% OPTION EXPLICIT %>


yazarsanız VBScript DIM
komutuyla belirlenmemiş değişken kullanmanıza izin vermez; kullanırsanız hata
verir ve durur. Bu ifadenin işinize çok yarayacağı bir diğer nokta, kodda
değişken adını yazarken hata yapmanızı önlemektir. VBScript sizin hata
yaptığınızı bilemeyeceği için yanlış kelimeyi yeni bir değişken sayacaktır.
Değer atamadığınız bu yeni değişkeni kullandığınız yerlerde ya programınız hata
verir, ya da kendisine doğru görünen işlemler yapar, fakat beklediğiniz sonucu
elde edemezsiniz. OPTION EXPLICIT, yanlış yazdığınız değişkeni yeni
değişken sayarak önceden tanımlanmamış değişken kullandığınızı düşünerek,
duracaktır.

DİZİ DEĞİŞKENLERİ

VBScript'in
kullanılmaya hazır bir çok fonksiyonu vardır; bunlardan biri olan Array ile,
kolayca dizi değişken oluşturabiliriz. Diyelim ki, Gunler(7) dizi-değişkenini
gün adları ile doldurarak oluşturmak istiyoruz:

<% Dim Gunler = Array ("Pazartesi" , "Salı" , "Çarşamba" , "Perşembe" , "Cuma" , "Cumartesi", "Pazar") %>


ile hem dizi-değişkeni
oluşturabiliriz; hem de değerlerini atayabiliriz. Bu suretle oluşturduğumuz dizi
değişkenin üyelerine daha sonra sıra numaraları ile atıfta bulunabilirsiniz.
Örneğin:

<%=Gunler(6)%>


bize Pazar'ı verir.
Neden? Çünkü hayatlarının büyük bölümünü penceresiz ortamlarda geçiren kişiler
olan dil asarımcıları, sayı saymaya biz normal insanlar gibi 1'den değil 0'dan
başlarlar; dolayısıyla Gunler dizi-değişkeni Gunler(0)'dan başlar!

REDİM :



Bazen elinizde eleman sayısı değişen bir data girdisi olabilir bu gibi
durumlarda kullanılacak dizinin boyutuda değişken olabilir. Programınızın
herhangi bir yerinde kullanılan bir diziyi yeniden boyutlandırma ihtiyacı
duyulursa Redim keyword ü kullanılabilir böylece programımızın çalışması
esnasında dizimizi yeniden boyutlandırabiliriz. Ancak unutulamaması gereken bir
nokta bir dizi yeniden boyutlandırıldığında içerdiği eski datalar dizi
içerisinden atılıır. Bir dizi içerisinde bulunan eski veriler kullanılmak
isteniyorsa prereserve keywordu kullanılabilir.

ÇOK BOYUTLU DİZİLER

Bazı uygulamalarda matris
yapısında dizi tanımlamalarına ihtiyaç duyulabilir. Böyle durumlarda çok boyutlu
dizi tanımları kullanılabilir. Çok boyutlu dizi tanımı kullanılacak dizinin
boyutları verilmek süreti ile gerçekleştirilebilir.

Dim myarray(3,3)

Şeklinde bir tanımlama 3 X
3 boyutlarında bir dizi oluşturur bu diziye atama yapılmak istenildiğinde ise:


myarary(0,0)="test"

myarary(0,1)="deneme"

myarary(0,2)="test2"

myarary(1,0)="deneme2"

myarary(1,1)="111-23-4"

myarary(1,2)="Mustafa"

şeklinde atama yapılabilir







SABİT DEĞERLER



VBScript'te bir kere
verdiğiniz değeri hiç değişmeyen unsurlar (değişken diyemezdik, değil
mi?) vardır. Sabit değer, bütün ASP sayfası boyunca (hatta isterseniz, bütün
site, yani Uygulama boyunca) değişmeden kalır. Bu değerleri Const (constant,
sabit kelimesinden türetilme) komutuyla belirtiriz:

Const DolarDeger = 560780

Const SirketinAdi = "Web Tasarım ve Site Onarım A.Ş."


Const Slogan = "Siteler ve Kırık Kalpler Onarılır"




VERİ TİPLERİ



1- Byte

1 Baytlık
işaretsiz tamsayı tipidir. 0 ile 255 arasında değer alabilir.

2-Integer

2 Baytlık işaretli
tamsayı tipidir. -32.768 ile 32.767 arasında değer alabilir.

3-Long

4 Baytlık işaretli
tamsayı tipidir. -2.147.483.648 ile 2.147.483.647 arasında değer alabilir.

4-Long

4 Baytlık ondalık
sayı tipidir. +- 3.402923 X 10 38 ile +- 1.401298 X 10-45 arasında değer
alabilir.

5-Double

8 Byte lık ondalık
sayı tipidir. +- 1.79769313486232 X 10308 ile +-4.94065645841247 X 10-324
arasında değer alabilir.

6-String

Karakter sınırı
verilmezse 2 milyar karaktere kadar atama yapılabilen sayısal olmayan veri
tipidir. Bu tip karakter sayısı +10 byte yer kaplar. String bir veri tipi
oluşturmak için değişkene atanacak değer " " işaretleri içerisinde yer
almalıdır.

Adi="Mehmet"

7-Date

8 byte yer
kaplayan bu değişkene 1/1/100 ile 31/12/9999 arasındaki tarih ve 0:00:00 ile
23:59:59 arasındaki saat atmaları yapılabilir. Bu tipteki değişkenlere atama
string veri tipinde olduğu gibi veya # # karakterleri arasında yapılabilir.

Dogum_tarihi=#19/08/1978#

8-Boolean

2 byte lık bir
veri tipi olmasına rağmen sadece True veya False değerleri alabilir. Yani daha
çok iki durumlu değişkenlerde kullanılır. Bu tipten tanımlanan değişkenlere
direkt True veya False atanabileceği gibi sayısal değerlerde atanabilir.. Atanan
sayı 0 ise False, değilse True kabul edilir.

Evli=True

Evli=1

VERİ TİPİ DEĞİŞTİRME
İŞLEMLERİ

Bazen program içerisinde
atnımlanmış veya içeriğine bir değer atanmış bir tipdeki değeri başka bir tipe
değiştirme ihtiyacı duyulabilir. Bir veri itpini bir değerden diğerine çevirmek
için kullanılabilecek veri dönüşüm fonksiyonları aşağıda verilmiştir.


Ccur (ifade) :Parantez içinde verilen ifadeyi Currency veri tipine dönüştürür.



Cdbl (ifade) :Parantez içinde verilen ifadeyi Double veri tipine dönüştürür.



Cint (ifade) :Parantez içinde verilen ifadeyi Integer veri tipine dönüştürür.



Clng (ifade) :Parantez içinde verilen ifadeyi Long veri tipine dönüştürür.



CVar (ifade) :Parantez içinde verilen ifadeyi Variant veri tipine dönüştürür.



CBool (ifade) :Parantez içinde verilen ifadeyi Booolean veri tipine dönüştürür.



CByte (ifade) :Parantez içinde verilen ifadeyi Byte veri tipine dönüştürür.



CDate (ifade) :Parantez içinde verilen ifadeyi Date veri tipine dönüştürür.

CInt



Ne iş yapar: Herhangi tipteki geçerli bir ifadeyi integer alt tipine dönüştürür.

Söz dizimi: CInt(ifade)



Örnek:

mystr = "12"

myint = CInt(mystr)/3 'myint değişkeninin değeri : 4

CStr



Ne iş yapar: Herhangi tipteki geçerli bir ifadeyi integer alt tipine dönüştürür.

Söz dizimi: CStr(ifade)



Örnek:

myint = 41

mystr = CStr(myint) + " kere maşallah" 'mystr değeri : "41 kere maşallah"

CDate



Ne iş yapar: Herhangi tipteki geçerli bir ifadeyi integer alt tipine dönüştürür.

Söz dizimi: CDate(ifade)



Örnek:

mystr = "Ekim 12,
1998" ' sunucu sistemin saat/tarihi İngilizce ise değişir.

mydate = CStr(mystr) 'mydate değeri : 12.10.1998

VarType



<% degisken_1 = 12 degisken_2 = "Ben sendeyim sen bendesin Rüveyda..." degisken_3 = #08-12-2000# response.write vartype(degisken_1) 'sayfaya 2 yazar response.write vartype(degisken_2) 'sayfaya 8 yazar response.write vartype(degisken_3) 'sayfaya 7 yazar %>





TypeName


Pi=3

Tarih=#10/10/1998#

Test="Selam Millet"

Response.write TypeName (pi) ‘Sayfaya byte yazar

Response.write TypeName (tarih) ‘Sayfaya date yazar

Response.write TypeName (text) ‘Sayfaya text yazar

TEST FONKSİYONLARI

VBScript'te
kullandığımız bazı değişkenlerin o andaki durumu, programımızın akışını
kontrolde kullanacağımız bilgiyi sağlayabilir. Sözgelimi bir değişkenin değeri
boş ise, ziyaretçimizin formu tam olarak doldurmadığını düşünebiliriz. VBScript,
bize değişkenlerin durumunu sınamamız için bazı özel fonksiyonlar sağlar. Bu
özel fonksiyonlardan dönen değer True (doğru) veya False (yanlış)
olur; doğru sonucun değeri -1, yanlış sonucun değeri ise 0'dır:







































IsArray




Bir değişkenin
dizi-değişken (Array) olup olmadığını sınar.


IsDate




Bir değişkenin
değerinin tarihe (Date) çevrilip çevrilemeyeceğini sınar.


IsEmpty




Bir değişkenin
tanımlanıp değer atanmış olup olmadığını sınar.


IsNull




Bir değişkenin
geçerli bir değer tutup tutmadığını sınar.


IsNumeric




Bir değişkenin
sayı olarak işleme tabi tutup tutulamayacağını sınar


IsObject




Bir ifadenin
geçerli bir ActiveX veya OLE nesnesine referansta bulunup
bulunmadığını sınar.


TypeName




Bir değişkenin
türünü belirtir.


VarType




Bir değişkenin
türünü belirten sayıyı verir.






Şimdi ASP için gerekli
VBScript bilgisi bu kadar değil tabiî. Ama bu, işe başlamamız için yeter. İlerde
yeni VBScript komutları, veya fonksiyonları ile karşılaşırsak (ki size garanti
ederim, karşılaşacağınızı!) onları orada kısaca ele alırız. Ama yukarıdaki
VBScript bilgisi, her zaman lazım!





OPERATÖRLER:



Bir programlama
dilinde veya scriptini kullanarak artimetik ve lojik işlemleri yapmak için
gerekli operatörler bulunur. Vbscripte de bazı işlemler operatörlerle yapılırken
bazıları ise fonksiyonlarla yapılır.

= Atama
X = 5

+ Toplama Print 20+5 '25

- Çıkarma Print 10-5 '5

* Çarpma Print 3*5 '15

/ Bölme Print 9/2 '4.5

\ Tam Bölme Print 9\2 '4

& String Toplama Print "Bayram" & "paşa" 'Bayrampaşa

Ù Üst Print 4Ù2 '16

Mod Bölmede Kalan Print 5 Mod 2 '1

And Ve Print 5 And 17 21

Or Veya Print 7 Or 17 '23


Not Değil Print Not &H1 '&HFFFE




Tesadüfî Sayı


Bilgisayarın matematik
işlemlerde, özellikle istatistik hesaplamalarla kullanılması tesadüfî
(rastlantısal) sayı üretmeyi gerekli kılmıştı. Fakat daha sonra bilgisayar
oyunları bu işlemi adeta zorunla hale getirdi. Rastlantısal sayı, bir dizide
tekrar etmesi belirli bir düzene tabi olmayan sayı demektir. Bilgisayar yokken,
tesadüfî sayı tabloları matematikçiler tarafından uzun uğraşlarla üretilirdi.

VBScript, bu amaçla
Visual Basic'in Randomize ve Rnd komutlarını almıştır.
Randomize, tesadüfî sayı üretme sürecini başlatır; Rnd da bu sayıyı
size verir. Kodunuzda bir yerde Rnd kullanacaksınız, ondan önce bir
yerlerde mutlaka Randomize komutunun yer alması gerekir. Bunun bir
uygulaması şu olabilir:

<% OPTION EXPLICIT %>





<% Dim TesadufiSayi Randomize TesadufiSayi = Rnd %>


<%=TesadufiSayi%>





Tam Sayı Elde Etmek
için: Int ve Round

Tamsayi = Int(KesirliSayi)




INCLUDE FILE



Bu seçeneğimiz asıl olarak, herhangi bir ASP dosyamızı
başka bir ASP dosyamıza dahil etmeye yarar.







STRİNG İŞLEMLERİ



UCASE AND LCASE

Ucase bir string içerisnde yer alan tüm karakterleri büyük karakterlere çevirmek
için kullanılan bir fonksiyondur. Bu işlemin tam tersini yani bir string içinde
yer alan karakterlerin tamamını küçük harflere çevirmeye yarayan fonksiyon ise
Lcase fonksiyonudur. Örnek vermek gerekirse "Selam Millet" string verisini
içeren değişken Ucase fonksiyonuna sokulduğunda yani :




yazi="Selam Millet"

Ucase(yazi) gibi bir işlemin sonucunda yazi değişkeni "SELAM MILLET" şekline
dönüşür. Aynı değişken Lcase fonksiyonuna sokulduğunda ise sonuç "selam millet"
olacaktır.

<% // Asp script bloğunun başladığını belirtir. yazi="Selam Millet" // yazi değişkenine atama yapılıyor response.write Ucase(yazi) // değişkenin içeriği büyük harfe dönüştürdü ve ekrana yazıldı. response.write Lcase(yazi) // değişkenin içeriği küçük harfe dönüştürdü ve ekrana yazıldı. %> // Script Bloğunun bitişi.



LEN


Bir stringin içeirsinde bulunan karakter sayısının bulunmasına ihtiyaç
duyulduğunda Len fonksiyonu kullanılır. Kullanım şekli:

Len (string) şeklindedir.

Örnek vermek gerekirse:

<% text="bunun içinde kaç karakter var" sonuc=Len(text) response.write sonuc %>

Yukarıda ki örneği
açıklayacak olursak text değişkenine içeriği "bunun içinde kaç karakter var"
şeklinde bir değer atanıyor daha sonra len fonksiyonu kullanılarak bulunan değer
yani stringin içerisnde yer alan karakter sayısı ki buna boşluklar (space ) de
dahil sonuc adlı bir başka değişkene atanıyor en son satırda ise sonuc
değişkenin içeriği ekrana yazılıyor.



LEFT AND RIGHT

Left ve Right
fonksiyonları bir string içerisinden sağ veya soldan istenilen karakterin
kopyalanmasını sağlamak amacı ile kullanılır. Bu string içerisinden seçilmiş bir
parçanın kopyalanması gibidir. Aşağıda Left ve Right kullanımlarına ilişkin
örnekler verilmiştir.

<% test="Buradanekadarçokinsanvarmış" soldan=Left(test,6) sagdan=Right(test,6) response.wrirte soldan response.wrirte sagdan %>

örneği açıklayalım ilk
satırda test adlı değişkene test="Buradanekadarçokinsanvarmış" satıı ile bir
atama gerçekleştiriliyor ikinci satırda kullanılan left(test,6) komutu ile test
stringi içerisinde soldan başlanarak 6 adet karakter kopyalanıyor ve kopyalanan
karakter soldan adlı değişkene atanıyor. Bu işlemin sonucunda soldan
değişkeninin değeri soldan="burada" oluyor çünkü tüm yazı içerisinde soldan
itibaren 6 karakter kopyalayacağımız left(test,6) ile belirtmiş oluyoruz. Aynı
işelm right fonksiyonu içinde geçerki burada test verisi içinden gene 6 karakter
kopyalıyoruz fakat bu işlem string içerisinde sağdan sola doğru yapılan bir
haraket ile gerçekleşiyor. Bu işelmin sonucundada elde edilen değer sagdan
değişkenine atanıyor. Sonuç itibarı ile sagdan değişkeninin içeriğide
sagdan="varmış" oluyor. Son 2 satırda ise elde edilen bu değerler ekrana
yazılıyor. (response.write kullanılarak)



MID

Bir string
içerisinde belirli bir aralığı kopyalamak istediğimizde kullanabileceğimiz
fonksiyon Mid fonksiyonudur. Genel kullanımı:

Mid(String , nereden_baslanacak , kaç_karakter_kopyalanacak) şeklindedir.

Bir örnek vererek daha iyi açıklamaya çalışalım.


test="Buradanekadarçokinsanvarmış"

sonuc=Mid(test,7,10)

response.write sonuc

test içersinde yer alan
test="Buradanekadarçokinsanvarmış" text içerisinde 7. ci karakterden başlamak
üzere toplam 10 karakter kopyalanarak sonuc adlı değişkene atanıyor sonuc
değişkenin değeri ise "nekadarçok" şeklinde oluyor ve response.write
kullanılarak sonuc ekrana (html data stream içerisine ekleniyor) yazdırılıyor.



INSTR

Instr fonksiyonu
kullanılarak bir string dizisi içerisinde yer alan bir karakterin nerede yer
aldığını (kaçıncı karakter olduğunu) bulmak mümkündür. Aşağıdaki örnek
incelenirse Instrt fonksiyonunun kullanımı daha iyi anlaşılabilir.


strtext="HowLong"

karakter_nerede=Instr(strtext,"Long")

strtext değişkenine
"HowLong" değeri atanmış ve instr fonksiyonu kullanılarak bu text içerisinde yer
aldı düşünülen "Long" un nerede başladığı bilgisi karakter_nerede adlı değişkene
atanmıştır. Burada karakter_nerede değişkeninin değer 4 olacaktır çünkü "Long"
strtext içerisinde 4. cü karakterden itibaren başlamaktadır. Eğer aranılan text
veya karakter bulunamaz ise Instr fonksiyoınu 0 değerini geri döndürür.



LTRIM, TRIM VE TRIM

Bu üç fonksiyon
verilen bir textin sağında, solunda veya hem sağında hem de solunda kalan
boşlukların atılmasını sağlamak için kullanılan fonksiyonlardır. Her üç
fonksiyonda sadece tek bir parametre alırlar ki buda boşlukların kaldırılmak
istenildiği text in tam kendisidir.

Ltrim textin solunda
bulunan tüm boşlukları, Rtrim textin sağında bulunan boşlukları Trim ise textin
hem sağında hemde solunda bulunan boşlukları çıkarmak için kullanılan bir
fonksiyondur.



REPLACE

Gayet faydalı bir
fonksiyondur. Uzun bir metin içerisindeki belirlediğiniz ifadeyi başka ifadeyle
değiştirmenizi sağlar.



Söz dizimi: REPLACE(string, değişecek_olan, yerine_konulacak,
başlangıç_indexi, değişiklik_sayısı, karşılaştırmakodu)



Parametreler:



String: İçinde değişiklik yapacağımız metindir.



Değişecek_olan: Metin içinde değiştirmek istediğimiz alt-dizgi
(sub-string) dir.



Yerine_konulacak: Belirtilen alt-dizginin yerine konulacak ifadedir.



Başlangıç_indexi: Değiştirme işleminin, stringin kaçıncı karakterinden
başlayacağıdır.



Varsayılan: 1



Değişiklik_sayısı: Çok açık. -1 yazılırsa bulunan tüm alt-dizgiler
değiştirilir.



karşılaştırmakodu: VBTextCompare için 1, VBBinaryCompare için 0
yazılabilir.



Varsayılan 0.



Replace fonksiyonu şu şekilde de işlev yapar. REPLACE(string, değişecek,
yerinekonulacak). Ancak fonksiyonun daha verimli kullanılabilmesi için tüm
parametlerinin belirtilmesi gerekir. Örnekleri inceleyin, anlayacaksınız.



Örnek:



Dim mystr

mystr = "Ağır ağır çıkacaksın bu merdivenlerden"

Response.write replace(mystr, "Ağır", "Hızlı", 1, -1, 0)

' sayfaya "Hızlı ağır çıkacaksın bu merdivenlerden" yazar.

Response.write replace(mystr, "Ağır", "Hızlı", 1, -1, 1)

' sayfaya "Hızlı Hızlı çıkacaksın bu merdivenlerden" yazar.

Response.write replace(mystr, "a", "A", 1, -1, 1)

' sayfaya "Ağır Ağır çıkAcAksın bu merdivenlerden" yazar.

Response.write replace(mystr, "a", "A", 1, 2, 1)

' sayfaya "Ağır Ağır çıkacaksın bu merdivenlerden" yazar.

Replace fonksiyonu bir çok
yerde yardımımıza yetişir. Örneğin bir formdan alınan içerikte yer alması
muhtelemel istenmeyen ifadelerin ayıklanması sağlanabilir. HTML taglerinin
kullanılması önlenebilir. Ve daha bir çok yerde REPLACE size büyük fayda
sağlayacaktır.



STRING FONKSİYONU

VBScript ten yine evlere
şenlik bir fonksiyon. Belirtilen sayıda karakterin tekrarını içeren string
oluşturuyor.



Örnek:

Response.write
STRING(5, "*") ' sayfaya "*****" yazar



SPLIT FONKSİYONU



Bir metinden belirlenmiş ayraçlar (delimiter) vasıtasıyla belirtilen sayıda
alt-dizgi içeren 0 tabanlı, tek boyutlu dizi üretir.



Sözdizimi: SPLIT(ifade, ayraç, sayi, karşılaştırmakodu).

(Sayi yerine -1 yazılırsa tüm belirlenen tüm alt-dizgiler işleme tabi tutulur.)

Ne iş yaptığını anlamak için örnek yapalım.



Örnek:

Dim mystr,
dizi(3)

mystr = "EvcilASP|Türkiye nin|ASP Bostanı"

dizi = SPLIT(mystr, "|", -1, 1)

Reponse.Write dizi(0) ' sayfaya "EvcilASP" yazar

Reponse.Write dizi(1) ' sayfaya "Türkiye nin" yazar

Reponse.Write dizi(2) ' sayfaya "ASP Bostanı" yazar



JOIN FONKSİYONU

Split fonksiyonuna göre
zır işlemi yapar. Bir dizinin elemanlarını belirtilen ayraç ile birleştirip bir
string üretir.



Sözdizimi: JOIN(ifade, ayraç)



Örnek:

Dim dizi(3), str,
str2

dizi(0) = "Ben"

dizi(1) = "Sekizinci"

dizi(2) = "Henri"

str = JOIN(mystr, "|")

str2 = JOIN(mystr, " ")

Reponse.Write str ' sayfaya "Ben|Sekizinci|Henri" yazar

Reponse.Write str2 ' sayfaya "Ben Sekizinci Henri" yazar





MANTIKSAL İFADELER



İf - Then

VBScript'in vereceğiniz
bir durumun bulunup bulunmadığını sınamasını sağlar. Genel yazım kuralı
şöyledir:

If şart Then


[şart doğru ise yapılacak işler]


Else


[şart doğru değilse yapılacak işler]


End If




İf...then yapısının en son
ve geniş kullanımı ise Elseif yapısı ile birden fazla şart içeren durumlardır.

<% if method= "Faks" then Response.Write "Lütfen Faks numaranızı giriniz " Elseif method= "Email" then Response.Write "Lütfen E-mail adresinizi giriniz" Elseif method= "Telefon" then Response.Write "Lütfen telefon numaranızı giriniz" Else Response.Write "Herhangi bir bilgi iletilmeyecektir" End if %>



Select Case



Olasılık sayısı artan daha karmaşık bir yapıda if...then yapısı karmaşık bir
çözüm olacaktır. Böyle durumlarda Select...Case yapısı daha uygun bir çözüm
olarak kullanılır . Aşağıda verilen örneğe göz atalım:

<% Select Case Secim Case "Faks" Response.Write "Lütfen Faks numaranızı giriniz" Case "Telefon" Response.Write "Lütfen telefon numaranızı giriniz" Case "E-mail" Response.Write "Lütfen e-mail adresinizi giriniz" End Select %>



DÖNGÜLER



For..Next döngüsü

Programın bir işi
belirli kere yapmasını istiyorsak, ona yapacağı işi bir sayaç değişkeniyle
birlikte, For döngüsüyle bildiririz:

For sayaç = başlangıç To son Step adım


...yapılacak işler...


Next




While...Wend

Ne var ki, program
mantığı bazen bize böyle açık ve seçik bir sayaç kurma imkanı vermez. Sayaç
olarak kullanacağımız değer, programın başka bir bölümü tarafından üretiliyor
olabilir. Veya bu değer ziyaretçi tarafından belirlenmiş olabilir. Özetle
yapılmasını arzu ettiğimiz işin ancak sayaç bir değerden azsa, çoksa veya eşitse
yapılmasını, bu durum değişirse durmasını isteyebiliriz. Bunu While
(..iken) komutuyla yapabiliriz. While döngüsünü kullandığımız zaman
sayacı bizim arttırmamız gerekir. Sözgelimi, yukarıdaki programın 7 günün tümünü
ekrana yazmasını değil de, mesela gün sayısı 5'den küçük ise yazmasını istiyor
olabiliriz. Bu durumda kodumuzda For.. Next arasında kalan bölümde şu
değişikliği yapabiliriz:

While sayac <= 5 Response.Write Gunler(sayac) Response.Write "
"


sayac = sayac + 1


wend










Do..Loop

Do
(Yap) komutu ile kuracağımız döngüler iki ayrı türde olabilir: bu döngü ile bir
dizi komutu, bir koşul doğru iken veya doğru oluncaya kadar yaptırabiliriz. Bu
yöntemlerden her biri iki ayrı şekilde yazılabilir. Bir koşul doğru iken bazı
işlerin biteviye yapılmasını istiyorsak, Do While yöntemini kullanırız:

Do While koşul


koşul doğru iken yapılacak işler


Loop


Bu ifade ile VBScript
koşul doğru olduğu sürece istediğimiz işi yapacaktır. Buradaki Loop
kelimesi, döngünün başa dönmesini sağlar. Bu yöntemden şu şekilde de
yararlanabiliriz:

Do


koşul doğru iken yapılacak işler


Loop While koşul


Burada, Loop
komutu şartın hâlâ doğru olup olmadığını sınar ve doğru ise verilen işleri
yapar; artık değilse bir sonraki satıra geçer. Döngünün bir şart gerçekleşinceye
kadar bir işi yapmasını ise Do Until yöntemiyle sağlarız. Bu durumda
döngü şöyle yazılır:

Do Until koşul


koşul gerçekleşinceye kadar yapılacak işler


Loop


Bu ifade ile VBScript
koşul doğru oluncaya kadar istediğimiz işi yapacaktır. Buradaki Loop kelimesi,
döngünün başa dönmesini sağlar. Bu yöntemden şu şekilde de yararlanabiliriz:

Do


koşul gerçekleşinceye kadar yapılacak işler


Loop Until koşul






For Each... Next

For...Next kullanımının
özel bir türüdür. Bir dizi veya koleksiyon içerisinde kullanılır. (Koleksiyon
nedir ? Daha detaylı olarak anlatılacaktır. ) For döngüsü dizi veya koleksiyon
içerisinde kalan eleman sayısı kadar gerçekleştirilir. Aşağıda ki örneği
inceleyebilirsiniz.

<% Dim eleman Dim sehirler(2) sehirler(0)="Ankara" sehirler(1)="İstanbul" sehirler(2)="Ordu" For Each eleman In sehirler Response.Write eleman & "
"

Next

%>



Kod Nasıl Çalışır ?

Döngü şehirler
dizisi içerisinde yer alan her eleman ( Şehir için, her dizi elemanı ) için
tekrarlanır. Eleman (şehir ) sayısı 3 olduğuna göre döngü 3 defa tekrarlanacak
ve ekrana dizinin içerisinde yer alan elemanlar yazılacaktır





Döngüyü durdurmak
isterseniz

Bir döngüden
belirlediğiniz koşul gerçekleşsin-gerçekleşmesin çıkmanız gerekebilir. Bunu bir
başka değişkendeki değişiklik zorunlu kılabilir. Bir döngüden çıkmak için
Exit (çık) ifadesini kullanabilirsiniz. Bu ifade, döngünün yaptığı işler
arasında, genellikle bir If deyimi ile birlikte yer alır. Örneğin:


For sayac = 1 to 10


[..bir takım işler yap..]


If Degisken1 > Degisken 2 Then Exit For


[..bir takım işlere devam et..]


Next






SÜREÇLER (PROSEDÜRLER)

VBScript'te programın
akış kontrolünde kullanacağınız bir diğer grup araç ise örneğin Javascript veya
Perl'de fonksiyon dediğimiz gruplandırılmış ve isimlendirilmiş işlem
kümeleridir. Bu kümeler programın bir yerinde topluca dururlar ve programın
başka bir yerinden isimleriyle çağrılırlar; veya bu kümelere isimleriyle
referans yapılır.

VBScript'te bu
kümelenmiş kod gruplarına Prosedür (Süreç) denir. iki türlü olur: fonksiyon (Function)
ve Subroutine (sab-rutin okunur; kısaca Sub diye yazılır ve sab
diye okunur). Bu iki süreç arasındaki başlıca fark, fonksiyondan kendisini
çağıran komuta daima bir değer döner; Sub'dan dönmeyebilir. Sub,
yapacağı işi yapar ve programın kontrolünü kendine atıf yapılan noktaya
devreder. VBScript'de bir programa farklı yerlerde sık sık aynı işi
yaptırıyorsak, bunu bir Sub ile yaptırırız; fakat programımıza bir değer
gerekiyorsa, bu değeri bir fonksiyona hesaplattırırız. Her ikisi de kendilerine
atıfta bulunan veya kendilerini göreve çağıran satırdan (komuttan, deyimden)
verilebilecek değerleri kabul edebilirler.

Biraz karışık oldu; ama
bunu ilerde gerçek ASP uygulamaları yazarken daha iyi anlayacağız. Şimdilik bir
iki noktayı öylece öğrenmeye bakalım. Bir fonksiyonun adı, tıpkı bir değişken
adı gibi, fonksiyonun ürettiği değeri tutar; ve bu değer kendisini çağıran
komuta verilir. Diyelim ki, programımızın çeşitli noktalarında yazı-tura atıp,
elde edilecek sonuca göre bir iş yapmak zorundayız. Bu ihtiyacın doğduğu yerde,
yazı-tura komutlarını yazabiliriz. Ancak bu ortaya çok uzun bir programın
çıkmasına sebep olur. Oysa yazı-tura işlemlerini bir fonksiyonda toplar ve
ihtiyaç halinde sadece bu fonksiyonu çağırırsak ve fonksiyon bize o anda yazı mı
geldiğini, yoksa tura mı geldiğini bildirirse, işimiz çok kolaylaşmış olur.

Böyle bir fonksiyon,
yukarıdaki örnekten hareketle, şöyle olabilir:







<% Function YaziTura Dim ParaAt Randomize ParaAt = Int(Rnd * 2) + 1 If ParaAt = 1 Then YaziTura = "Yazı" Else YaziTura = "Tura" End If End Function %>


Bu fonksiyonu, ASP
programının herhangi bir yerinden, şöyle bir yöntemle çağırabilir; ve vereceği
sonucu programın akışına uygun şekilde kullanabilirsiniz:

<% NeGeldi = YaziTura Response.Write NeGeldi %>


Fonksiyonun sonunda
End Function ifadesinin bulunduğuna ve fonksiyonun elde ettiği sonucu kendi
adına atadığımıza dikkat edin. DIM ifadesiyle böyle bir değişken
tanımlamadığımız halde VBScript, fonksiyonu çağırdığınız anda bunu kendiliğinden
yapacaktır.

Aynı işlemi Subroutine
(Sub) olarak yazabiliriz. Fakat bu kez Sub, elde edeceği değeri kendisi
kullanacak ve bittiği anda kontrol programa geri dönecektir:

Argümanli;

<% Sub prosedürün_ismi (arguman1, arguman2, .. , argumanN) ' kodlar, kodlar, kodlar... End Sub %>





argümansız;





<% Sub yildirim_gursesin_anisina() Response.write "leylaklar dökülür, güller ağlasın" End Sub %>


Fonksiyon adlarının
sonuna, bizden beklediği değer varsa onları belirleyen değişken adlarını
parantez içinde yazarız. Fonksiyon bizden bir değer beklemiyorsa açılan kapanan
(boş) parantezlere ihtiyaç yoktur. ancak bir çok VBScript programcısı bunu adet
edinmiştir. Sub'ların çağrılması, fonksiyondan farklıdır. Sub'ın
icra edilmesini istediğiniz noktaya sadece adını yazarız. Sub'lar
işleyebilmek için bizden değer bekliyorsa, bu değerleri Sub adının
yanına, parantez içine almadan ve virgülle ayırarak, yazarız. Örneğin, Hesapla
isimli ve bizden iki değer bekleyen bir Sub şöyle çağrılır:

Argümanlı sub işletimi

<% ' tercih 1 Call prosedur_ismi ( arguman1, arguman2, .. , argumanN ) ' tercih 2 prosedur_ismi arguman1, arguman2, .. , argumanN %>





Argümansız sub işletimi





<% ' başka işler... Call yildirim_gursesin_anisina() ' veya yildirim_gursesin_anisina %>


Bu Sub işini
bitirdiği anda programın akışı, Sub'a atıf yaptığımız noktada devam eder.







EXIT SUB



Son olarak <% exit sub %>
deyimini yad ederek bitirelim. Bu deyimi bir sub bloğu içinde kullanırsanız
program akışı, bu deyimi görür görmez o sub bloğundan çıkar ve bu sub hangi
satırdan çağrılmışsa o satırdan sonraki kodları icra etmeye koyulur. Buna
ihtiyacmız olur mu? Evet, olur. Zaten bu deyim, bir şartlı sınama bloğu içinde
kullanılır genellikle. Belli bir koşul gerçekleştiğinde veya gerçekleşmediğinde
sub içerisinde, diğer deyimlerin işlenmeden çıkılmasını sağlar. Aşağıdaki banal
örneğe bakalım:

<% pay = 5 payda = 2 Call bol ( pay, payda ) pay = 16 payda = 0 Call bol ( pay, payda ) Sub bol ( x , y ) If y=0 Then Response.Write x & " \ " & y & ": müjde! divijın bay ziro.. bumm.." exit Sub End If bolum = x \ y ' tam bölme kalan = x mod y Response.Write x & " \ " & y & " bölümü : " Response.Write "bölüm: " & bolum & " : kalan: " & kalan & "
"

End Sub

%>







TARİH VE SAAT


Belki de Web'in zamana
çok bağlı oluşu dolayısıyla, Visual Basic'in hemen hemen bütün zaman-tarih
fonksiyonları VBScript'te de kullanılır.



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

Time: O andaki saati verir. (22:24:40 gibi)

Now: O andaki tarih ve saati birlikte verir. (25.03.2000 22:24:40 gibi)

VBScript'in buna ek
olarak Weekday (haftanın günü), WeekdayName (günün adı) ve
Monthname (ayın adı) fonksiyonları da vardır. Bu fonksiyonlar değerlerini
Date fonksiyonuna göre alırlar. Örneğin,

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


komutu bize bugün
Cumartesi ise "Cumartesi" değerini verir.

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


komutu bize bu ay Mart
ise "Mart" değerini verir. VBScript'in bunlara ek olarak Day (gün),
Month (ay) ve Year (yıl) fonksiyonları da değerlerini Date
fonksiyonundan alarak, size bir rakam verirler. Eğer tarih 25 Mart 2000 ise:

<%= Day(Date)%>... 25


<%= Month(Date)%>... 3


<%= Year(Date)%>... 2000


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





SERVER NESNESİ

Web Server, ASP için
bir nesnedir, ASP'nin bir çok işini bu nesnenin özellikleri ve metodları
halleder. Server nesnesinin bir özelliği (ScriptTimeout) ve dört metodu (CreateObject,
HTMLEncode, URLEncode, MapPath) vardır. Web Server çalıştığı bilgisayarın
sizin siteniz adına yönetiminden sorumludur; dolayısıyla bu kadar az özellik ve
metodu var diye bu nesneden çok yararlanmayacağımızı sanmayın. ActiveX ve COM
bileşenlerini çalıştırmak Server'ın görevidir.

ScriptTimeout
Özelliği:
Diyelim ki bir ASP Script'i ya bizim, ya ziyaretçinin, ya da Server'ın bir
hatası yüzünden sonsuz döngüye girdi! Döngünün durması için gerekli şart asla
yerine gelmiyor ve Script bir türlü yapacağı işi yapıp, sonlandırmıyor. Bu
durumlarda ziyaretçinin ve tabiî Server'ın sonsuza kadar beklemesi mümkün değil!
Programın bir şekilde durdurulması gerekir. Bunu hemen hemen bütün Web server
programlarının Script Timeout (Script süre sınırı) diyalog kutusuna bir
değer girilerek yapılır. Öreğin MS-Internet Information Server için varsayılan
Script Timeout süresi 90 saniyedir. Yani ISS, herhangi bir Script'in
çalışıp-durmasını 90 saniye bekler; bu sürenin sonunda Script'in çalışması
tamamlanmazsa ziyaretçiye arzu ettiği sayfanın veya unsurun bulunamadığını
bildirir. Bu süreyi (Server'ın varsayılan değerinin altında) kısaltmak değilse
bile uzatmak elimizdedir. Bunu ScriptTimeout özelliğini kullanarak
yaparız. ASP sayfasının herhangi bir yerine örneğin şu kodu koymak yeter:


<% Server.ScriptTimeout = 100 %>


Bu örneğe göre
Server'ın varsayılan Script Timeout süresi 90 saniye ise 100 saniyeye
çıkmış olur.

Böyle bir şeyi neden
yapmak isteyebiliriz? Script'iniz çok karmaşık veya başka bir Server'daki
veritabanından veri çekiyor, olabilir. Gerçi bu anlamda 90 saniye bilgisayar
milleti için bir asır anlamına gelir, ama yine de durdurulmasaydı işini
başarıyla tamamlayacak bir Script, bu sürenin kısalığı yüzünden Server
tarafından durdurulabilir. ASP sayfalarınız çok karmaşıksa ve sürekli Timeout
hatası veriyorsa, hata aramadan önce bu süreyi uzatabilirsiniz.

CreateObject Metodu:
İlk ASP kodunu yazdığımız andan beri bu metodu kullandığımızı görüyorsunuz.
CreateObject (nesne oluştur) olmasa idi, dört mevsim birbirini izleyebilir,
Dünya Güneş'in etrafında dönebilir miydi? Hiç sanmam. Fakat lütfen o
CreateObject ile bu CreateObject'i birbirine karıştırmayın. Yukarıda
kullandıklarımız Scripting nesnesinin bir metodu idi; bu Server nesnesine
aittir. Diyelim ki sayfanızda reklam amaçlı banner grafiklerini belirli
zaman aralığı ile veya ziyaretçiye gönderdiğiniz Cookie (çerez)
bilgilerine göre değiştirmek istiyorsunuz. Bunun için diyelim ki MS-Web Server
Programının AdRotator bileşininden yararlanacaksınız; şöyle bir kod
işinizi görebilir:

<% Set Reklam = Server.CreateObject ("MSWS.AdRotator")%>


<%= Reklam.GetAdvertisement("/reklamlar/buyukbanka.txt")%>


Burada
GetAdvertisement, Server'ın AdRotator bileşininin bir metodudur.
Server'ın CreateObject metodundan, veritabanına ulaşırken de
yararlanacağız.

MapPath (Yolu
belirle) Metodu:
Web Server açısından "kök dizin" (root directory) Server'ın bulunduğu
bilgisayarın sabit diskinde, herhangi bir klasör olabilir. Örneğin IIS için bu
varsayılan değer olarak "C:\inetbup\wwwroot" klasörüdür. Özellikle ASP ile
"program niteliğinde siteler" yapmaya başladığımızda, sitenin ilgili bütün
dosyalarının bulunduğu bir dizin için yol belirlemek isteyebiliriz. Bunu Server
nesnesinin MapPath (Yolu belirle) metodu ile yapabiliriz:

WebDizini = Server.MapPath("/benim_site")


Bu komutla WebDizini
değişkenin değeri muhtemelen şöyle olacaktır: "C:\inetbup\wwwroot\benim_site\"
Fakat bu metodun sadece böyle duragan biçimde kullanılması gerekmez; bazen
sayfalarımızda ziyaretçi ile etkileşmenin sonucu olarak varsayılan Web
dizinimizi değiştirmek isteyebiliriz. Sözgelimi biri Türkçe, diğeri İngilizce
iki sitemiz varsa, ve ana sayfamızda ziyaretçi Türkçe'yi seçtiyse, o noktadan
itibaren Web uygulamamız için Web kök-dizini, "/turkish/" olacak ve mesela
resimlerimiz için verdiğimiz "/resimler/" dizini kök dizinde değil,
"/turkish/resimler/" klasöründe aranacaktır. Web yolunu dinamik olarak, yani
ziyaretçinin tercihine bağlı şekilde değiştirebilmek için, önce ziyaretçiden
gelecek bilgileri nasıl kullanacağımıza, yani Request (talep) nesnesine
değinmemiz gerekir.

HTMLEncode,
URLEncode:
İçinde HTML açısından kod parçası veya özel işaret sayılan karakterler bulunan
metinleri sayfamıza içerik olarak göndereceğimiz zaman Server'ın işaretleri
aynen metin gibi göndermesini sağlamak için, örneğin:

Server.HTMLEncode("Değisken1 < language="VBScript" codepage="1254">



<% Set Reklam=Server.CreateObject("MSWC.AdRotator") banner=Reklam.GetAdvertisement ("Banner.txt") Response.Write Banner %>





Banner.txt isimli txt dosyamız da aşağıdaki gibi olacaktır...




Redirect http:Rating.asp

width 423

height 53

border 0

*

Banner1.gif

http://www.massCars.com

MassCars

5



Banner2.gif

http://www.YemekTarifim.Com

Türkiye'nin En Büyük Sanal Mutfağı

6



Banner3.jpg

http://www.EgitimCenter.Com

Türkiye'nin En Büyük Sanal Dersanesi

1





Şimdi bu textimizde kullandığımız terimleri tanımlayalım.



WIDTH: Bu alana Bannerlarınızın Genişliğini gireceksiniz.

HEIGHT: Bu alana da Bannerlarınızın Yüksekliğini gireceksiniz.

BORDER: Bu alana o girerseniz Bannerlarınız çerçeve kullanmaz. Gireceğiniz 1 ve
daha yüksek değerler, Banner'ınıza çerçeve vermenizi sağlar.



İlk Satırda imajın adını ve yolunu yazıyorsunuz.



İkinci Satırda, Linkini

Üçüncü satırda ise imajın üzerine gelince çıkacak ALT yazısını.



Dördüncü satırdaki rakamlarımızın toplamı 10'u verir. Bu rakamlar seçili
banner'ımızın 10 defada kaç kere gösterileceğini belirler...



Ama işin doğrusunu söylemek gerekirse ben bu yöntemi pek sağlıklı bulmuyorum.
Çünkü bu banner'ların üzerine geldiğimiz zaman, link olarak bize bir QueryString
değeri verir.



Bu da bize yeniden bir sayfa yazmamızı ve txt dosyamızın başına Redirect adresi
olarak bu sayfaya yönlendirme yapmamızı gerektirir. Ama ben Select Case
yöntemiyle daha güzel bir ASP Scripti yazdım ve onu kullanıyorum.

Onun Koduda aşağıdadır. Tek şartı döngüsü 10 olduğu için 10 imajıda
yerleştirmeniz gerkiyor. Yani diyelim ki elinizde 4 tane banner var.



Biri 3, biri 3, biri 2, ve diğer geri kalan da 2 kere gösterilecek. O zaman biz
de bu bannerları sayısına göre yerleştiriyoruz...B en de 4 tane var. Ben de
aynen anlattığım gibi yapacağım.



Atrıca bu scriptimiz text dosya kullanmıyor... Yani başka hiçbir dosyaya gerek
duymuyor ve ayrıca AdRotator Nesnesi kullanmadığı için de Windows98'de yani 98
PWS'de de çalışıyor.





CONTENTROTATOR



Bu dersimizde de içerik çevirici özelliğini göreceğiz ASP'nin. Bir sayfaya
girdiniz ve sayfada bilgisayar reklamları var. Düşünsenşize her sayfaya
girişinizde Bilgisayar dünyasıyla ilgili başka bir haber buluyorsunuz. Ne kadar
ilginç değil mi?



İşte ben ASP'nin bu özeeliğini bilmediğim zamanlar, vay be adamlar habire
güncelliyor derdim. Ama işin aslı böyle değilmiş. Meğerse ASP'de ContentRotator
diye bir özellik varmış. İsterseniz hemen örneğini yaparak çalıştırarak
öğrenelim...



<% Set Tip = Server.CreateObject("MSWC.ContentRotator") Response.Write Tip.ChooseContent("Content.txt") %>




Evet yazacağımız kod bu kadar. Önemli olan Content.txt adlı dosyamızda ne
yazacağımız ve ne yapacağımız. Şimdi isterseniz Content.txt adlı dosyamızı
inceleyelim...



%%
#2// Fikra1

> LORD

> Bir ingiliz lordu karisini yatakta bir genc adamla basmis...onlari oyle

> gorunce kadina : -"sayin leydim bu yaptiginiz genel ahlaka sigmaz ben size
guvenmistim,

> guvenimin sonsuza kadar surecegini tahmin ediyordum... bana bunu

> yapamamliydiniz....", diye yarim saat nutuk ceker. Ama sonunda dayanamaz

> ve yataktaki gence doner:

> - "Ve siz sevgili genc, en azindan ben konusurken durmak nezaketini

> gosterebilirdiniz.



%% #3// Fikra2

> GENÇ KIZ

>

> Genc kız genc asıgına telefon acmıs : * -Jean, demis, seni çok

> arzuluyorum, geceleri uyku uyuyamyyorum.Ne olur bu hafta sonu bize yemege

> gel.Seni annem babamla tanıstırayım.Sonra benim odamda ders calısıyor

> gibi yapar doya doya sevisiriz...

> * Jean ömründe hicbir kızla sevismemis, toy bir delikanli. Bir eczaneye

> gitmis.Babacan eczaciya :

> -Bu hafta sonu önce bir aile yemegi , pesinden atesli bir ask

> yaşayacagım, demis, o yuzden iyisinden iki kutu prezervatif istiyorum...

> Babacan eczacı kutuları vermiş, oglanın sırtını sıvazlayıp yolcu etmiş. *

> Jean hafta sonunda bir büyük buket çiçekle Françoise'nın kapısını çalmış

> * Genç kız kapıyı açmış.Jean'y dogrudan yemege almış. Delikanlı çok mahçup

> biçimde masaya oturmuş.Kızın ana babasının yüzüne şöyle bir baktıktan

> sonra başını önüne egmiş.Başlamış dua etmeye.Ancak dua bir türlü

> bitmiyor.Françoise sonunda dayanamamış, fısıltıyla :

> *-Ben senin bu kadar dindar oldugunu hiç bilmiyordum Jean, demiş...

> Jean adeta inlemiş : * -Ben de babanın eczacı oldugunu bilmiyordum..



%% #5// Fikra3

> LÜTFEN

> Diskoda bir güzel eğlendikten sonra delikanlı sevgilisini evine

> götürmüş. Kapıda tam ayrılacakları vakit oğlan bir elini duvara dayayarak

> kızcağızı kapı ile kendi arasına sıkıştırmış...

> - Bir kere öpücem!...

> - Olmaz, komşular görür...

> Derken tartışma uzamış. O sırada kapı açılmış, küçük kızkardeş gözlerini

> oğuşturarak kapıda belirmiş. Ablasına dönüp:

> - Babam diyor ki, demiş, öptürecekse öptürsün yoksa ben aşağı inip o

> herifi öyle bir öperim ki bir daha unutamaz...

> Hem söyle şuna abla, elini diafonun düğmesinden çeksin...





Gördüğünüz gibi text dosyamız oldukça basit bir yapıya sahip. Hemen incelemeye
alalım... Sanırım size tek farklı görünen karakterler %% #2// Fikra1
karakterleridir sanırım. Hemen bunların ne olduğunu açıklayalım.

%% işaretleri her bir bölümü birbirinden ayırmak için kullanılıyor.



Hemen arkasından gelen #2// işareti ise sayfanın toplamda kaç kere
gösterileceğini belirliyor. Örnekte sayfanın yüklenme oranı sayıların toplamıyla
bulunur. Örneğimizde yüklenme toplamı 10'ur. Mesela bu Fıkra #2// olduğu için
sayfa 10 kere yüklenirse veya Refresh edilirse 2 kere gösterilecektir...




PAGE.COUNTER





<% Set MyPageCounter = Server.CreateObject("MSWC.PageCounter") MyPageCounter.PageHit %>



Bu Web sayfası <%= MyPageCounter.Hits %> kez görüntülenmiştir.



REQUEST NESNELERİ

Request Objesi:

Request objesi bilgi toplamak amaçlı kullanılan bir objedir. Detaylı olarak
anlatılacak olmasına rağmen bu obje içersinde (koleksiyon) yer alan metotlara
kısaca bakalım.

1-Querystring:
Eğer gönderilen bilgi url içersinde bulunan dosya ismi ile birlikte taşınıyorsa
başka bir ifadeyle bilgi formu metodundan "GET" ile gönderiliyor ise Querystring
metodu bu bilginin elde edilmesi için kullanılır.



2-Form: Eğer bilgi Form içerisinde "POST" metodu ile gönderiliyor ise
bilginin elde edilmesi için kullanılan bir metodudur.



3-Servervariables: Web server request ile ilgili bilgileri ( Http
ServerVariables ) tutar. Bu bilgilere bu koleksiyon içerisinde ulaşmayı sağlayan
bir metoddur.



4-Cookies: Eğer client browser server dan gelen cookileri ( çerez:text
dosyaları ) kabul ediyor ise bu bilgi web server a cookie koleksiyonu içerisinde
ulaşır.



5-ClientCertificate: Client Certificate dijital bir sertifikadır ve
client ve web server arasında ulaşılan server ve client' ın birbirini
tanımlaması için kullanılır. Detaylı olarak ele alınacaktır.



QueryString Koleksiyonu

Querystring server a
iletilen bilgi kümeciği metotlarından biridir. Bu iletişim browser ın adres
hanesinde yer alan dosya adına "?" ve "&" işaretleri vasıtası ile bilgilerin
eklenmesi suretiyle gerçekleşir. Genel kullanımı :filename.asp?kullanici=Mehmet
şeklindedir.

Eğer daha fazla bilgi bir anda gönderilmek isteniyor ise bu "&" işareti
kullanılarak;

filename.asp?kullanici=Mehmet &email=mehmet@dogus.edu.tr şeklinde
gerçekleştirilir.

"&" işareti bilgilerin birbirinden ayrılmasını sağlar. Kullanıcı adı ve soyadını
alan ve bunları Querystring metodu ile ilgili forma gönderecek bir form dizayn
edelim. İlgili Html formu aşağıdaki gibi olmalıdır;

< name="login" action="Querystring.asp" metod="GET">

Lütfen Adınızı Giriniz: < type="text">


Lütfen SoyadınızıGiriniz:< type="text" name="soyadi">


< type="submit" value="login">

< /Form >

Yukarıdaki kod adı soyadı
alanları bulunan bir form elde etmemizi sağlar.

Bu Html kodu içerisinde
yer alan input submit butonu < action="Querystring.asp" metod= "GET"> bu
kutucuklara girilen bilgileri action kısmında belirtilen Querystring.asp'ye
"GET"metodu kullanılarak gönderilir. (Yani bilgiler browser' ın adres hanesi
kullanılarak iletilir.) Bu bilgilere ulaşmak içinse Request' in Querystring
metodu aşağıdaki şekilde kullanılır.

Request. Querystring ("istek gönderen formdaki Html elemanının adı") bu genel
kullanıma göre eğer biz "..." içerisine o formda yer alan bir kontrolün adını
koyar, istek o input alanına girilmiş veriye ulaşırız, yani Request. Querystring
("adi") şeklinde bir kullanım "adi" adlı text box'a girilen veriye;

Request. Querystring ("soyadi")şeklinde bir kullanım ise "soyadi" adı verilen
textbox' a girilen veriye ulaşmamızı sağlar. Eğer Response nesnesinin Write
metodunu kullanırsak login formuna

girilen
verileri;

<% Response.write Request. Querystring ("adi") & "
"

Response.Write Request. Querystring ("soyadi")

%>



şeklinde ekrana yazabiliriz. Dikkat edecek olursanız "&" işareti "
" Html
etiketini formdan gelen adi verisine eklemek için kullanılmıştır. Bu da bize 1
satır aşağıya geçmemizi sağlar (satır beslemesi) sağlar. Koleksiyon birden fazla
değer ve değişkeni içerisinde bulunduran bir grup olarak tanımlanabilir. Eğer
Querystring metodu kullanılarak gönderilen değişken (kontrol sayısı) birden
fazla ise bu bir koleksiyon oluşturuyor anlamı taşır. Eğer daha önceki
notlarımızı hatırlayacak olursak koleksiyon oluşturan bilgi grupları veya dizin
elemanları için kullandığımız özel bir döngümüz vardı. (FOR EACH....NEXT) bu
döngüyü Querystring için uygulanacak olursak ;

<% For Each eleman in Request. Querystring Response.Write eleman & "......" & Request. Querystring(eleman) Next %>

şeklinde bir döngü ile
bize Querystring ie gönderilen tüm elemanları ve bu elemanların değerlerini
ekrana basabiliriz. Yukarıdaki döngü Request. Querystring ile oluşturulan her
eleman için döngüyü tekrarlar.

Request. Querystring ("kontrol").count özelliği gönderilen elemanları saymak
için kullanılır. Eğer bu sayı"o" 'a eşit ise herhangi bir bilgi gönderilmemiş
demektir.

Şimdi değişik konularda başlıkların yer aldığı ve bu başlıklar arasından
kullanıcının yaptığı seçimlere bağlı olarak bu konularda kendisine bilgi
göndereceği mesajını ekrana basan bir ASP uygulaması oluşturalım. Kullanıcının
seçim yapabileceği selectbox'ın yer aldığı Html formunu dizayn edelim:

<>

<>

<> kitap başlıkları < /TITLE >

< /HEAD >

<>

Aşağıdaki konu başlıklarından ilgilendiklerinizi seçiniz.

< action="responseQuerystring.asp" method="GET">

< size="3" name="Konular">

<> Bilgisayar < /OPTION >

<> Hikaye < /OPTION >

<> Şiir < /OPTION >

<> Roman < /OPTION >

< /select >

< type= "submit" value=" ">

< /FORM >

< /BODY >

< /HTML >

Şimdi bu formdan
gönderilen verileri işleyen ASP kodunu oluşturalım:

Kitap istek formu : <>




<% if Request. Querystring("Konular").count= 0 then Response.write "Herhangi bir konu seçmediniz." ELSE Response.write size seçmiş olduğunuz "&"<>

Response.Write Request. Querystring ("konular")

Response.write "hakkında broşür yollayacağız. Teşekkürler"

END IF

%>

Kod Nasıl Çalışır:

İlk form basit bir html
formudur. Selectbox butonun oluşturulması için kullanılmıştır.
yer alan multiple seçeneği CTRL tuşuna basılarak birden
fazla seçim yapılmasına olanak tanır. ASP içersinde yer alan
Request.Querystring("konular").count=0 şartı eğer hiçbir konu başlığı seçilmemiş
ise devreye girer. Eğer kullanıcı formda seçim yapmış ise ELSE şartı devreye
girer ve seçilen konu başlıkları ekrana yazılır.



FORM KOLEKSİYONU

Eğer form içerisinde gönderilen bilgiler POST metodu kullanılarak gönderilmiş
ise bu bilgiler FORM koleksiyonu içerisinde yer alır. Bu bilgiler request .FORM
kullanarak kontrol edilebilirler. Genel kullanımı:

Request. Form ("kontrol_adi") şeklindedir.

Form nesnesi içerisinde textbox dışında aşağıda ki elemanlarda bulunabilir.
Bunlar:

· Textbox

· Checkbox

· Option Buttons

· Listbox ve türevleri

· Hidden Fields

· Text Areas

Tüm bu elemanların
oluşturulması ile ilgili bilgileri herhangi bir HTMl öğreten siteden
öğrenebilirsiniz. Formun POST metodu ile gönderilen bilgiler HTML veri akışı
içerisinde kullanıcıya gönderilir, bilginin iletilmesi için browser ın adres
hanesi kullanılmaz. Bir önceki örneği form koleksiyonu ile oluşturmak isteseydik
;

Request.Form ("Konular")
şeklinde bir değişiklik yapmamız yeterli olacaktı.



CLIENTCERTIFICATE
KOLEKSİYONU

Web browser, web server
ile Secure (SSL) bağlantısı üzerinden bağlantı kurmak istediğinde bu işlem
dijital sertifikalar üzerinden sağlar. Bu dijital sertifika bağlantı yapılan web
server ve organizasyon hakkında gerekli bilgileri taşır bu CA Certificate
Authority olarak bilinir. Bu işlem bilgilerin güvenli bir bağlantı üzerinden
aktarılmasını sağlar bilgi aktarımı SSL, Secure Sockets Layer protokolü
üzerinden gerçekleştirilir. SSL, Http protokolünün daha güvenli hale getirilmiş
bir varyasyonudur. En son versiyonu SSL 3.0/PCT 1 dir. (PCT: Private
Communication Technology) Clientcertificate de bir koleksiyon meydana getirir ve
bu koleksiyona:

<% For Each Key in Request. ClientCertificate Response.Write ( Key & " : " & Request.ClientCertificate (key) & "
")

Next

%>





şeklinde ulaşabilirsiniz.

Bu koleksiyonda yer
elemana ise ; Request. ClientCertificate (Key) şeklinde ulaşabilirsiniz.
İlerleyen bölümlerde ClientCertificate ile ilgili daha ayrıntılı bilgilere ve
örneklere yer verilecektir.

Request Nesnesinin
Özellikleri ve Metotları

Request nesnesi
koleksiyonun dışında da bazı özel özellik ve metotlara sahiptir. Bu özelliklere
ve metotlara göz atalım .

TotalBytes Özelliği

Bu özellik browser tarafından gönderilen bilginin toplam olarak kaç byte
olduğunu bulmak için

kullanılır. Aşağıda ki kod gönderilen bilginin kaç byte
olduğunu ekrana yazar

<% Response.Write "Göndermiş olduğunuz Bilgi:" Response.Write Request.TotalBytes & "dır" %>



BinaryRead Metodu



BinaryRead metodu POST ile server a gönderilen bilgilerin alınması için
kullanılır. Form ve querystring metodlarında farklı olarak text dışında veri
gönderildiğinde bu metod bu verilerin okunması için kullanılır. Daha önce
anlatılan TotalBytes özelliği bu metoda parametre olarak sunulur. Aşağıda
verilen kodu inceleyelim

<% Dim Dosya_boyutu, Oku Dosya_boyutu=Request.Totalbytes Oku=Request.BinaryRead(Dosya_boyutu) For i= 1 to Dosya_boyutu Response.Write MidB (oku, i, 1) Next %>



MidB , Mid fonksiyonuna benzeyen fakat düzensiz oluşturulmuş bilgileri
oluşturulmuş bilgileri okumak için kullanılan bir text fonksiyonudur. (Aslında N
boyutlu dizi haline getirilmiş veriler demek daha doğru olur. ) Bu fonksiyon
döngü içerisinde her defasında bir karakter okunur ve bu karakter ekrana
yazılır.

ServerVariables
(Server Değişkenleri)

Request nesnesinin bir
diğer kolleksiyonu, bizim kendi Web Server'ımızın o anda çalışmakta olan ASP
sayfası için oluşturduğu ortamın değişkenleridir. Bunların arasındaziyaretçinin
Browser'ına ilişkin bilgiler de vardır. Önce þu kısa ASP sayfasını çalıştırarak
kendi Server'ımızın şu andaki değişkenlerini görelim; sonra bunları ayrıntılı
ele alalım







HTTP ServerDegişkenleri Kolleksiyonu

















HTTP Server Değişkenleri Kolleksiyonu













<% For Each key in Request.ServerVariables %>








"%>





<% Next %>


Değişkenin adı Değeri
<% = key %>


<%If Request.ServerVariables(key) = "" Then Response.Write " " Else Response.Write Request.ServerVariables(key) End If Response.Write "






Sizin Host'unuzun adı: <%=Request.ServerVariables("HTTP_HOST")%>








Bu sayfayı
çalıştırdığımız zaman görüntülenecek tabloda, Bir HTTP Server'ın sayfasını
çalıştırdığı anda oluşturduğu ortama şekil veren bütün değişkenleri
göreceksiniz. Bu değişkenleri programlama yoluyla değiştiremeyiz; sadece okuyup,
yararlanabiliriz. HTTP Server Değişkenleri Kolleksiyonunun elemanları
şöyle sıralanır:





















































































































































































Değişkenin adı



Değeri


ALL_http




HTTP Header
içinde yer alan bütün değişkenler ve değerleri. Header
adlarının önünde "HTTP_" öneki vardır.


ALL_RAW http




Header içinde yer
alan bütün değişkenler ve değerleri. Header adları ve değerleri
istemci Browser'ın verdiği şekilde gösterilir.


APPL_MD_PATH




Web Server'ın
ISAPI.DLL dosyası için varsaydığı kök dizin



APPL_PHYSICAL_PATH




Web Server'ın
varsaydığı kök dizinin gerçek yolu


AUTH_PASSWORD




Kullanıcı Web
Server'a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa,
kullanılan parola


AUTH_TYPE




Kullanıcı Web
Server'a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa,
kullanılan yetkilendirme yöntemi


AUTH_USER




Kullanıcı Web
Server'a kullanıcı adı/parola yöntemiyle bağlanabiliyorsa, kullanıcı
adı


CERT_COOKIE




Kullanıcı siteye
bağlanmak için yetkilendirme sertifikası kullanıyorsa kendisine
verilen kimlik (ID)


CERT_FLAGS




Sertifikanın
varlığını gösteren bit değeri


CERT_ISSUER




Sertifika varsa
veren kurum


CERT_KEYSIZE




Secure Socket
Layers kullanılıyorsa, bağlantı için anahtar değeri



CERT_SECRETKEYSIZE




Özel anahtar
değeri


CERT_SERIALNUMBER




Sertifika seri
no.



CERT_SERVER_ISSUER




Sertifikayı veren
merci



CERT_SERVER_SUBJECT




Server
Sertifikasının "konu" alanı değeri


CERT_SUBJECT




İstemci
Sertifikasının konu alanı değeri


CONTENT_LENGTH




İstemcinin
gönderdiği bilgi yumağının boyutu


CONTENT_TYPE




Ziyaretçiden
gelen bilgilerin GET veya POST metoduna göre edindiği tür


GATEWAY_INTERFACE




Web Server'ın
ziyaretçi ile etkileşim arayüzünün adı ve sürümü. Genellikle:
CGI/1.1


HTTPS




Ziyaretçi ile
bağlantı güvenli ise ON, değilse OFF


HTTPS_KEYSIZE



Secure Sockets
Layer
için bağlantı anahtar sayısı



HTTPS_SECRETKEYSIZE




Özel Server
sertifikasının gizli anahtar sayısı



HTTPS_SERVER_ISSUER




Özel Server
sertifikasının veren merci



HTTPS_SERVER_SUBJECT




Özel Server
sertifikasının konusu


INSTANCE_ID




Web Server'ın
aynı anda kaç kere çalışmakta olduğu



INSTANCE_META_PATH




Şu anda
çalışmakta olan Web Server'ın Meta yolu


LOCAL_ADDR




İstemcinin IP
numarası


LOGON_USER




İstemci Windows
NT sisteminde ise oturum açma adı


PATH_INFO




Çalışmakta olan
ASP'nin göreli yolu ve adı


PATH_TRANSLATED




Çalışmakta olan
ASP'nin gerçek yolu ve adı


QUERY_STRING




İstemcinin
gönderdiği bilgi kümesi


REMOTE_ADDR




İstemcinin
Host'unun (ISS'inin) IP'si


REMOTE_HOST




İstemcinin
Host'unun (ISS'inin) adı


REMOTE_USER




İstemcinin gerçek
adı


REQUEST_METHOD




İstemciden bilgi
isteme yöntemi (GET veya POST)


SCRIPT_NAME




Çalışmakta olan
ASP'nin adı


SERVER_NAME




Sunucu'nun adı


SERVER_PORT




Sunucuya
bağlantının geldiği TCP kapı numarası



SERVER_PORT_SECURE




TCP kapısı
güvenli ise 1, değilse 0


SERVER_PROTOCOL




Server'ın
çalıştırdığı HTTP'nin sürümü


SERVER_SOFTWARE




Server
programının adı ve sürümü


URL




Şu anda geçerli
URL








RESPONSE NESNELERİ



Bu başlık altında her iki
objeyi daha detaylı olarak inceleyeceğiz. Bu objeler browser ve web server
arasındaki iletişiminin sağlanması için kullanılırlar. Şimdi bu detaylara
ayrıntılı olarak bakalım.

Write Metodu:

Response objesinin en sık kullanılan metodudur. Write metodu ASP sayfamızda
bilgileri görüntülemek için kullanılır. Genel kullanımı;

Response.Write [değer] şeklindedir.

<% Yazılacak_text="Bugün günlerden ne?" Response.Write yazılacak_text %>

Şeklinde bir kullanım
browser ekranına "Bugün günlerden ne?" diye bir mesaj yazar. Asp script
bildiğiniz gibi <%........%> script sınırlayıcıları arasına yazılır. Bu
kullanımın iki farklı şekli vardır. Eğer html tagları içerisinde herhangi bir
değişkenin taşıdığı bir değeri görüntülemek istiyorsak <%=değer%> daha uygun bir
kullanım olacaktır. Fakat bu kullanımın dezavantajı sadece 1 satırlık bir
kodlamaya izin vermesidir. Yani;


<%=değer Response.Write "Bu kullanım hata verir." %>

Şeklinde bir kullanım
yanlıştır. Dolayısıyla birden fazla satır ASP kodlaması gereken durumlarda ASP
kodunu <%.......%> satırları arasına yazmak daha uygun olacaktır. Aşağıdaki
örneği inceleyelim:

<% text1= "Merhaba" text2= "Yeni ASP programcıları" Response.write text1 & text2 %>

Response.write text1 &
text2 kullanımı iki farklı değişken içerisinde tutulan stringleri birleştirerek
tek satırda yazmak için kullanılmıştır. "&" işareti iki değişkeni birleştirmek
için kullanılır. Response.write bir işlemin sonucu ekrana yazmak içinde
kullanılabilir. Aşağıdaki örneği inceleyelim;

<% sayı1= 24 sayı2= 8 Response.write sayı1/sayı2 %>

Şeklinde bir kullanım
ekrana 3 yazılmasına neden olur. Çünkü sayı1 /sayı2 yani 24/8=3 dür, ve
response.write 3 şeklinde bir kullanıma eşdeğerdir. Bir formdan bize iletilen
bilgileri Request objesini kullanarak alabilir ve gene bu bilgiyi Response
objesinin write metodunu kullanarak ekrana yazabiliriz.




<% Response.Write (Request.QveryString("text1")) %>



şeklinde bir kullanım bize istek gönderen formdaki text1 adlı değişkeninin
değerini ekrana yazar.

Buffer:

Buffer özelliği response ile oluşturulan Html Data akışının html dosya
oluşturulması tamamlandıktan sonra veya her satır iletildiğinde gösterilmesi ile
ilgili bir özelliktir. Default değeri "on" dur bu değere false u set edecek
olursak ;

Response.Buffer=False
şeklinde bu işlem yapılabilir.

Clear:

Response.Clear metodu buffer (tampon) edilmiş tüm html bilgisinin
silinmesi için kullanılır. Kullanımı: Response.clear şeklindedir. Fakat
unutulmaması gereken nokta eğer Response.Buffer= false olarak set edilmiş ise
Run-time (çalışma zamanı ) hataya neden olur.

End:

End metodu web server işlemi durdurmasını ve Response.End noktasına kadar
oluşturulmuş Html datanın gönderilmesini sağlar. Kullanımı :

Response.End
şeklindedir

Expires:

Expires özelliği
dakika cinsinden sayfanın browser tarafından hafızada ne kadar tutulacağı ile
ilgili bilgiyi set etmek için kuyllanılır. Eğer kullanıcı aynı sayfaya
Response.Expires ile belirlenen zamandan daha önce geri dönerse sayfanın
hafızadaki versiyonu kullanıcıya gösterilir. Kullanımı :
<% Response.Expires=dakika %>
şeklindedir. Eğer bu değere "0" set edilirse ( Response.Expires=0 )
sayfaya her geri dönüldüğünde sayfa yeniden yüklenir.





ExpiresAbsolute:

ExpiresAbsolute tıpkı Expire özelliğibne benzer olarak fakat belirtilen sürenin
dakika değil tarih veya saat olacak şekilde set edilmesi suretiyle sayfanın
geçerlilik süresinin belirlenmesi için kullanılır. Kullanımı :

<% Response.ExpiresAbsolute=#tarih# %>
şeklindedir.

Redirection:

Kullanıcıyı bir Asp sayfasından diğerine yönlendirmek için kullanılan bir
metoddur. Bu metodun yerini alan 2 yeni metod olan server.transfer ve
server.Execute metodlarına daha sonra ayrıntılı olarak göz atacağız. Redirection
iel ilgili olarak bilmemiz gereken bazı önemli noktalar vardır. Eğer http header
client a gönderilmil ise Response.redirection hataya neden oluyur . bu hatanın
önüne geçmek için response.Buffer özelliğini true ya set etmek sureiyle ve
herhangi bir noktada response.clear ı kullanarak response.Redirection in hata
vermesini engelleyebiliriz. Response.Redirectionun genek kullanımı:


Response.Redirection("yönlendirilecek_sayfa")
şeklindir.



Server. Execute ve
Server.Transfer

Server. Execute ve
Server.Transfer bir ASP sayfası içersinden başka bir sayfanın çalıştırılması
veya o sayfanın içeriğinin aynı sayfa içerisinde gösterilmesi için kullanılır.
Aralarında ki tek fark ise Server. Execute kullanıldığında hedef sayfa
çalıştırıldıktan sonra orijinal sayfa nın işletilmesine devam edilmesine rağmen
Server.Transfer kullanıldığında orijinal sayfaya geri dönülmez. Page1 , Page2
veMainpage adı altında 3 sayfamın olduğunu düşünün



ÇEREZLER



Siteye
giriyordunuz. Adam size "sayfayı kişiselleştir" diye bir link koymuş. Tıklayıp
içinizi döküyorsunuz. Siteyi bir sonraki ziyaretinizde site size adınıza hitaben
"merhaba koçum, seni tanıyorum, bana kendini anlatma, çok iyi bilirim ben seni
... ismin şu, sevdiğin kalem markası Rotring, başın ağrıyınca önceden Novalgin
alırdın şimdi modaya uyup Aspirin Forte.. monitörün philips marka ve sen simit
şeklindeki power düğmesine gıcık oluyorsun ... haa bir de bu siteyi 2. ziyaretin
... nerden bildim ama... hahaha" türünden şaklabanlıklar yapıyor. Peki bunu
nasıl beceriyor? Hepiniz çerezlerle olduğunu biliyorsunuz.



ASP ile istemci
bilgisayarlara çerez yollamak çok basit bir iştir. Gerçekten çok basit. ASP nin
yerleşik delikanlılarından RESPONSE nin bu iş için özel bir metodu var: COOKIES
. İstemciye çerez yollamak için bu metodla birlikte anahtar değerler (bir veya
iki) gönderiyoruz. (bir ayrıntı: ASP de iki anahtar sadece cookies
kolleksiyonunda kullanılıyor). Şimdi örnek kodu inceleyelim:


Response.cookies("kabuk")= "Evet, kabuk"

Response.cookies("kabuklarim")("adi") = "Mucit"

Response.cookies("kabuklarim")("sevdigi_icecek") = "Kızılcahamam Maden Suyu ve
Sodası"

Response.cookies("kabuklarim")("medeni_durumu") = "Bekar!"

Response.Cookies("kabuklarim").Expires = Now() + 90

Peki çerezi yolladık
tarayıcıya. Yani kabukları. Peki bu kabukları görmek istediğimiz zaman ne
yapmamız gerekiyor. İşte o zaman ASP nin diğer delikanlı nesnesi REQUEST talip
oluyor göreve. Çünkü bir şeyleri talep etmek onu görevi. Biz de ona bir emir
vereceğiz. "Çerezler arasından şu anahtardaki değeri bana bir getiriver bakayım"
denildiği anda size o değeri getirecektir. Bu metodu kullanmak, response ile
çerez yollamaya çok benzer. Ancak bir fark vardır. Response de ilgili anahtara
atama yapılır, burada ise request zaten bize bir değer getirir, biz de bu değeri
işimize geldiği gibi kullanırız. Aşağıda REQUEST ile çerezden bilgi almayı
görüyorsunuz.

Adim =
Request.cookies("kabuklarim")("adi")

ne_icerim = Request.cookies("kabuklarim")("sevdigi_icecek")

medeni_halim = Request.cookies("kabuklarim")("medeni_durumu")

Response.Write Adim & " / " & ne_icerim & " / " & medeni_halim

' sayfadaki çıktı: Mucit / Kızılcahamam Maden Suyu ve Sodası / Bekar!

İşte bu örneklerde çerezle
bilgi yollama ve de çerezden bilgi alma tekniğinin ne kadar kolay olduğunu
görüyorsunuz.






KİŞİSEL ZİYARET SAYACI












<% ziyaret = Request.cookies("sitem")("ziyaret") If ziyaret = "" Or Not Isnumeric(ziyaret) Then Response.cookies("sitem")("ziyaret") = "0" Response.Cookies("kabuklarim").Expires = Now() + 365 Response.Write "Siteye ilk defa geldiniz. Saolun. Bir daha gelin haaa.." Else ziyaret = ziyaret + 1 Response.cookies("sitem")("ziyaret") = ziyaret Response.Cookies("kabuklarim").Expires = Now() + 365 Response.Write "Siteye " & ziyaret & ". gelişiniz, aferin hep gelin haa.. " End If %>








APPLİCATION



Belirtilen uygulamadaki tanımlı bütün kullanıcıların bilgiyi paylaşmaları için
Application nesnesini kullanabiliriz. Bir ASP-uzantılı uygulama, sanal dizin ve
onların altdizinlerindeki tüm .asp dosyaları gibi tanımlanır.



Application nesnesi birden fazla kullanıcı tarafından paylaşılabildiği için,
kullanıcıların bir özelliği aynı anda değiştirme girişimlerini önlemek için Lock
ve Unlock yöntemleri kullanılır. Bir örnek yaparak çalışmasını inceleyelim. Bu
örneğimizle kullanışlı sayfa sayaçları yapabilirsiniz. Örneği inceleyince daha
iyi anlayacağınıza eminim...



Aşağıdaki örneğimizi ne olur manuel yazalım ve Sayac.asp adıyla kaydedelim.
İsterseniz kopyala-Yapıştır yapabilirsiniz ama elle yazmanız sizin açınızdan çok
faydalı olacaktır.



Düşünsenize belki hata yapacaksınız ve bu hatayı aramak zorunda kalacaksınız ve
böylece bir kaç kere tekrar etmiş olacaksınız...



<% Response.Expires = 0 'Expires sayesinde sayfanın içeriğinin bilgilerinin cache bellekte saklanmasını engelleriz. %>



<% If (Application("Sayac") = "") Then 'Bu ziyaretçi için Application başlatılmadıysa başlatılsın. Application("Sayac") = 0 End If Application.Lock 'Application'ı Kilitliyoruz. Ve kullanıcı giriş yaptıktan sonra 1 değer 'arttırıyoruz. Application("Sayac") = Application("Sayac") + 1 Application.UnLock 'Ve tekrar serbest bırakıyoruz. Diğer kullanıcılarla bu Application 'kullanılabilsin diye... %>

Bu Sayfaya <%= Application("Sayac") %> Kere Giriş Yapıldı.

Yenilemek İçin Tıklayın.



Bu kodu yazıp çalıştırdığımız zaman, sayfayı her yenilediğimizde sayaç bir
değeri kadar arttırılacaktır. Eğer Sayaç+1 yerine 5 yazarsanız sayacınız 5'er
5'er artacaktır... İsterseniz başka bir örnekle bu nesnemize ait bilgilerimizi
pekiştirelim...



Diyelim ki bir chat scripti yazıyorsunuz ya da bir Active Users Scripti
yazıyorsunuz, o zaman da bu nesnemizden faydalanmamız gerekecektir. Şimdi hemen
diğer bir örneğe geçelim. İlk Olarak bir Chat'e Giriş sayfası yapalım. Tabii bu
sanal bir chat. Yani sadece sayıyı kontrol etmeyi yazacağız... NotePad'i açalım
ve aşağıdaki kodları chat.asp diye kaydedelim...



<%@ Language=VBScript Codepage="1254"%>



Chat Odamıza Gitmek İçin Tıklayın

<% Response.Write "Şu anda Chat Odamızda "&application("chat")&" kullanıcı bulunmaktadır..." %>



Aşağıda göreceğiniz scripti de ChateKatil.asp diye kaydedelim. Ve bir önceki
sayfada yazdığımız scriptten bu sayfaya link verdiğimizi hatırlayarak, o sayfada
<%@ Language=VBScript Codepage="1254"%>

Chat Odamızdan ayrılmak İçin Tıklayın<% Application.Lock 'Hatırladığınız gibi, önce Application'ımızı kilitliyoruz ve sayacı bir 'arttırdıktan sonra kilidini kaldırıyoruz... Application("chat")=Application("chat")+1 'Sayacı bir arttırıyoruz. Application.Unlock 'Ve tekrar Application'ımızı serbest bırakıyoruz ki, diğer kullanıcılar 'giriş yaptığı zaman kilitli kalmasın.... Response.Write "Şu anda Chat Odamızda "&application("chat")&" Kişi Bulunmaktadır..." 'Daha sonra Application'ımızın tuttuğu sayısal değeri, Response 'metoduyla sayfaya basıyoruz. Ve böylece kaç kişinin 'Application'ımızı açtığını görebiliyoruz. Bir ilerki sayfada ise 'Ziyaretçimizin Application'ımızı terkettiği zaman diğer kullanıcıların 'sayacı doğru görüntüleyebilmesi için 1 değer azaltmayı göreceğiz... %>



Aşağıda göreceğiniz scripti de Ayril.asp diye kaydedelim.



<%@ Language=VBScript Codepage="1254"%>

Chat Odamıza Tekrar Bağlanmak İçin Tıklayın

<% Application.Lock 'Hatırladığınız gibi, önce Application'ımızı kilitliyoruz ve sayacı bir 'arttırdıktan sonra kilidini kaldırıyoruz... Application("chat")=Application("chat") -1 'Sayacı bir azaltıyoruz. If Application ("chat")<0>



SESSİON



HTML ve Javascript ile
biraz oynadıysanız, bilirsiniz ki bir sayfadan ötekine değişken değeri aktarmak,
imkansıza yakın derecede zordur. Değişkenlerin ömrü, fonksiyonla sınırlıdır. Bir
ASP sayfasında herhangi bir değişkeni fonksiyon dışında tanımlamakla ve değer
atamakla onu bütün fonksiyonlar için geçerli hale getirebiliriz. Fakat kimi
zaman isteriz ki, bir fonksiyonun değeri bütün sayfalarda aynı olsun;
ziyaretçinin sayfa değiştirmesi ile değişkenin değeri değişmesin. Bunu ASP'de
yapmak çok kolaydır. ASP'de bu zorluğu yenebilmek için değişkenlerimizi
Session nesnesi için oluşturabiliriz; ve bu değer ziyaretçinin oturumu
boyunca devam eder; bütün ASP sayfalarındaki bütün Fonksiyonlar tarafından
bilinebilir. Örneğin:

Session ("Tupras") = 44500





Session Türkçe oturum demektir. ASP'nin özelliği artık bildiğinizi varsayıyorum.
ASP Sunucusu Server'a bağlanan, yani bir talepte (Request'de( bulunan her bir
ziyaretçiye ayrı bir oturum ayrı bir session açar. Tabii Cookie denetimi
yoksa... Ve her Session'a bir ID verir...



Session'ın en büyük özelliği dinamik olmasıdır. Yani ziyaretçinin sitede
bulunduğu her saniye Session nesnesi tarafından takibe alınır... Bu sayede eğer
gerçekten profesyonel planlamalar yaparken Session nesnesinin metotlarından bir
çok şekilde faydalanacağız...



Session nesnemizin en büyük özelliği tanımladığımız değişkenleri diğer geçiş
sayfalarında da kullanabilmemiz için tutmasıdır... Hemen bir örnek yaparak
Session nesnemize giriş yapalım... Önce Bir Form Hazırlayalım ve bu formu
Session.asp diye kaydedelim.





Lütfen Adınızı Giriniz:






Soyadınız:














Aşağıdaki Kodları da SessionDevam.asp adıyla kaydedelim.




<%@ Language=VBScript Codepage="1254"%>



<% Session.Timeout=15 'Oturum süresi, eğer sayfaya hiç bir müdahalede bulunulmazsa 15 'dakikadır. Session ("Isim")=Request.Form("Isim") Session ("Soyad")=Request.Form("Soyad") 'Bir önceki sayfadan 'taşıdığımız değeri Request metoduyla Oturumda tutuyoruz. Dim Icerik Dim IcerikSonu %>



<% IcerikSonu=Session.Contents.Count For Icerik=1 To IcerikSonu 'Session nesnemizde tuttuğumuz değerleri 'Session.Contents yardımıyla saydırıyoruz. Response.Write (Session.Contents(Icerik) &"
")

'Sonucu sayfaya Response ederek yazdırıyoruz. Ve bir
yani

'Break Line koyarak (Alt satıra Geçmemizi sağlar.) Next yordamıyla

'sıradaki Kayıtları ekrana yazdırmasını sağlıyoruz...

Next

%>





Bir ASP sayfasını oturum açmadan yapılandırmak için alttaki kodu
ekleyebilirsiniz.. Değerini True yaparak başka bir sayfada oturumu
başlatabilirsiniz...


<%@ EnableSessionState=False %>






Session Timeout:



Kullanıcı bir uygulamadaki bir sayfayı belirli bir süre istemez ya da
yenilemezse, oturum otomatik olarak sona erer. Bu süre için varsayılan değer 20
dakikadır. Bir uygulama için varsayılan değeri, Internet Information Service
çalışma ekindeki Uygulama Seçenekleri özellik sayfasında değiştirebilirsiniz.




<% Session.Timeout = 16 %>











Session
Abandon:



Abandon yöntemi, bir Session nesnesinde saklı olan tüm nesneleri yok eder ve
kaynaklarını bırakır.



Abandon yöntemini çağırmak istemiyorsanız, sunucu bu nesneleri oturumun süresi
bittiğinde yok eder.



Kullanımı:



Session.Abandon



Abandon yöntemi çağrıldığında, geçerli Session nesnesi silinme için havuza
alınır, ancak geçerli sayfadaki komut dosyası komutlarının tümü işlenmeden tam
olarak silinmez.



Böylece, sonraki Web sayfaları dışında, yalnızca Abandon yönteminin çağrıldığı
sayfadaki Session nesnesinde saklı olan değişkenlere erişebilirsiniz.



Örneğin, aşağıdaki komut dosyasında üçüncü satır Oğuz değerini yazar. Bu, sunucu
komut dosyasının işlenmesini bitirene kadar Session nesnesinin yok
edilmemesinden dolayıdır.




<% Session.Abandon Session("Isim") = "Oğuz" Reponse.Write(Session("Isim")) %>



Sonraki Web sayfalarında Isim değişkenine erişirseniz, değerinin boş olduğunu
göreceksiniz.

Bunun nedeni, Isim değişkeninin, yukarıdaki işlemi bitirdiğinde önceki
Session.Abandon nesnesiyle yok edilmesidir.



Server, bir oturumu kapattıktan sonra başka bir Web sayfasını açtığınızda, yeni
bir Session nesnesi oluşturur. Değişkenleri ve nesneleri, bu yeni Session
nesnesinde saklayabilirsiniz.

Aşağıdaki örnek, sunucu geçerli sayfayı çalıştırmayı bitirdiğinde oturumun son
durumunu verir.



<% Session.Abandon %>







FORM ELEMANLARINDA
DEĞER ALMA



ActiveX Veri Erişim
(ADO) Nesneleri

ASP'nin diğer CGI
tekniklerine göre kolay olmasının (peki, kabul, "kolay görünmesi" diyelim!)
belki de sadece veri erişimini adeta çocuk oyuncağı haline getirmesidir. ADO,
gerçekte bir ASP nesnesi olmaktan çok Server Component'i (sunucu
bileşeni) sayılır. Bu bileşene biz ASP içinden bir ActiveX nesnesi ile ulaşırız.

Veritabanı, günümüzde
giderek Web Programlarının temelini oluşturuyor. Sayfaların unsurları veritabanı
dosyasından alınıyor; ziyaretçilerin verdikleri bilgiler veritabanına yazılıyor.
Bu gelişimin başlıca sebebi, veritabanının site güncelleştirme işlerini
kolaylaştırmasıdır. Söz gelimi bir sayfadaki seçenekleriniz, bir veritabanından
alınıyorsa, bu seçenekleri alan VBScript kodu hiç değişmeden kalacak ve siz
sadece veritabanı dosyanızda ilgili verinin alındığı alana yeni değerler
girerek, sayfanızı sürekli güncel tutmuş olacaksınız. Bir diğer sebep ise
veritabanı dosyalarının idaresinin kolay olmasıdır. Sözgelimi
ziyaretçilerinizden aldığınız bilgileri daha sonra muhasebe kayıtlarınıza veya
adres defterinize, müşteri kütüğüne ya da başka suretle kayda geçirmek
istiyorsunuz. Ziyaretçilerimizin form yoluyla bize ilettiği bilgileri düzyazı
dosyasına işlemenin yollarını Dosya sistemi Nesnesi'ni (FileSystem)
görürken, ele aldık. Bunu yapabiliriz kolayca. Ama daha sonra düz yazı
dosyasının idaresi, veritabanının idaresi kadar kolay olamaz. ASP sayfalarınız
Access, Excel, Paradox, FilePro, SQL Server ve Oracle veritabanlarına ve
spreadsheet dosyalarına erişebilir; bu dosyalardan veri okur ve bu dosyalara
veri yazabilir. Özetle, ASP programlarımızla, SQL-uyumlu veya Windows ve diğer
sistemler için yazılmış ODBC (Open Database Connectivity/Açık Veritabanı
Bağlantısı) ile uyumlu her türlü dosyaya, ADO nesnesi aracılığıyla ulaşabiliriz.



ODBC ve OLE-DB

Bu kitapçığın
baştarafında, ASP dosyalarınızı geliştirmeye başlamadan önce bilgisayarınızda
ODBC (Open Database Connectivity/Açık Veritabanı Bağlantısı)
sürücülerinin kurulu olması gerektiğini belirtmiştik. ODBC, ADO'nun kullandığı
tek sistem değildir; ve Microsoft firması, ODBC'nin yerine hızla OLE-DB adını
verdiği yeni bir teknolojinin alması için yoğun çaba içinde. OLE-DB, ODBC'nin
Web'de sağladığı başarının üzerine bina edilen yeni bir teknoloji. ODBC,
ilişkilendirilmiş (relational) veritabanlarına erişmek üzere tasarlandığı halde
OLE-DB her türlü veritabanına erişebilir. OLE-DB, ASP programlarımıza yeni
nesneler kazandırabilir; kullanılmaya hazır elektronik ticaret bileşenlerini
kullanmaya imkan verir. Bu konuda geniş bilgiyi, Microsoft'tan edirebilirsiniz.
ASP sayfalarımızda kullanacağımız ADO nesneleri ilerde de ODBC sürücülerine
erişme imkanını koruyacağı için, şimdilik sadece ODBC tekniği ile çalışmakta ve
bu tekniği öğrenmekte sakınca yok. OLE-DB, ODBC'nin yerini almayacak; fakat
içinde ODBC'yi de bulunduracak. Bu da şu anda oluşturacağımız ASP
uygulamalarının ilerde OLE-DB tekniği ile çalışan sunucularda işleyeceği
anlamına geliyor.



Şimdi ADO ile aşağıda
yapacağımız küçük örnekler için bilgisayarınızda kurulu bir veritabanı programı
varsa onu kullanarak bir veritabanı dosyasında uyeler adıyla şu tabloyu
oluşturabilirsiniz:

























































Alan Adı:



Veri türü



uyeNo




AutoNumber
(Birincil Anahtar/Primary Key)












uyeAdi




metin












uyeSoyadi




metin












email




metin












mesaj




memo













Daha sonra da renkler
adıyla şu tabloyu yapın:





























Alan Adı:



Veri türü



renkID




AutoNumber
(Birincil Anahtar/Primary Key)












renk




metin











Bu tablolardan
birincisine bir kaç isim ve diğer bilgileri; ikincisine ise dört-beş renk adı
girin. Bilgisayarınızda veritabanı oluşturma programı yoksa bu kitapçığın
kodları arasında bulunan uyeler.mdb adlı MS-Access dosyasını
kullanabilirsiniz. Bu dosyayı, kişisel Web Server'ınızın kök dizinine
kopyalayın. Sonra, Denetim Masası'nı açın ve adı ODBC, ODBC 32 Bit,
ya da ODBC Data Source olan simgeyi çalıştırın; ikinci sekme olan System
DSN'i tıklayın.





























Açılacak kutuda Add/Ekle
düğmesini tıklayarak, yeni veri kaynağı oluşturmak için ilk adım olan veriyi
okumakta kullanacağımız sürücüyü seçebileceğimiz kutunun açılmasını sağlayın.
Burada, yukarıda oluşturduğunuz veri dosyasına uygun sürücüyü seçin. Örnek
uyeler.mdb'yi kullanıyorsanız, birinci seçenek olan Microsoft Access
Driver'ı seçmeniz gerekir. Son düğmesini tıklayın ve Access
dosyasının kurulumunu yapmaya başlayalım. Buradaki Data Source Name (DSN,
Veri Kaynak Adı), biraz sonra ADO nesnesiyle ilgili metodları ve
deyimleri yazarken kullanacağımız veri adıdır; buraya "uyeler" yazın;
çünkü örneklerde bu veriye "uyeler" adıyla gönderme yapacağız.
İsterseniz, Description/Açıklama bölümüne veritabanının niteliğini
belirten bir kaç kelime yazabilirsiniz. Sonra, Select/Seç düğmesini
tıklayarak ve açılıcak diyalog kutusu yardımıyla veritabanı dosyasını
kopyaladığınız yerde bulun; OK/Tamam'ı tıklayarak, veritabanı seçme
işlemini tamamlayın.























DSN
oluşturma kutularını sırasıyla OK/Tamam düğmelerini tıklayarak kapatın; "uyeler"
verisi, şu andan itibaren bütün Web uygulamalarımızın hizmetine girmiş demektir.
Internet sitenize koyacağınız ve veritabanına erişmesi gereken sayfalarınız için
bu işlemi gerçek Internet ortamında da yapmak zorundasınız. Veritabanı dosyanızı
Internet sitenizde kök dizinine veya bir diğer dizine kopyaladıktan sonra sistem
yöneticisine ya elektronik mektupla, ya da evsahibi firmanın yönetim ve teknik
destek yardımı sağlayan sayfasında veritabanınızın dosya adını, yolunu, ve DSN
olarak kullanmak istedeğiniz ismi bildirerek, bizim burada yaptığımız işi Server
yöneticisinin yapmasını sağlamamız gerekir. ADO'nun bize sağladığı imkanlardan
yararlanabilmek için onun nesnelerini kullanılırız. Bu bölümde ADO'nun nesneleri
ve metodlarını ele alacağız.



Connection
(Veritabanına bağlantı)

ADO'dan yararlanabilmek
için kullanacağımız ilk nesne Connection'dır. Bu nesne ile veritabanı ile
bağlantı sağlarız, yol açarız:

<% Dim Veriyolu Set Veriyolu = Server.CreateObject("ADODB.Connection") Veriyolu.Open "Veri_adi" %>







Recordset (Kayıt
dizisi)



<% Dim Veriyolu, Kayitdizisi Set Veriyolu = Server.CreateObject("ADODB.Connection") Veriyolu.Open "Veri_adi" Set Kayitdizisi = Veriyolu.Execute("SELECT * FROM Veri_adi") %>




Recordset.Open

Veritabanına dayanan
Web uygulamalarımızda sorun buradaki gibi sadece veriyi okumakla bitmeyebilir;
veriyi güncelleştirmek veya silmek isteyebiliriz. Bunun için doğruca ADO'nun
.Recordset metodundan yararlanmamız gerekir. .Recordset metodu ne
yapar? Tıpkı ekranınızdaki bir yazının içinde duran imleç (cursor) gibi hayalî
bir imleci götürür verilerinizin en başına koyar. Bu hayali imleci veritabanı
üzerinde dolaştırmak ve gittiği yerdeki değeri okutmak bizim işimizdir.


Bir veriye bağlantıyı
kurduktan sonra kayit dizimizi .Recordset metodu ile sağlayacaksak,
yukarıdaki örnek kodumuzu şöyle yazmak gerekir:













<% Dim Veriyolu, Kayitdizisi, Sorgu Set Veriyolu = Server.CreateObject("ADODB.Connection") Veriyolu.Open "Veri_adi" Set Kayitdizisi = Server.CreateObject("ADODB.Recordset") Sorgu = "SELECT * FROM Veri_adi" Kayitdizisi.Open Sorgu, Veriyolu, aOpenStatic %>


Bu kod ile,
.Recordset metodu son .Open komutu ile bizim için veri bağlantısını
sağlar; verdiğimiz SQL Sorgusu icra edilir ve kayıt diziniz Kayitdizisi'ne
kaydedilmeye hazır hale gelir. Şimdi imlecinizi ilerleterek, veriyi fiilen
okutmanız gerekir; ki bunu yapmak için yukarıda kolayca .Execute metodu
ile oluşturduğumuz kayıt dizisinde kullandığımız basit .MoveNext'ten daha
çok imkana sahibiz: MoveFirst: Kayıt dizisinin (Recordset'in) birinci
satına gider.

MoveLast:
Kayıt dizisinin (Recordset'in) son satına gider.

MoveNext:
Kayıt dizisinin (Recordset'in) bir sonraki satına gider.

MovePrevious:
Kayıt dizisinin (Recordset'in) bir önceki satına gider.

Move:
Kayıt dizisinin (Recordset'in) içinde vereceğiniz sayıya göre ilerler. Bunun
için iki sayı vermeniz gerekir: başlangıç noktası ve ilerlenecek kayıt sayısı.



Şimdi
gelelim RecordSet nesnemize. RecordSet.Open dediğimiz zaman bu nesnemiz ne
yapar?



RecordSet, ekranımızda bir yazının içinde yanıp sönen bir imleç gibi çalışır.
Yani bir nevi Hayalet Cursor. Recordset'in amacı bu imleci verilerinizin en
başına koymaktır.



Artık bundan sonrası bize kalan bir iştir. Bu imleci, kayıtlar arasında
çalıştırmak bizim işimizdir.

Bu imleci 4 şekilde ayarlayabiliriz...




Forward Only:
Bu imlecimizle, veritabanındaki kayıtlar arasında sadece ileri doğru
ilerleyebiliriz. Geri yani yukarı gitme imkanımız yoktur. Ayrıca yeni kayıt
ekleyemeyiz. Ve eğer biz açtıktan sonra, o anda başkaları tarafından
değiştirilen veriler varsa, veritabanını yeniden kapatıp açana kadar göremeyiz.
Eğer Adovbs.inc'le birlikte kullanıcaksak kod içindeki kullanımı

adOpenForwardOnly'dir.






Static:
Durağan anlamına gelir. ForwardOnly'e ek olarak, yukarı doğru ilerleyebilir ve
yeni kayıtlar ekleyebiliriz... Adovbs.inc'le birlikte kullanıldığında kod
kullanımı, adOpenStatic'tir... Eğer biz açtıktan sonra, o anda başkaları
tarafından değiştirilen veriler varsa, veritabanını yeniden kapatıp açana kadar
göremeyiz.




Dynamic:

Adından da anlaşılabileceği gibi, bu cursor tipi, tam özelliklere sahip cursor
tipidir. Yukarı ve aşağıya ilerleyebilir, yeni kayıt ekleyebilir ve
değiştirebiliriz. Eğer biz açtıktan sonra, o anda başkaları tarafından
değiştirilen veriler varsa, veritabanını yeniden kapatıp açmadan anında
görebiliriz...Kod sayfasında, Adovbs.inc'le birlikte kullanıcaksak, kod içinde
kullanımı

adOpenDynamic'tir...




Keyset:
Bu metodumuzla, başkaları tarafından değiştirilen kayıtları görebiliriz...
Cursor'umuz yukarı ve aşağı ilerleyebilir. Adovbs.inc'le birlikte kod içinde
kullanımı,
adOpenKeyset'tir...

Kod içinde kullandığımız, adOpenStatic'in hemen yanındaki ise RecordSet
nesnemizin kilit özelliğidir. Farklı çeşitlerde kilitler vardır. Bir kaç
tanesini yazacağım.





AdLockReadOnly:
Kayıtlı verilerimizin değiştirilmesini, üzerine yazılmasını engellememizi
sağlar. Yeni kayıt girişini engeller. Sadece Listelemeye izin verir...




AdLockOptimistic:
Bu metodumuz da kayıtlarımızın güncelleştirilmesini, yeni kayıtlar eklememizi,
ve istersek silmemizi sağlar.




AdLockPessimistic:
Bu metodumuz da eğer bir veritabanı üzerinde işlem yapıyorsak, işlemlerimiz
bitene kadar, diğer işlem yapabilecek kişileri engellemk için RecordSet'e kilit
koyar.



DSN'siz Veri
Bağlantısı



Veriyolu.Open "Veri=" & Server.MapPath("..../veriler/uyeler.mdb") &


"; Driver = {Microsoft Access Driver (*.mdb);"


Burada, DNS'siz
bağlantı için veritabanı dosyasının Server'daki göreli yerini, adını ve hangi
sürücünün kullanılacağını belirtiyoruz. Aynı bağlantıyı, doğruca Jet sürücüsü
için de yazabilirdik:

Veriyolu.Open "Veri=" & Server.MapPath("..../veriler/uyeler.mdb")


& "; Provider=Microsoft.Jet.OLEDB4.0;"


Tabiî buradaki sorun
kullandığınız veritabanı dosya türüne uygun Microsoft Jet sürücüsü
seçebilmektir. Bu konuda geniş bilgi Microsoft'un Internet sitesinde
bulunabilir.



SQL



SQL lafları çeşitli temel
komutlardan oluşur. Bunlar SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING,
UPDATE, DELETE, INSERT dir. Gördüğünüz gibi ne kadar da fakir bir dil. Biz
bunlardan işimize yarayacak olanları inceleyeceğiz.

POPÜLER SQL LAFLARI

TABLODAN TÜM KAYITLARI
TÜM ALANLARIYLA SEÇMEK

Yani tablonun tamamını
seçmek için kullanacağımız SQL lafı şudur:

sözdizimi:

"SELECT * FROM
"

TABLODAN KAYITLARI
İSTEDİĞİMİZ ALANLARI SEÇMEK

söz dizimi:

"SELECT ,
, .. , FROM "

TABLODAN BELİRLİ
KAYITLARI SEÇMEK (SÜZGEÇLEME)

Örneğin tablomuzda kent
diye bir alanımız var. Ve mevcut kayıtlar arasından kenti "ankara" olanları
seçmek istiyoruz.

SQL lafımız:

"SELECT * FROM
tablomuz WHERE kent = 'ankara' "

Birden fazla koşul da
süzgeç de koyabiliriz. Tablomuzda yas diye bir alan olsun. Kenti ankara olan ve
yaşı 30 dan büyük olanları seçmek için SQL lafı:

"SELECT * FROM
tablomuz WHERE kent='ankara' AND yas < burada =" ,"> , < , <> gibi
mukayese operatörleri kullanılıyor.

TABLODAN KAYITLARI
SIRALI HALDE SEÇMEK

Örneğin tablomuz da kenti
'ankara' olanları yaş sırasında seçmek istiyoruz. Bunun için ORDER BY alan_adi
yazımını kullanırız. Şunun gibi :

"SELECT * FROM
tablomuz WHERE kent = 'ankara' ORDER BY yas"

Eğer azalan sırada
seçeceksek ORDER BY alan_adi DESC yazımını kullanacağız.

SQL hakkında bilgiler
sonraki sayfada devam ediyor.

TABLODAN KAYIT SİLMEK

Örneğin tablomuzdan yaşı
18 den küçük olanları silmek için SQL lafı:

"DELETE FROM tablomuz
WHERE yas < sql="INSERT INTO tblVeri (Adi,Soyadi,Telefon,Dogum_Tarihi,Mail) values ('" veri_yolu =" Server.MapPath(" bcumle = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" bag =" Server.Createobject(" kset =" bag.execute(">

<% i=1 %>

Yeni Kayıt















<% Do While Not kset.eof %>









<% kset.movenext %>

<% i = i + 1 %>

<% Loop %>

# Ad Eylemler
<%= i %> <%= kset("ad") %> ">düzenle ">sil


<% kset.Close Set kset = Nothing bag.Close Set bag = Nothing %>

Bu script, basit bir
şekilde /db alt dizinindeki kisiler.mdb ile bağlantı kuruyor. kisiler
tablosundan aldığı tüm kayıtların "ad" alanındaki değerlerini yazdırıyor. Ve de
her bir kayıt için düzenleme ve silme linkleri oluşturuyor. Linkler
oluşturulurken sorgu stringi içinde eylemi gerçekleştirecek script dosyasına
"id" anahtarıyla kaydın "id" alanındaki değeri gönderiliyor. Tabi bunlar
kayıtseti sonunda duracak bir döngü içerisinde yapılıyor. Veriler tablo
hücrelerine döngüyle döküldüğüne de dikkat ediniz.


KAYIT_DUZENLE.ASP ve KAYIT_GUNCELLE.ASP

Kayıtların listelendiği
kayitlar.asp de her kaydın yanında bir düzenle bağlantısı var. Bu bağlantı ile
duzenle.asp dosyasına işaret ediliyor. Bir de sorgu cümlesi konuluyor yanına: "duzenle.asp?id=XX"
Buradaki XX yerine geçerli kaydın id alanındaki değeri yazılıyor. Şimdi kayıt_duzenle.asp
ye bakalım.

Kod2. kayit_duzenle.asp

<% id = Request.Querystring("id") If Not Isnumeric(id) Or Len(id)=0 Then mesaj "Yanlış Sorgu Cümlesi" End If '----------------------------------------------------------------------------------- Veri_yolu = Server.MapPath("db/kisiler.mdb") Bcumle = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Veri_yolu Set bag = Server.Createobject("ADODB.Connection") bag.Open (Bcumle) Set kset = bag.execute("SELECT * FROM kisiler where id =" & id) If kset.eof Then mesaj "Olmayan Kayıt İstendi" End If %>

Kayıtlar



























































Ad ">
Teleon ">
Email ">
ICQ ">
Adres ">
Doğum Günü ">



">



<% kset.Close Set kset = Nothing bag.Close Set bag = Nothing %>

<%'--------------------------%>

<% Sub mesaj(msg) %>

<%= msg %>



<% response.end %>

<% End Sub %>

<%'--------------------------%>

Aslında bu scriptin de
öncekinden pek farkı yok. sadece sorgu cümlesinden "id" anahtarındaki değeri
alıyor. Ve bu id değerini kullanarak tablodan tek kayıt seçiyor. ("SELECT * FROM
kisiler where id =" & id). Seçtiği kayda ait değerleri ise form input alanlarına
döküyor. Formun action özelliğine ise kayit_guncelle.asp yazılmış. Güncelleme
işini bu dosyaya havale ediyoruz.

Kod3. kayit_guncelle.asp

<% ad = Request.Form("ad") id = Request.Form("id") telefon = Request.Form("telefon") dgunu = Request.Form("dgunu") icq = Request.Form("icq") email = Request.Form("email") adres= Request.Form("adres") '----------------------------------------------------------------------------------- Veri_yolu = Server.MapPath("db/kisiler.mdb") Bcumle = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Veri_yolu Set bag = Server.Createobject("ADODB.Connection") bag.Open (Bcumle) Set kset = Server.Createobject("ADODB.Recordset") sql = "SELECT * FROM kisiler WHERE id = " & id kset.open sql, bag, 1, 3 kset("ad") = ad kset("telefon") = telefon kset("email") = email kset("adres") = adres kset("icq") = icq kset("dogum_gunu") = dgunu kset.update kset.Close Set kset = Nothing bag.Close Set bag = Nothing Response.Write "

Kayıt Yapıldı.. Başka bir arzunuz? "

Response.Write "

Kayıtlar"

%>



KAYIT_YENI.ASP

kayitlar.asp de Yeni Kayıt
linkinde işaret edilen kayit_yeni.asp... Yaptığı iş şu. Veritabanına bağlanıp
ilgili tablodan oluşturduğu kayıt seti içine yeni bir kayıt ekliyor. Kayıtsetini
güncelliyor, "id" alanındaki değeri bir değişkende saklıyor. nesneleri
kapatıyor. Ve de kayit_duzenle.asp dosyasına "id" anahtarıyla yeni eklenen
kaydın "id" alanındaki değeri gönderiyor. Yani bu sayfa sadece işlem yapıyor.
Kullanıcıya gözükmeden işlemi tamamlayıp düzenleme sayfasına yöneliyor.

Kod4. kayit_yeni.asp

<% response.buffer=true Veri_yolu = Server.MapPath("db/kisiler.mdb") Bcumle = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Veri_yolu Set bag = Server.Createobject("ADODB.Connection") bag.Open (Bcumle) Set kset = Server.Createobject("ADODB.Recordset") sql = "SELECT * FROM kisiler" kset.open sql, bag, 1, 3 kset.addnew kset.update id = kset("id") kset.Close Set kset = Nothing bag.Close Set bag = Nothing Response.Redirect "kayit_duzenle.asp?id=" & id %>



KAYIT_SIL.ASP

Sorgu cümlesindeki "id"
anahtarından alınan id değeri kullanılarak şu SQL ifadesi oluşturuluyor.

DELETE FROM kisiler WHERE id = " & id . Ve bu ifade bağlantı tarafından
yürütülüyor (execute). Sonuçta id si alınan kayıt tablodan silinmiş oluyor.
Kullanıcı da geldiği sayafaya yönleniyor.

Kod5. kayit_sil.asp

<% response.buffer = True id = Request.Querystring("id") '----------------------------------------------------------------------------------- Veri_yolu = Server.MapPath("db/kisiler.mdb") Bcumle = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Veri_yolu Set bag = Server.Createobject("ADODB.Connection") bag.Open (Bcumle) sql = "DELETE FROM kisiler WHERE id = " & id Set kset = bag.execute(sql) Set kset = Nothing bag.Close Set bag = Nothing Response.Redirect (Request.ServerVariables("HTTP_REFERER")) %>



Gönderen: HIZLI Tarih: 5/05/2007

Ms-dos komutları (Komut istemi)

ASSOC / Dosya ortaklıklarını görüntüle.
AT / Programları ve komutları uygulamak için zamanı ayarla.
ATMADM / Windows ATM sağrı yöneticinin gördüğü adresleri ve bağlantıları listele
BREAK / CTRL + C'i Etkinleştir / devre dışı bırak
CACLS / ACL dosyaları göster ve değiştir
CALL / Grup dosyasını diğer grup dosyasından çağır.
CD / Rehberi değiştir.
CHCP / Uluslar arası klavye ve karakter bilgilerini ilave et
CHDIR / Adresi değiştir.
CHKDSK /FAT diskdeki hataları tara.
CHKNTFS / NTFS disk'deki hataları tara
CLS / Ekranı temizle.
CMD / Komut satırını çalıştır.
COLOR / Ön plan resmini değiştir.
COMP / Dosyayı sıkıştır.
COMPACT / Dosyayı sıkıştır,aç,.
CONTROL / Ms-dos da denetim masası simgelerini aç
CONVERT / FAT'i NTFS'e dönüştür
COPY / Bir yada daha fazla dosyayı öteki konuma kopyala
CTTY / Bilgisayarın giriş çıkış aygıtlarını değiştir
DATE / Sistem tarihini görüntüle,değiştir
DISKCOMP/ Disk'i diğer bir disk ile karşılaştır
DRIVPARM / Asıl aygıt sürücülerinde yeniden yazmayı etkinleştir.
ECHO / Mesajları göster ,etkinleştir ve devre dışı bırak
EDIT / Dosyayı görüntüle ve değiştir.
EDLIN / Dosyayı görüntüle ve değiştir.
EMM386 / Genişletilmiş hafıza yöneticisini görüntüle
ENABLE / Konsol geri alma komutunu etkinleştirme ve devre dışı bırakma
SCANDISK / disk taramayi calistir.
QBASIC / Qbasic i ac.
RENAME / yeniden adlandir.
RMDIR /bos klasoru sil.
SHUTDOWN/ bilgisayarı kapat
SMARTDRV / geleneksel ve genişletilmiş hafıza için disk hafızası olustur
SORT / kisa giris ve cikislari goster
SWITCHES/ ms-dos a fonksyion ekle,kaldır.
SYS / Sistem saatini disk sürücüsüne yükle
TIME / sistem saatini goster,ayarla.
TITLE / ms-dos penceresindeki basligi degistir
TRACERT / karsidan gelen network paketlerinin yolunu goster
TREE / Disk'in yuzeysel agacini goster
TYPE / Dosyanin icerigini goruntule
UNDELETE / silinemeyen dosyalari silvisuall
UNFORMAT / bicimsiz disk surucusu.
UNLOCK /Disk'in klitini ac.
VER / Versiyon bilgisini goster.
VERIFY / diske yazmak gerektiginde karar vermeyi etkinlestir yada devre disi birak.
VOL / cilt bilgisini goster
XCOPY / Başka bilgisayarlardan çoklu dosyaları kopyala
TRUENAME/ dizinde var olan kişileri gösterir
TASKKILL / ihtiyaç duyulmayan uygulamaları kapat

Etiketler:

ECBanner bloggping TurkeyRank.Com - Pagerank Servisi pagerankonline.de - Pagerank Anzeige ohne Toolbar On our way to 1,000,000 rss feeds - millionrss.com
Seo Memurvadisi Backlink Austausch ECBannerFree Automatic Backlinks Free Automatic Backlinks Free Automatic BacklinksFree Automatic Backlinks Free Automatic BacklinksFree Automatic Backlinks
Bu sitedeki yazılar telif hakkları göz önüne alınarak yayınlanmaktadır. Kaynak göstermeksizin Tamamı veya Bir Kısmının KOPYALANMASI YASAKTIR. yayınlanan bu makale ve eserlerin hak sahipleri herhangibir nedenle telif hakkı idda ederlerse ve bizce uygun görülmesi halinde (gerçeklik esası olması dahilinde) bize lütfen mail atsınlar (ozkan@mail.nu) en kısa sürede eserleriniz sitemizden kaldırlır. © 2008 www.odeveson.blogspot.com