Jump to content

mucit41

Üye
  • Posts

    3550
  • Joined

  • Last visited

  • Days Won

    12

Everything posted by mucit41

  1. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"]Çikolata baskı yapan yazıcı [/color] [/b] [color="#0000FF"][b][u]Kaynak Linki :[/b][/u][/color] [code]http://www.haber5.com/cikolata-baski-yapan-yazici-haberi-137918.aw [/code] [color="#0000FF"][b]Konu Tarihi:[/b][/color] [b]06 Temmuz 2011 Çarşamba[/b] [quote] [b] Mürekkep yerine çikolata kullanan bir yazıcı geliştirildi... [img]http://www.haber5.com/img/cikolata.jpg[/img] İngiltere'nin Exeter Üniversitesi'nde araştırmacılar, mürekkep yerine çikolata kullanan bir yazıcı geliştirdi. Bilgisayar tasarımlarını metal ve plastik kullanarak üç boyutlu bir nesne halinde şekillendiren yazıcılar piyasada halihazırda zaten mevcut. Exeter Üniversitesi, aynı fikri çikolata için uyarlardı; ve henüz prototip halinde olmasına karşın, çikolata yazıcısına sektörden kayda değer ilgi var. Araştırmanın başındaki bilimadamı Dr. Liang Hao, çikolata yazıcısının diğer üç boyutlu yazıcılarla aynı tekniği kullandığını söylüyor. Yazıcı, üst üste tabakalar halinde çikolata kullanarak ortaya üç boyutlu bir tasarım çıkartıyor. Makina, her tabaka için döktüğü çikolatanın katılaşmasını bekleyip, üzerine sıradaki tabakayı döküyor. ''Gıda yazıcıları'' fikri aslında çok yeni bir şey değil. 2010 yılında ABD'nin Cornell Üniversitesi'nde de sıvı gıdaları mürekkep yerine kullanan özel yazıcılar geliştirmeye yönelik çalışmalar yapılmıştı. Hem lezzetli olup hem de üç boyutta mükemmel bir şekle sahip yiyecek ürünleri, hediyelik eşya sektörüne çok cazip geliyor. İnternet üzerinden hediyelik eşya satan findmeagift.co.uk yöneticisi Joanna Grant, ''Çikolata basıyor oluşu haliyle ilgi çekiyor, çok sayıda çikolata aşığı var.'' dedi. Joanna Grant, müşterilerin istedikleri bir tasarımı bilgisayara yükleyip çikolata şeklinde elde edebileceklerini, ve bunun ticari yönden çok cazip bir hediye fikri olduğunu söylüyor. [/b] [/quote]
  2. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"]Çelikten Daha Sağlam Kağıt Üretildi [/color] [/b] [color="#0000FF"][b][u]Kaynak Linki :[/b][/u][/color] [code] http://www.haberprogram.com/h/2011/07/06/161081-celikten-daha-saglam-kagit-uretildi.php[/code] [color="#0000FF"][b]Konu Tarihi:[/b][/color] [b]06 Temmuz 2011 Çarşamba[/b] [quote] [b] Kanada'nın Alberta eyaletinde çelikten daha sağlam kağıt üretildi. Eyalet hükümeti ile federal hükümetin ortaklaşa yürüttükleri 'Alberta Buluşlar Sistemi' kapsamında bir süredir devam eden çalışmalarda 'Nanocrystalline cellulose' (NCC) isimli bir madde elde edildi. Alberta Teknoloji Bakanı Greg Weadick, konu ile ilgili yaptığı açıklamada, "Ağaç ve saman hamurundan elde ettiğimiz madde, çelikten daha sağlam ve dayanıklı. Pilot tesislerde şimdilik haftada 100 kilogram üretilecek olan NCC, çevreye zararsız, hafif, sağlam ve kullanım alanı oldukça geniş. Kırılan kemiklerin yeniden ve daha sağlam yapılmasından tutun, akla gelebilecek her alanda kullanılabilecek özellikte" dedi. Katı, sıvı ya da jel halinde üretilebilen NCC için 5,5 milyon Kanada Doları (9,3 milyon TL) yatırım yapıldığını kaydeden Alberta Teknoloji Bakanı Greg Weadick, "NCC, her alandaki üretim ve hizmette alışkanlıkları değiştirecek ve çığır açacak bir malzeme" diye konuştu. Bakan Weadick üretimin, gelecek ticari taleplere göre şekillendirileceğini sözlerine ekledi. [/b] [/quote]
  3. [center][img]http://i.imgur.com/yWsBp.jpg[/img][/center] [center][color="#800080"][b]Tüm TNCTR camiası ve tüm islam aleminin 2011 yılı mirac kandillerini kutlar,ibadetlerinizin bereketli olmasını dilerim.[/b][/color][/center] [center][img]http://i.imgur.com/mu1ks.jpg[/img][/center] [color="#FF0000"]Not:Gecen sene acmış olduğum kutlama konusunu bu güne has olarak öne çıkarmış oldum.Yeni başlık adı altında açılmasın diye bilgi iletisidir.[/color]
  4. [quote] [b]Internet Explorer 9 ile internette gezindiğiniz vakit otomatik olarak bir çok bilgiyi toplar ve saklar.Web sayfalarının geçici internet dosyalarını, tanımlama bilgilerini, web site geçmişlerini, wb sitelerine kaydedilen parolalar vs. bir çok bilgiyi tarayıcınız saklamaktadır.Bu bilgilerin saklanmasını istemiyorsanız ve bu bilgileri temizlemek istiyorsanız aşağıda anlatıldığı gibi silebilirsiniz.[/b] [img]http://www.bilgisayarkurdu.com/wp-content/uploads/2011/04/g%C3%B6z-atma-ge%C3%A7mi%C5%9Fi.png[/img] [b]Yapmanız Gerekenler ■Internet Explorer’ı açın. ■Araçlar düğmesini tıklatın ■Güvenlik’in üzerine gelin ve sonra Gözatma geçmişini sil’i tıklatın ■Yukarıdaki resimde gördüğünüz pencere açılacaktır.Burada silmek istediğiniz dosyaların onay kutucuğuınu seçin. ■Sil’i tıklayarak işlemi tamamlayın.[/b][/quote] [color="#800080"][b]Yukardakileri denedinmi?birde alttaki programı indir ve onunla bir dene.[/b][/color] [code]http://www.clearprog.de/downloads.php?lang=en[/code]
  5. Bu tür vakkalar olası dünyada ki beklenen büyük depremleri tetiklemesi olurmu?
  6. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"] Dev asteroit Dünya’yı sıyıracak [/color] [/b] [color="#0000FF"][b][u]Kaynak Linki :[/b][/u][/color] [code] http://www.haber3.com/dev-asteroit-dunyayi-siyiracak--918390h.htm[/code] [color="#0000FF"][b]Konu Tarihi:[/b][/color] [b]27 Haziran 2011[/b] [quote] [b] Bir asteroitin bugün Dünya’nın atmosferini sıyırıp geçmesi bekleniyor. [img]http://www.haber3.com/images/news/456453.jpg[/img] Gök bilimciler tarafından çarşamba günü keşfedilen ve 2011 MD olarak adlandırılan bir asteroitin bugün Dünya’nın atmosferini sıyırıp geçmesi bekleniyor. Gezegene 12 bin kilometreye kadar yaklaşacak olan göktaşı, Dünya’nın manyetik alanının etkisinde kalırsa atmosfere de girebilir. 2011 MD, amatör gök bilimciler tarafından teleskoplarla gözlemlenebilecek. ABD Ulusal Havacılık ve Uzay Dairesi (NASA), ABD Hava Kuvvetleri ve Massachusetts Teknoloji Enstitüsü (MIT) tarafından yürütülen LINEAR programının tespit ettiği 2011 MD, bugün [color="#FF0000"]TSİ 19.14’te[/color] Dünya’nın üzerinden çok büyük bir süratle geçecek. NASA yetkilileri, asteroitin yerden 12 bin metre yükseklikte, Antarktika’nın açıklarında ve Güney Afrika’nın yaklaşık 3,218 km güneybatısından geçeceğini açıkladı. Dünya’ya bu kadar yaklaşacak olmasına rağmen, 9-30 metre genişliğindeki 2011 MD tehdit oluşturmuyor. Ancak, asteroitin Dünya’nın manyetik alanından etkilenmesi ve bu yüzden yörüngesinden sapması riski var. Böyle bir durumda, 2011 MD Dünya’nın üzerini kaplayan uydulara çarpabilir. NASA’nın California eyaletindeki Jet İtiş Gücü Laboratuar’ının verilerine göre, 2011 MD büyüklüğündeki bir gök cismi ortalama 6 yılda bir Dünya’ya yakın bir noktadan geçiyor. Rekor şubatta kırıldı Yetkililer, büyüklüğünün 10 metre olduğunu düşündükleri asteroitin atmosfere girecek olması halinde bile tehlike arz etmeyeceğini, çünkü “25 metreden küçük gök taşlarının atmosfer tabakalarında parçalandığını” ifade etti. Öte yandan, 2011 MD Dünya’ya en yakın geçen asteroit olmayacak. Rekor, 4 Şubat 2011 tarihinde Dünya’ya 5,471 km yaklaşan CQ1 asteroitine ait. Gök bilimciler, büyük teleskoplara sahip olan amatör gözlemcilerin 2011 MD’yi görebileceğini ancak asteroitin izlediği koordinatların çok iyi takip edilmesi gerektiğini belirtti.(Milliyet) [img]http://orbit.psi.edu/~tricaric/pub/2011MD_POV.gif[/img] [img]http://orbit.psi.edu/~tricaric/pub/2011MD.gif[/img] [/b] [/quote]
  7. Ordan aldığım e maili kendi msn kayıt ettim kendi msn mide oraya kayıt etmek istedim olmadı,her iki taraf bir birini görmüyor,tam bir cins program.
  8. Yapanlar kendi serveri dışındaki serverleri iptal etmişler.113 ülkeden 250 Bin kişi ziyaret ettiklerini beyan ediyor site kilitlenmiş.İşe yararmı bilmiyorum.
  9. [quote name='xfailedkomplex' date='27 June 2011 - 02:02 ' timestamp='1309129330' post='1036310'] İndirdim kurdum ve sonuç fiyasko kullanıcı adı parola hatası veriyor ve çok basit fake bir yazılım gibi duruyor. [/quote] Kayıt ol kısmından kayıt olacaksın şifre yazıcan giricen msn e ama tek eksiği msn dekileri arkadaşları kayıt etmiyor,kendi platforunda kayıt olanlar ile görüşme sağlıyor anlaşılan.
  10. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"] MSN Messenger'a Türk rakip [/color] [/b] [color="#0000FF"][b][u]Kaynak Linki :[/b][/u][/color] [code] http://www.haber3.com/msn-messengera-turk-rakip-917990h.htm[/code] [color="#0000FF"][b]Konu Tarihi:[/b][/color] [b]26 Haziran 2011[/b] [quote] [b] Uşak'ta bir grup yazılım mühendisinin geliştirdiği "MSP Messenger" pek çok özelliğie sahip. [img]http://www.haber3.com/images/news/217553.jpg[/img] MSP Messerger'ı hayata geçiren ekipten Yazılım Mühendisi Necmettin Özalp, yaptığı açıklamada, yaklaşık 4 yıl süren AR-GE çalışmaları sonucu “Türkiye'nin ilk online iletişim yazılımı”nı hayata geçirdiklerini söyledi. MSP Messenger adını verdikleri programın mevcut online iletişim yazılımlarından farklı olarak bir çok yeniliğe sahip olduğunu belirten Özalp, programın 161 dilde sesli tercüme yapabildiğini, kullanıcılara online alışveriş yapma olanağı sunduğunu, program üzerinden tv izleme ve radyo dinleme imkanı bulunduğunu kaydetti. Yazılımın internet üzerinden ücretsiz olarak kullanıma sunulduğunu belirten Özalp, “İlk 3 gün içinde 11 ülkeden, 30 binden fazla kişi tarafından kullanılmaya başlandı” dedi. Amaçlarının 6 ay içinde kullanıcı sayısını 10 milyonun üzerine çıkarmak olduğunu ifade eden Özalp, sözlerine şöyle devam etti: “Dünyada sınırlı sayıda online iletişim yazılımı var. Bu yazılımların borsa değeri 25 ila 50 milyar dolar arasında değişiyor. ABD, Rusya, Çin gibi ülkelerdeki tanınmış online iletişim yazılımları bilgisayar kullanıcılarının taleplerine tam olarak cevap veremediği için MSP Messenger'ı hazırladık. Oldukça iddialı olan programımız kendi tanıtımını kullanıcılar kanalıyla yapacak.” [b]161 DİLDE SESLİ VE YAZLI TERCÜME YAPIYOR[/b] MSP Messenger'ın dünyadaki online iletişim yazılımlarına yeni bir anlayış getireceğini belirten Özalp, sözlerini şöyle sürdürdü: “Program, 161 dilde sesli ve yazılı tercüme yapabiliyor. Yani karşınızdaki kişi hangi ülkeden olursa olsun, hangi dili ve lehçeyi konuşuyorsa konuşsun, siz Türkçe olarak yazıyorsunuz, karşı tarafa sesli olarak kendi dilinde çeviri yaparak, sesli ve yazılı olarak iletişim sağlıyor. Düşünün Çin'den bir kişiyle iş bağlantısı yapmak istiyorsunuz. Yazılım size tercümana ihtiyaç duymadan direk iletişim imkanı sağlıyor. Çocuğunuz dil öğrenmek istiyor. O ülkeden bir kişiyle iletişim kurup karşılıklı sesli ve yazılı konuşabiliyor. MSP Messenger bilgisayarınızda kuruluysa aynı anda radyo dinleyip, anlaşmalı televizyon yayını sağlayıcılarından biri yardımıyla istediğiniz televizyon kanalını izleyebiliyorsunuz. Messenger üstünden bilgi paylaşımında artık sınırlarınız yok. İstediğiniz büyüklükte dosyayı MSP Messenger üstünden gönderebiliyor. Programın en önemli özelliklerinden biri online alışveriş yapma imkanı olması. Kayseri'den pastırma, Çorum'dan leblebi siparişi yapmak isterseniz MPS Messenger size bu imkanı sağlayacak. MSP Messenger sosyal paylaşım sitesi anlamında da hizmet verecek. Tek bir adresten sosyal paylaşım yapabileceksiniz. Dünya çok kısa bir süre içinde MSP Messenger'i konuşacak. Biz iddialıyız, inanmıyorsanız yazılımı bilgisayarınıza ücretsiz olarak kurun ve kullanmanın keyfini çıkarın.” [b]“HEDEFİMİZ MİLYONLARCA DOLARLIK REKLAM GELİRİ”[/b] Ulaştırma Bakanlığı verilerine göre Türkiye'de 22 milyon kişinin “messenger” yazılımı kullandığını, bu yazılımların toplam reklam gelirlerinin ise yıllık 2 milyar dolara ulaştığını bildiren Yazılım Mühendisi Özalp, bu gelirden Türkiye'nin herhangi bir pay alamadığını vurguladı. MSP Messenger'ın yaygınlaşması halinde Türk firması olarak elde edecekleri gelirden milyonlarca dolar vergi ödeyeceklerini belirten Özalp, şöyle konuştu: “Yazılım sanal ortamda domino taşı etkisiyle yayılıyor. Bir kaç gün içinde bu yüz binlerce kullanıcıya ulaşmayı hedefliyoruz. Amacımız dünyada milyonlarca kişinin bu yazılımı kullanması. Türkçe ve İngilizce olarak yazılım hazır. Çok kısa süre Arapça, Çinçe ve Rusça olarak yazılım hizmete girecek. Biz dünyada dil bilmezlik olgusunu ortadan kaldırıyoruz. Şu an çeviride yüzde 75 başarıyı yakaladık. Amacımız yüzde 90'a ulaşmak.” “BU BİR MİLLİ SİSTEM PROJESİ” Kültür ve Turizm Bakanlığı'na bağlı Telif Hakları ve Sinema Genel Müdürlüğü'nün, MSP Messenger'ın “Bilgisayar Programları ve Veritabanları”'na ilişkin tescilini yaptığını, ayrıca uluslararası bir yazılım firması tarafından da “Uluslararası Dijital İmza Sertifikası”nın onaylandığını vurgulayan Özalp, yazılımı “Milli Sistem Projesi” olarak adlandırdıklarını söyledi. Türkiye'deki bilgisayar kullanıcılarını da “Türk Messenger”ını kullanmaya davet eden Özalp, “Bu yerli bir araba veya yerli malı kullanmak gibi bir şey. Biz ülkemizin kazanmasını isteyen bir avuç insanız. Kısa süre içinde Uşak'ta, bünyesinde çok yetenekli bilgisayar yazılımcıları barındıran 300 kişilik çalışma ekibi kuracağız. Yola avukatlar için bir online iletişim yazımı hazırlamak için çıkmıştık. Bir hayal kurduk. Şimdi hayalimiz gerçek oldu” diye konuştu. Özalp, yazılımın ücretsiz olarak “[b]www.mspmessenger.com[/b]” adresinden indirilerek, olayca bilgisayarlara kurulabileceğini sözlerine ekledi. (AA) [/b] [/quote]
  11. [code]http://www.tnctr.com/topic/174896-kasparov-chessmatev11014/[/code] Yukardaki post linkte full olanını paylaştım ilgilenen bakar indirebilirler.Upload bana ait olup ne zaman link kaldırırlar bilemiyorum.
  12. [color="#0000FF"][b]Program Başlığı :[/b][/color] [b] [color="#FF0000"] Kasparov ChessMateV1.1.0.14 Full [/color] [/b] [color="#0000FF"][b]Program İçerik Açıklaması:[/b][/color] [quote] [b] [img] http://www.teknoctrl.com/wp-content/uploads/2011/06/kasparov.jpg [/img] En güçlü satranç bilgisayarı ile dünyadaki en iyi Garry KASPAROV’un oynadığı oyun. On yıl bir tek yenilgi almaksızın dünya şampiyonu olan Kasparov, Chessmate ile tüm zamanın en büyük satranç oyuncusuyla öğrenip oynarsınız. [/b] [/quote] [color="#0000FF"][b][u]Program İndirme Linkleri:[/b][/u][/color] [code] http://www.fileserve.com/file/mpKyqHw [/code]
  13. Crack yani ilaç paylaşımı serbest mi bilemiyorum ama program portable versiyonudur.İlacı var bende.
  14. [b][color="#0000FF"]Bilgisayarcıların Atasözleri[/color] Portu müdafa yoktur, hostu müdafa vardır Utp kablonu hub'a kadar uzat Azimle route eden firewallu deler Bakarsan ağ olur bakmazsan bug olur. Hatasız routing olmaz Bridgeden post, hubdan dost olmaz Kaderde varsa hack edilmek neye yarar uzulmek Gorunen server, router istemez Yanlış headerlı paket* bağdattaki router'dan döner Bana dokunmayan worm bin yıl yaşasın Bir ip*'de iki bilgisayar oynamaz Client servera küsmüş. serverın haberi olmamıs. 10 megabit switch'e cat6 kablo da taksan 10 megabit switch yine 10 megabit switch'tir Bana mac adresini soyle, sana ureticini soyleyeyim. Gönül ne internet ister, ne internet cafe; gönül sohbet ister ethernet bahane Bana ip'ni soyle, sana kim oldugunu soyleyeyim Networkun uzmaniyim, cisconun hastasiyim. Kotu networkcunun mumu, collusion'a kadar yanar Networkcu networkcunun rj45'ine muhtactir Ethernete link veren allahim sen bana sabir ver Download ettim bir tane extract ettim bin tane Switch'in bulunmadigi yerde hub'a abdıraman celebi derler 1 mb free web hosting'in 40 yıl hatırı vardır. Hat kopuyorum demez IP isteyenin bir yüzü, vermeyen dhcp'nin iki yüzü kara Tuvalete bi ping atalim bakalim bos mu Patch kablo yiğidin kamçısıdır Admin kabinet düzeninden belli olur Bakmakla öğrenilseydi switchler server olurdu Dağ dağa kavuşmaz, bilgisayar bilgisayara kavuşur (İnternet olayı). Bir PC'nin nesi, iki PC'nin network'u var. Arayan virüsünü de bulur , truva atını da Virüsünü söylemeyen anti-virüsünü bulamaz. Şifreni söyleme dostuna, o da söyler dostuna. Vakitsiz kilitlenen bilgisayarı resetlerler. Virüs geliyorum demez. Tuşa basmakla klavye eskimez. Duvaksız gelin, CD-ROM sürücüsüz PC olmaz. Virüs demekle, Virüs bulaşmaz. Al programın orijinalini, çekme kaygısını. Akılsız algoritmanın cezasını eller çeker. Antivirüssüz PC'yi Virüs kapar. Disket virüsü ile gelir. Sabrın sonu resettir. Ummadığın program, makineyi kilitler. Sakla utility'i gelir zamanı. Yavuz Virüs, ev sahibini Doom oynarken bastırır, bilgisayarı kilitler. Virüs : Ben programı uzantısından tanırım. Virüs ölür, gözü diskette kalır. Virüs gelince "back-up" ını aldın mı, "şimdi müsait misiniz ?" diye sormaz. Virüsün başı küçükken ezilir. Yiğitlere isimleri kahramanlıktan , virüslere isimleri verdiği zarardan sonra verilir. Virüs istedi 1 EXE, Allah verdi 2 EXE. Delinin biri Network'u bozmuş, 40 supervisor düzeltememiş. PC 'in var mı derdin var. Her Virüs bir tecrübedir. Her virüsün bir yoğurt yiyişi vardır. Her Virüs makineyi kilitlemez. Temizlenen Virüs, bulaşanı aratır. Yol sormakla, keyword aramakla bulunur. Sabır acıdır, meyvesi resettir. İşleyen PC'yi Virüs tutar. Virüs, ferman dinlemez. Virüs bulaşa bulaşa yayılır. Az veren "sabit disk"ten, Çok veren "boot"dan Taşıma suyla hard-disk kopyalanmaz, çünkü "tasimasu" küçük bir Japon çocuğudur. Disket kullanabilirsiniz. Ayağını kotana (wslimit'ine) göre uzat. Doom oynaya oynaya tenefüs uzar. Kedi kullanamadığı programa, virüslü der. Fazla utility, göz çıkarmaz. Aynı memory adresinde iki değişken ötmez. Gelmeyen hocayla ders yapılmaz... Sosyal hayata devam etmek için RESET düğmesine basınız. Bilgisayar oyunlarıyla hayat arasındaki tek fark hayatı save edememektir. Güzelliğine güvenme sivilce alır gider, Pc'ne güvenme virüs alır gider. Doktor ölecekmiyim?... HAYIR! Upgrade edileceksin!... Ağ alma komşu al. Orjinal program kullananı dokuz ağdan kovarlar. Görünen ağ protokol istemez, sakla setup’ı gelir zamanı. Avi. gelen yerden mp3 esirgenmez. Bugünün işini görev zamanlayıcısına bırakma. Dos kocamış; windowsun maskarası olmuş. Beleş anti-virüs programı; virüsü türkü çağıra çağıra ararmış. ’Kazaa’ yüklüyorum demez. Hard diski virüs bassa norton’a vız gelir. Sora sora crack bulunur. Bin gigabyte’ın olsa da, bir gigabyte’ı olana danış. Zip’le yatan rar’la kalkar. İşletim sistemi windows olanın, başı beladan kurtulmaz. Eceli gelen windows mavi ekrana düşer. Yazılımsız donanım, donanımsız yazılım olmaz. Ram’sız windows oynamaz. Sakınan diskte bad sektör çıkar. Pc’ye mac vermişler, hani benim akvaryumum demiş. Dos işler windows övünür. Ak anti-virüs kara gün içindir. Hatasız program olmaz. Bana işlemcini söyle sana kim olduğunu söyleyeyim. Bir virüse sistem yakma. Paran çoksa yeni bilgisayardan bıkma, işin yoksa chatten çıkma. Windows’uma söven, linux kullansa bari. Formatlanmış diskin davası olmaz. Eski dos’tan windows olmaz. Reset’te keramet vardır. Windows’unu açık unutanın ziyaretçisi pek olur. Windows’a service pack de yüklesen, windows yine windows’tur. Windows’u seven maviye katlanır. Çökecek windows bilgisayarda durmaz. Kaspersky’nin olmadığı yerde norton’a abdurrahman çelebi derler. Yazıcının şahidi tarayıcı.[/b]
  15. Bu paylaşım teknolojiktir ne yazıkki indirme linki yoktur. [quote] [b]Video Oyunları Tarihi Video oyunları tarihi gerçekte 1961 tarihinde başlamıştır.Çünkü bu tarihte ilk video oyunu yapılmıştır.Ancak 1889 tarihinden itibaren bugünkü zamana gelen firmalar doğmuş ve fikirler üretilmiştir.Bu yüzden biz bu araştırma yazısında 1889-2001 tarihleri arasındaki video oyunları tarihini,gelişimini ve önemli olaylarını inceleyeceğiz. Video oyunları tarihi 9 çağa ayrılır: ~Video Oyunları Öncesi Çağ (1889-1970) ~İlk Çağ (1971-1977) ~Altın Çağ (1978-1981) ~Gelişme Çağı (1982-1984) ~İlerleme Çağı (1985-1988) ~Yükselme ve Marketleşme Çağı (1989-1992) ~32 bit Üretim Çağı(1993-1997) ~Modern Çağ (1998-1999) ~Yeni Çağ (2000-2001) ~Oyunlar Öncesi Çağ Oyunlar Öncesi Çağ, 1889 yılından başlayıp,1970 yılına kadar süren çağdır.Bu çağda eski firmalar,video oyunu endüstrisine girmeye başladılar.Bu çağ video oyunları tarihinin başlangıç noktasıdır.Bu çağdaki oluşan olaylarla birlikte,video oyunları endüstrisi gelişmeye başlamıştır. ~İlk Çağ İlk Çağ,Video Oyunları Tarihindeki ilk devrimlerin yaşandığı çağdır.Bu çağ ile birlikte video oyunları büyük bir gelişme göstermiştir.Oyunlar Öncesi Çağ’da ekilen tohumların filizlerini verdiği çağ olarak da algılayabileceğimiz çağdır. ~Altın Çağ Bu çağın adı,bu dönemde oyun firmalarının birçok oyun ve konsol satmasıdır.Artık hem satıcı firmalar,hem de oyuncular hallerinden memnundur. ~Gelişme Çağı Bu çağda gerçekten birçok gelişme kaydedilmiştir.Özellikle Coleco’nun Coleco Vision’ı çıkarması büyük bir gelişmedir.Ancak oluşan gelişmelerden sonra ilerleme başlamıştır. ~İlerleme Çağı Bu çağda Gelişme Çağı’ndaki gelişmelerle ilerleyiş başlamıştır.Yeni konsolların ve önemli oyunların bu çağda ortaya çıkması bu çağın önemidir. ~Yükselme ve Marketleşme Çağı Bu çağda artık yeni firmaların oluşmasıyla hem yükselme artmış,hem de rekabetin artmasıyla,marketleşme ve satış arayışı başlamıştır. ~32 bit Üretim Çağı Sony’nin 32 bitlik konsolu Playstation’ı çıkarmaya karar vermesi üzerine,yeni nesil konsollar doğmaya başladı.Bunların hepsi de 32 bit olduğundan bu çağa 32 bit Üretim Çağı denir. ~Modern Çağ Bu iki yıllık zaman diliminde gerçekleşen olaylarla,video oyunları tarihinde yeniden bir dönüm noktası yaşamışızdır.Bu çağ ile tüm video oyunları modernize edilmiş,yani modern yapıya uydurulmuştur. ~Yeni Çağ Bu çağda Konsol Savaşları başlamıştır.İçinde bulunduğumuz yıl ve ilerikibirkaç seneyi kapsadığını düşünmek mümkün.ÇünküDoom 3’ün gelmesiyle,her şey ama her şey değişebilir. Önemli Olaylar (İlkler) 1961:İlk video oyunu yapılır(Steve Russel/Space War) 1967:İlk elde taşınan hesap makinesi yapılır(Texas Instruments) 1968:İlk RAM icad edilir 1969:Internet’in kökeni ARPANET kurulur(Amerikan Hava Savunma Departmanı) 1971:İlk Arcade makinesi (Nuttel) 1971:İlk 4 bitlik mini işlemci (Intel) 1971:İlk Arcade kalitesindeki ev konsolu (Magnavox/Odyysey) 1974:İlk ROM kullanan oyun (Tank) 1975:Altair bilgisayarları için ilk BASIC uygulamaları (Bill Gates ve Paul Allen) 1975:Mini işlemci ile tasarlanan ilk oyun (Midway/Gun Fight) 1977:İlk renkli bilgisayar (Apple/Apple-2) 1977:İlk ele alınıp kullanılan konsol (Matter/Game Watch) 1977:İlk Video Bilgisayar Sistemi(VCS) (Atari/Atari 2600) 1979:Oyunlarda ilk gizli bölüm (Waren Robinett/Adventure) 1981:IBM’in ilk makinesi yapılır (IBM) 1981:İlk kez video oyunu oynarken kalp krizinden ölen insan 1983:İlk X-Rated oyun yapılır (Mystique/Custer’s Revenge) 1986:İlk modemden modeme oynanan oyun (Sierra On-Line/Helicopter Simulation) 1987:İlk kez bir oyunu iki platforma çıkaran firma (Activision) 1989:İlk CD-ROM oyunu (Activision/Manhole) 1991:İlk hile yapmaya yarayan araç (Game Genie) 1992:İlk FPS yapılır (id Software/Wolfeinstein) 1993:İlk internet üzerinden oynanan oyun (id Software/Doom) 1994:İlk 32 bitlik konsol (Sony/Sony Playstation) 1995:İlk Electronic Entertainment Expo (E3) yapılır (Los Angeles’ta) 1997:Nintendo 64 için ilk FPS (Golden Eye 007)[/b][/quote]
  16. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"] Video oyunları tarihi 90 lı yıllar [/color] [/b] [color="#0000FF"][b][u]Kaynak Linki :[/b][/u][/color] [code] http://www.teknokulis.com/multimedya/galeri/teknoloji/video-oyunlari-tarihi-90lar?tc=65&page=1[/code] [color="#0000FF"][b]Konu Tarihi:[/b][/color] [b]26.06.2011[/b] [quote] [b] [center] [img]http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1990monkey1_d.png[/img] [center] 1990 Monkey Island Adventure türünün severlerine "Tarihini en iyi adventure oyunu hangisi?" diye sorarsanız alacağınız cevap Monkey Island olacaktır [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1991civ1_d.jpg [/img] [center] 1991 Civilization Sid Meier'i oyun dünyasının en saygı duyulan isimlerinden birisi haline getiren Civilization'da oyuncular bir halkın binlerce yıllık yaşantısını yönetme şansı buluyordu. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1991myst1_d.jpg [/img] [center] 1991 Myst Monkey Island belki komedi unsuruyla kazanıyor Myst'e karşı, fakat Myst'in sinematik geçişleri, gerçekçi mekanları birinci şahıs açısından sizi maceranın içine çekiyordu [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1991sonic1_d.png [/img] [center] 1991 Sonic the Hedgehog Zamanın en büyük çekişmelerinden biri Sega ve Nintendo arasında yaşanırken, Nintendo'nun Mario hamlesine Sega biraz geç de olsa Sonic ile cevap vermişti [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1992dune1_d.jpg [/img] [center] 1992 Dune Steve Herbert'ın aynı isimli romanından esinlenilerek hazırlanan Dune serisi, RTS ve adventure oyunlarını çok başarılı bir biçimde harmanlamıştı. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1992mortalkombat1_d.png [/img] [center] 1992 Mortal Kombat Dövüş oyunları arasında unutulmaz isimlerin içinde Mortal Kombat'ın adı kesinlikle sayılacaktır. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1992wolf3d1_d.png [/img] [center] 1992 Wolfenstein 3D Modern FPS oyunlarının ilk örneği olan Wolfenstein 3D'de Polonyalı bir askerin Nazi kampından kaçma hikayesini canlandırıyorduk. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1993doom1_d.jpg [/img] [center] 1993 Doom Bugünlerde Rage ile gündemde olan John Carmack ve id Software'i dünyaya tanıtan oyun olan Doom, Wolfenstein 3D'nin açtığı FPS yolunda bayrağı devralan oyun olmuştu. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1993fifa1_d.gif [/img] [center] 1993 FIFA FIFA serisi belki ilk futbol oyunu değildi, belki en iyi futbol oyunu değildi, fakat futbol oyunlarının bugün bile bu kadar popüler olmasının sebebi FIFA serisidir. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1994elderscrolls2_d.jpg [/img] [center] 1994 The Elder Scrolls The Elder Scrolls III: Morrowind adeta seriyi bir fenomen haline getiren oyundu. Müzikleri pek çok kez oyuna "En iyi müzik" ödülleri kazandırdı. Grafikleri ve serbest oyun yapısı da zamanın çok ötesindeydi. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1994nfs2_d.jpg [/img] [center] 1994 Need for Speed Need for Speed II ile zirve yapan seri, Porsche Unleashed gibi rezalet bir oyun çıkarmasına rağmen piyasaya, daha sonra modifiye araba işine girerek durumu kurtardı. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1994wc1_d.jpg [/img] [center] 1994 Warcraft Warcraft pek çok kişi için dünya tarihinin en iyi strateji oyunu. Pek çokun dışında kalan kişiler içinse en iyisi Starcarft. Yani her türlü Blizzard. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1995cnc2_d.jpg [/img] [center] 1995 Command & Conquer Özellikle Red Alert I ve Red Alert II oyunlarıyla popülerliği tavan yapmıştı serinin. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1995homm2_d.jpg [/img] [center] 1995 Heroes of Might and Magic Kahramanınızı geliştiriyor, ordunuzu ve kazandığınız şehirleri büyütüyorsunuz oyunda. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1996diablo1_d.jpg [/img] [center] 1996 Diablo Dünya tarihinin en iyi RPG oyunlarından bir tanesi, hatta pek çok kişiye göre en iyisi Diablo da Warcraft ve Starcraft gibi bir Blizzard oyunu. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1996quake2_d.jpg [/img] [center] 1996 Quake Quake III Arena ile online oyun dünyasının kralı haline gelen oyun artık tarayıcılardan da oynanabiliyor. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1996residentevil1_d.jpg [/img] [center] 1996 Resident Evil Şu günlerde oldukça popüler olan zombilerle savaşma temalı oyunların başımıza sarılmasının sorumlusu Resident Evil'dır. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1996tombraider2_d.jpg [/img] [center] 1996 Tomb Raider 3D platform oyunlarının en başarılı örneklerinden olan Tomb Raider'a "dişi Indiana Jones" diyebiliriz. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1997aoe2_d.jpg [/img] [center] 1997 Age of Empires Birkaç yıl önce oyun sitelerinde yayınlanan bir postere göre Microsoft'un planı AoE IV'ü ikinci dünya savaşı zamanında, AoE V'i ise uzay çağında sunmak. Bakalım ne kadar doğru olacak. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1997carmageddon1_d.jpg [/img] [center] 1997 Carmageddon Muhtemelen Mortal Kombat ile beraber 90'ların en kanlı oyunuydu Carmageddon [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1997gta1_d.png [/img] [center] 1997 Grand Theft Auto Grand Theft Auto kendi türünü yaratan oyunlardan bir tanesi. Örneğin bugün Mafia II oynarken "GTA gibi" diyebiliyoruz. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1998baldurs1_d.jpg [/img] [center] 1998 Baldur's Gate Diablo ve Baldur's Gate en fazla kez başarısız olarak taklit edilen oyunlar sıralamasında muhtemelen en üsttedir. RPG tarihinin en popüler oyunlarından birisi Baldur's Gate. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1998commandos1_d.jpg [/img] [center] 1998 Commandos Commandos da 90'ların kendine has tarzı olan oyunlarından bir tanesiydi. Komando ekibimizle özel görevleri yerine getiriyorduk. Her komandomuzun kendine has özellikleri vardı. [/center] [img]http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1998halflife2_d.jpg[/img] [center]1998 Half-Life FPS tarzındaki Half-Life, yanlış giden bir ışınlanma deneyinin ardından Dr. Freeman'ın içinde bulunduğu yeraltı gizli araştırma tesisinden kaçışını konu alır.[/center] [img]http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1998halflife3_d.jpg [/img] [center] 1999 Counter-Strike Half-Life'ın çoklu oyuncu modu aslında oldukça iyiydi. Fakat Half-Life için bağımsız geliştirilen Counter-Strike modu bunu apayrı bir seviyeye taşıdı. Bugün hala oynanan Counter-Strike, daha uzun seneler de oynanmaya devam edecek. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1998sc2_d.jpg [/img] [center] 1998 Starcraft Güney Kore'nin adeta milli sporu olan Starcraft'ta hepsinin birbirine karşı farklı üstünlükleri olan 3 farklı ırktan birini kontrol ediyorsunuz: Zerg, Protoss ya da Terran. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1999moh1_d.jpg [/img] [center] 1998 Medal of Honor 1999 yılında Medal of Honor piyasaya çıktığında, daha insanlar dünya savaşı oyunlarından bıkmamışlardı. Ayrıca tabii ki Medal of Honor zamanının ötesinde bir FPS'ydi. [/center] [img] http://i.tmgrup.com.tr/tkn/galeri/teknoloji/video-oyunlari-tarihi-90lar/1999rollercoaster1_d.jpg [/img] [center] 1998 Rollercoaster Tycoon Simcity ile başlayan "kurma" oyunlarının tavan noktası (tabii Sims'i saymassak) Rollercoaster Tycoon'dur. [/center] [/center] [/b] [/quote]
  17. Evlerde en çok enerji tüketimi sağlayan tek beyaz eşya No-Frost buz dolabıdır,bu listede yok.Yok olmaması doğaldır ona tasaruf tedbiri uygulanamaz.Daha çok şeyler var bu tasruf etme aşamasında.Gündüzün gün ışığından faazala yararlanmak için camlardan ışık sızmasını engelleyen bir şey olmamasıda lazım gelenlerden.
  18. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"] Mac OS X 10.6.8 Snow Leopard güncellemesi yayınlandı [/color] [/b] [color="#0000FF"][b][u]Kaynak Linki :[/b][/u][/color] [code]http://www.teknokulis.com/Haberler/Yazilim/2011/06/25/mac-os-x-1068-snow-leopard-guncellemesi-yayinlandi [/code] [color="#0000FF"][b]Konu Tarihi:[/b][/color] [b]25.06.2011[/b] [quote] [b] [img]http://i.tmgrup.com.tr/tkn/2011/06/25/400x279/487088848982400279.jpg[/img] Apple, Mac OS X 10.7 Lion'dan önceki son güncellemeyi yayınladı. 10.6.8 güncellemesi daha çok güvenlik ağırlıklı. Apple perşembe gecesi yeni bir güncelleme yayınladı. Snow Leopard için muhtemelen son güncelleme diye düşünülüyor. Yapılacak güncelleme sonrası sistem versiyon 10.6.8'e yükselecek. Geçen ay Lion 10.7'yi duyuran Apple, Snow Leopard için son ve en ciddi güncellemesini yaptı diye düşünüyoruz. Sisteminizin güncellemesini Software Update bölümünden otomatik olarak yapabilirsiniz. 10.6.8'in getirdiği yenilikler ise şöyle; Lion güncelleme öncesi Mac Store'un düzenlenmes i Preview uygulamasının çökmesenin engellenmesi IPv6 ve VPN konusunda iyileştirmeler Mac Defender ve onun türevleri olan zararlı yazılımların temizlenmesi ve engellenmesi Mac OS X 10.6.8 için bir nevi güvenlik update diyebiliriz. Önümüzdeki ay resmi olarak 30 dolara satışa sunulacak olan Lion için birazda olsun içimizi rahatlatıyor bu güncelleme. [/b] [/quote]
  19. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"] Elektrik faturası nasıl azaltılır?[/color] [/b] [color="#0000FF"][b]Konu Detayları:[/b][/color] [b] [color="#FF0000"] [/color] [/b] [quote] [b] [center][img]http://www.teknoctrl.com/wp-content/uploads/2011/06/Elektrik-faturası-nasıl.jpg[/img] [/center] Elektrik tasarrufu yapmak şimdilerde çok çok yaygınlaşan tasarruf lambaları ile gayet basit. Örneğin evinizde ampul kullanıyorsanız zaten bu lambaların en küçüğü 40watt ama bunun yerine tasarruf lambası kullanırsanız en az elektrikten 4 kat daha tasarruf yapmış olursunuz. Evlerde alınacak basit tedbirlerle cep yakan giderler yarıya kadar indirilebiliyor. Küçük fırın, büyüklerden yüzde 55 az tüketiyor. Tasarruflu ampuller, yüzde 85 enerjiden kazandırıyor. Elektriğe yapılan son zamlardan sonra vatandaş, elektirik faturalarını azaltmak için önlemler aramaya başladı. Konutlarda ısıtma ve aydınlatmada kullanılan elektiriğin neredeyse yarısına yakının israf edildiği belirtilirken, alınacak basit tedbirlerle 100 TL’lik bir faturanın 50TL ’ye yani yarı yarıya düşürülebileceği açıklandı. İşte Türkiye İsrafı Önleme Vakfı tarafından belirtilen evlerde alınabilecek, fatura azaltan tedbirler, * [color="#800080"]FIRININ[/color] pişirme süresinden önce kapatılması halinde 5-10 dakika az elektirik harcanıyor * [color="#800080"]MUTFAĞIN[/color] gün ışığıyla aydınlatılması yüzde 15, klimaların bakım ve temizliğine dikkat edilmesi yüzde 40 tasarruf sağlıyor. * [color="#800080"]MİNİK [/color]ekranlı televizyonlar büyük ekranlılara göre daha az elektrik tüketiyorlar. Ses düzeyinin düşük tutulması da elektrik enerjisi tüketimini azaltıyor. * [color="#800080"]BİR[/color] akkor lamba kompakt flüoresan lamba ile değiştirildiğinde aydınlatma maliyeti yüzde 80 azalıyor. Tasarruflu ampüllerin ömrü de çok uzun oluyor. * [color="#800080"]DUVARLAR[/color] ve tavanların açık renkli boya ile boyanması aydınlatma giderini azaltıyor. * [color="#800080"]ÇOK[/color] sayıda düşük güçlü lamba yerine, daha yüksek güçlü tek bir lamba kullanılması tasarruf sağlıyor. * [color="#800080"]ELEKTRİK[/color] enerjisinin yüzde 90’ı suyu ısıtma esnasında harcandığından, çamaşır makinelerinde çamaşırların ılık suyla yıkanması, durulamanın ise soğuk suyla yapılması gerekiyor. * [color="#800080"]BULAŞIK[/color] makineleri, yarı dolu veya aşırı dolu halde çalıştırılmamalıdır. * [color="#800080"]KÜÇÜK[/color] fırınlar, büyüklerden yüzde 55 daha az yakarak tasarruf sağlıyor. * [color="#800080"]SAÇ [/color]kurutmanın mümkün olduğu kadar havluyla yapılması öneriliyor. Bir saç kurutma makinasının ortalama 10 dakika çalışması 60 wattlık bir lambanın 3 saat yanmasına eşdeğer elektrik tüketiyor. [/b] [/quote]
  20. [color="#0000FF"][b]Program Başlığı :[/b][/color] [b] [color="#FF0000"] Kasparov’un Santranç Eğitimi [/color] [/b] [color="#0000FF"][b]Program İçerik Açıklaması:[/b][/color] [quote] [b] [img] http://www.teknoctrl.com/wp-content/uploads/2011/06/kasparov.jpg [/img] Portable Kasparov Chess Mate programı ile satrancı kolaylıkla öğrenebilirsiniz. Birde programın portable olması bizim için oldukça avantaj taşımaktadır. En güçlü satranç bilgisayarı ile dünyadaki en iyi Garry KASPAROV’un oynadığı oyun. On yıl bir tek yenilgi almaksızın dünya şampiyonu olan Kasparov, Chessmate ile tüm zamanın en büyük satranç oyuncusuyla öğrenip oynarsınız. Portable versiyonu olduğu için, programı Flash Bellek lerinizden direk çalıştırabilirsiniz. Kurulum gerektirmez. [/b] [/quote] [color="#0000FF"][b][u]Program İndirme Linkleri:[/b][/u][/color] [code] http://hotfile.com/dl/121697503/d55dd06/Kasparov.rar.html [/code]
  21. 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. ///////////////////KUTU////////////////// 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. /////////////////////KUTU BİTTİ/////////////////// Ş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. <odbc0001.tif> 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. <odbc0002.tif> 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” %> Burada, Server’ın CreateObject metodu ile ADOBD.Connection nesnesini oluşturuyoruz. Oluşturduğumuz bağlantıya istediğimiz değişken adını verebiliriz. Bu örnekte veriye kurduğumuz bu bağlantı Veriyolu adıyla biliyor. Bu yolla sağlayacağımız veriler, ASP programı boyunca bir isimle bilinmelidir. Veriyolunun açacağı veri kümesinin ismini buradaki “Veri_adi” kelimelerinin yerine yazarız. Bu isim, bağlantının .Open metodu ile açacağı verinin adıdır. Bu, kullanacağımız veritabanı dosyasının adı değildir. Bu isim ile söz konusu veritabanı dosyasını işletim sisteminin ODBC aracına tanıtırken kullandığınız isim aynı olmalıdır. Bir veritabanı dosyasını ODBC aracını kullanarak sisteme tanıtma (DSN-Data Source Name) ayarının nasıl yapıldığını daha önce ele aldık. Bu üç satırla, ASP programı, Server’dan ADO aracılığıyla, sistemin “Veri_adi” kelimelerinin yerine yazacağınız isimli veriye yol açacaktır. Örneğin yukarıdaki kutuda oluşturduğumuz ODBC veri kaynağını kullanacağımız zaman, buraya “uyeler” kelimesini yazacağız, Recordset (Kayıt dizisi) Veritabanına bağlantıyı oluşturduktan sonra, buradaki tabir yerindeyse ham verileri, kullanılır kayıtlar haline getirmemiz gerekir. Bunu ise ADO’nun Recordset nesnesi sağlar. Kurduğumuz veriyolundan programımıza bilgi gelmesi için .Execute (icra et) metodunu kullanırız; ancak bu komuta icra edeceği bir komut vermemiz gerekir. Baştan beri ADO ile kullanabileceğimiz veritabanının SQL (sequyel okunur; Structured Query Language/Yapısal Sorgu Dili) uyumlu olması gerektiğini söylüyoruz. Bu dil, verilerin sabit diske yazılması ve okunmasını düzenleyen bir çok veritabanı dilinden sadece biri, fakat en yaygınıdır. Bir veritabanından veri okumak, veri değiştirmek veya eklemek için komutlarımızı bu dille vermek zorundayız. ASP amacıyla SQL komutlarından çok az kısmını kullanırız; bu bakımdan ASP Tasarımcısı olmak için sınırlı da olsa SQL öğrenmek gerekir. //////////////////KUTU////////////////////// Hızlı SQL Kursu: Select ASP amaçlı olarak kullanacağımız komut gerçekte sadece SELECT’tir. Fakat hatırlamamız gereken veritabanı ilkeleri var. Bir veritabanı kabaca alanlar (sütunlar) ve bunların içinde yazılı değerler (satırlar) halinde olur; her satır bir elemanın değerleridir; ve Kayıt adını alır. SELECT Bir veritabanından veri seçmeye yarar. SQL Sorgusu da denir. Dört bölümü vardır. Tipik bir SELECT komutu şöyle yazılır: SELECT alan1, alan2.. FROM tablo WHERE koşul = değer ORDER BY alan1 Seçilecek alanların adı SELECT komutunun ilk bölümünü oluşturur. Bir veritabanında birden fazla tablo bulunabilir; seçimin hangi tabloda yapılacağı FROM bölümünde gösterilir. Kimi zaman bir tablodaki alanda bulunan bütün kayıtları seçmek isteyebiliriz; fakat çoğu zaman seçimin sınırlarını daraltmak için sözgelimi bir alandaki değerlerin vereceğimiz bir koşula uymasını isteyebiliriz. Bu durumda “koşul = değer” testini WHERE bölümünde yaparız. Seçilen değerlerin hangi alandaki kayıtlara göre sıralanmasını istiyorsak, ORDER BY bölümünde bunu belirtelibiliriz. Örnek: SELECT Adi, Soyadi, TelNo FROM Telefonlar WHERE Alankodu = 0535 ORDER BY Adi Bu komutla veritabanının Telefonlar isimli tablosundan Adi, soyadi ve TelNo adlı sütunlarındaki kayıtlardan Alankodu sütunundaki değeri “0535” olanları seçmiş oluruz. Bir tablodaki bütün alanların bütün değerlerini seçmek için SELECT komutunu şöyle yazarız: SELECT * FROM Veri_adi Buradaki “Veri_adi” kelimelerinin yerine DSN’e verdiğiniz adı (orneğin yukarıdaki örnekte olduğu gibi, “uyeler” kelimesini) yazacaksınız. SQL’in INSERT, UPDATE ve DELETE komutlarının nasıl kullanıldığını öğrenirseniz, ADO nesnesinin bunlara denk gelen ve aşağıda nasıl kullanıldıklarını göreceğimiz yeni kayıt ekleme, kayıtları güncelleme ve silme metodları yerine kendi SQL komutlarınızı yazabilirsiniz. ///////////////////////KUTU BİTTİ//////////////// Sağladığımız veri bağlantısını kullanarak, yararlanabileceğimiz bir veri grubu oluşturmak için, yukarıda .Connection metodunu kullanırken yazdığımız kodu şöyle geliştirmemiz gerekir: <% Dim Veriyolu, Kayitdizisi Set Veriyolu = Server.CreateObject(“ADODB.Connection”) Veriyolu.Open “Veri_adi” Set Kayitdizisi = Veriyolu.Execute(“SELECT * FROM Veri_adi”) %> Buradaki .Execute metodu, DSN’ini verdiğiniz kaynaktaki veritabanından verileri fiilen alıp getirmeye ve bir Recordset (Kayıt dizisi) oluşturmaya yarar. Kayıtları tek tek okuması için Kayitdizisi’ne bir sonraki kayda gitmesini bildirmemiz gerekir. Bunu .MoveNext (bir sonrakine git) metodu ile yaparız. Okunan her kayıt Kayitdizi adlı değişkenin içindedir. Bu nesnenin elemanlarını herhangi bir döngü yöntemiyle ziyaretçinin Browser penceresinde görüntüleyebiliriz; bir HTML etikenin içeriği yapabiliriz; veya başka bir şekilde kullanabiliriz. Aynı döngü, .MoveNext ile bir sonraki kaydın okunmasını da sağlayacaktır. Bunun bir örneğini daha sonra göreceğiz. 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. .Recordset metodu, ile bir veritabanını okuyacak imleci üç şekilde ayarlayabilirsiniz: Static (Duragan) SELECT komutu icra edilir ve okunan kayıt arzu ettiğiniz değişkene yazılır. (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenStatic) Forward only (Sadece ilerle) İmleç veritabanı içinde sadece ileri doğru gider ve her seferinde bir kayıt okunur. (Varsayılan imleç türü budur.) (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenForwardonly) Dynamic (Dinamik) Veritabanına ulaşan ve değişiklik yapan başka bir kullanıcı varsa, bu değişiklik size anında yansıtılır. (ADO Sabit Değerleri dosyasınıdan yararlanıyorsak, adOpenDynamic) Bu yöntemlerden birini seçmekle veriyi belirli bir okuma tarzında açmış olursunuz. Bu yöntemlerden hangisini seçtiğinizi .Recordset metodunu kullanacak olan .Open komutunun argümanı olarak açıkça belirtmeniz gerekir. ADO, bunun için sizden sayılar halinde argümanlar ister. /////////////////KUTU////////////////// ADO Sabit Değerleri ADO+ODBC yoluyla kuracağımız veri bağlantıları, çoğu zaman adeta şifreli ifadeler içerebilir ve bir çok komutun argümanı öğrenmesi zor sayılar halinde verilir. Microsoft ve kullanılmaya hazır ASP Uygulamaları üreten firmalar, bu karmaşık ifadeleri düz metinler olarak ifade etmeye yarayan haricî dosyalar (include files) hazırlar ve sunarlar. Bunlar arasında en yaygın olanı (bu kitapçığın kodları arasında bulunan) Microsoft’un ADOVBS (adovbs.inc) dosyasıdır. (Aynı dosyanın JavaScript sürümü ise adojavs.inc ardını taşır). Bu dosyadan yararlanabilmek için, sitenize kopyalamanız ve daha sonra sayfalarınıza şu kodu eklemeniz gerekir: <!- - #include file=”adovbs.inc” - - > Bu dosya, Server tarafından icra edilir ve ADO nesnesinin sayı halindeki bütün argümanlarını anlaşılabilir İngilizce kelimelere çevirir. Bu dosyanın içeriğinden nasıl yararlanacağımızı ele alacağız. /////////////////KUTU BİTTİ/////////////// Bir veriye bağlantıyı kurduktan sonra kayit dizimizi .Recordset metodu ile sağlayacaksak, yukarıdaki örnek kodumuzu şöyle yazmak gerekir: <!- - #include file=”adovbs.inc” - - > <% 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ı. Recordset.Update Veritabanından aldığımız değerleri, kimi zaman ziyaretçinin vereceği değerlerle veya ziyaretçinin bir takım tercihleri sonucu güncelleştirmemiz gerekir. Bu Recordset nesnesinin .Update metodu ile kolayca yapılır. Yalnız burada hassas bir nokta var: diyelim ki aynı anda iki veya daha fazla kullanıcı Web programımızın veritabanına ulaşır ve aynı anda değişiklik yaparlarsa ne olur? Biraz önce Recordset’in .Open metodunun imleçlerinden söz ederken, okumanın yönünü veya imlecin hareket tarzını belirleyen argümanları sıralamıştık. Bu argüman dizisine bir yenisini ekleyerek, veritabanına erişimin niteliğini ve güncelleştirmenin nasıl yapılacağı ve yansıtılacağını da belirleyebiliriz. Bu işlemin temel ilkesi veritabanı kayıtlarının kilitlenmesi esasıdır. Bu kilitlemenin türünü belirleyerek, güncelleştirmenin de nasıl yapılacağını belirlemiş oluruz. Burada kullanacağımız argümanlar da ADO’nin şifreli sayıları olması gerekirken, adovbs.inc dosyası sayesinde İngilizce (ve dolayısıyla anlaşılabilir) kelimeler olur. advbs.inc dosyasını devreye soktuysanız, şu iki tür kiliti kullanabiliriz: adLockReadOnly Kayıtların güncelleştirilmesini önler; ziyaretçimiz veritabanına kayıt yapmayacaksa, bu kilit türünü kullanmamız gerekir. adLockOptimistic Veritabanına ek yapacaksak, mevcut kayıtmları düzelteceksek ve bazılarını sileceksek, bu kilit türünü kullanmamız gerekir. Yukarıdaki kod örneğimizin sadece son satırını, bu metodu kullanmak amacıyla, şöyle yazabiliriz: Kayitdizisi.Open Sorgu, Veriyolu, aOpenStatic, adLockOptimistic Tabiî bir veritabanını güncelleştirmek için imleci veritabanında doğru kaydın üzerine götürmek ve bu arada Recordset’in bize sağladığı mevcut verilerin yerine yeni değerleri atamış olmak gerekir. Bunu sağladıktan sonra bütün yapacağımız şey .Update metodunu kullanmak ibarettir: Kayitdizisi(“Adi”) = “Necip Fazıl” Kayitdizisi(“Soyadı”) “Dayanır” Kayitdizisi.Update Bu komut, imleç o sırada hangi kaydın üzerinde ise o kaydın “Adi” ve “Soyadi” alanlarındaki veriyi “Necip Fazıl” ve “Dayanır” haline getirir. Bu metodu kullanırken bir kaydın bütün alanlarını güncelleştirmemiz veya güncelleştirilmeyen alanları eski değerleri ile tekrar etmemiz gerekmez. Recordset.Delete Bir veritabanındaki kaydı silmek de ADO ile oldukça kolaydır. İmleci, silinecek kaydın üzerine götürdükten sonra, Recordset’in , .Delete metodunu çağırarak o andaki kayıt silinir. Bu metod, bir kaydı bütün alanlarındaki değerlerle birlikte (yani veritabanının bir satırını tümüyle) siler: Kayitdizisi.Update Recordset.AddNew Bir veritabanına yeni kayıt eklemek istediğimizde, Recordset’in .AddNew (yeni ekle) metodundan yararlanırız. Bu metodun özelliği bizim imleci veritabanı içinde bir yere götürme zorunluğumuz olmamasıdır. Bu metod kendiliğinden imleci dosyanın en son satırının altına götürür. .AddNew metodu bir veritabanı dosyasına kayıt eklerken, veritabanında mevcut bütün alanlar için değer vermenizi isteyecektir. Örneğin <% Kayitdizisi.AddNew Kayitdizisi(“Adi”) = “Necip Fazıl” Kayitdizisi(“Soyadı”) “Dayanır” Kayitdizisi(“TelNo”) = “0342-3390000” Kayitdizisi.Update %> Veritabanına yeni kaydı, .Update metodunun yaptığına dikkat edin. DSN’siz Veri Bağlantısı Bu kadar DSN oluşturmayı öğrendikten sonra, “Aslında DSN olmadan da veritabanlarınıza ulaşabilirsiniz!” derlerse, herhalde çok sevinmeyiz. Ama işin doğrusu DSN yoludur. Fakat yine de DSN oluşturmadan veritabanına ulaşabileceğimizi bilmemiz gerekir. DSN, genellikle Web Server’ları yavaşlatır; Web Server, DSN’ini belirttiğiniz veriye ulaşmak için önce ODBC’nin yardımını ister; ODBC, bir takım sürücüleri devreye sokar ve sonunda veriye ulaşırız. Bir DSN-verisine 20-30’dan fazla kullanıcı aynı anda eriştiği zaman bu yavaşlama gözle görünür hale gelebilir. Bir süre öncesine kadar Microsoft firması, veriye dayanan Web sitelerinin veri-bağını DSN yoluyla kurmasını tavsiye ederken, şimdi MS yayınlarında sık sık DSN’siz veri bağlantısının da etkin şekilde kullanılacağı belirtiliyor. Yukarıda verdiğimiz DSN örneği şöyle idi: <% Dim Veriyolu, Kayitdizisi Set Veriyolu = Server.CreateObject(“ADODB.Connection”) Veriyolu.Open “Veri_adi” Set Kayitdizisi = Veriyolu.Execute(“SELECT * FROM Veri_adi”) %> Böyle bir DSN bağlantısını kullanabilmemiz için, kendi kişisel Web Server ortamımızda Denetim Masası’ndaki ODBC aracını kullanarak bir DSN oluşturmamız; Internet ortamında ise bu adı vereceğimiz veritabanı dosyasına DSN oluşturulması için Web Server yöneticisinin yardımını istememiz gerekiyor. Oysa aynı işlemi DSN’siz veri bağlantısı kurarak da yapabiliriz. Bunun için, DSN’e yukarıdaki gibi doğrudan göndermede bulunmak yerine; ya ODBC sürücüsüne ya da ODBC’nin kullandığı Microsoft Jet OLEDB sürücüsüne doğrudan atıfta bulunuruz. Örnek: 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. Veri ile HTML Etiketlerini Doldurma ADO nesnesini tanıdık; metodlarını gördük. ADO’nun veritabanı ile DSN ile ve DSN’siz nasıl bağlantı kuracağını ele aldık. Şimdi çok kısa olarak elde ettiğimiz verilerle, HTML etiketlerinin içini nasıl dolduracağımızı görelim. Burada “içini doldurmak” (veya bir çok İngilizce kaynakta göreceğiniz üzere populate etmek) bir etiketin değer (value) bölümünü yazmak anlamına geliyor). Burada küçük bir kaç örnekle, veri kaynağını kullanarak HTML etiketlerinin içini doldurma alıştırması yapalım. Buradaki bzı örneklerde ODBC konusunu ele alırken oluşturduğumuz uyeler.mdb’yi DSN olarak “uyeler” verisi şeklinde kullanacağız; fakat siz istediğiniz veriyi kullanabilirsiniz. Seçme Kutuları: SELECT SELECT, ziyaretçilerimize önceden belirlenmiş bir çok unsurdan birini veya daha fazlasını seçmelerine imkan veren bir etikettir. Ziyaretçi, seçimini SELECT’in OPTION’ları arasından yapar. Seçenekler (OPTION), sahip oldukları değeri Server’a gönderirler. Genel yazım kuralı şöyledir: <FORM ACTION=”...” METHOD=POST|GET> <SELECT NAME=”metin”> <OPTION VALUE=”değer1”>Tercih 1 <OPTION VALUE=”değer2”>Tercih 2 <OPTION VALUE=”değer3”>Tercih 3 </SELECT> Bu Form’un gönder (Submit) düğmesi ile sağlanan hareket (ACTION), seçilen değeri veya değerleri, Form’u işleyecek ASP programına gönderir. Ziyaretçimize sunacağımız seçenekler, iki-üç adet ise, bunu HTML dosyasını yazarken, OPTION’lar halinde kodlamak kolay olabilir. Ancak seçenek sayısı artıyorsa, veya seçeneklerimiz sık sık değişiyorsa, bunları bir veri tabanında toplamak ve OPTION değerlerini veritabanının bir alanından alarak ziyaretçiye sunmak çok daha kolay olur. Böylece ASP sayfası değişmeden kalır; biz sadece veritabanını güncelleştiririz. Çoğu zaman bu güncelleştirme ziyaretçilerin yapacakları eklerin veritabanına yazılmasıyla sağlandığı için, ortaya gerçekten dinamik bir Web Uygulaması çıkmış olur. Diyelim ki, bizim grubumuzun üyelerini gösteren yukarıda oluşturduğumuz uyeler.mdb (DSN’i uyeler olan veritabanı) dosyasının adı-soyadı alanlarını birleştirerek, sayfamızdaki bir SELECT etiketinin OPTION’larına yazmak istiyoruz. Bunun için önce sayfamızda kullanacağımız değişkenleri tanımlayalım: <% Dim connVeriyolu, rsVeri, SQL %> Sonra, bu değişkenlerden veri ile ilgili olanlara .Connection ve .Recordset için gerekli ifadeleri yazalım. Veri ile çalışırken tasarımcının değişken adlarına bakarak hangisinin .Connection, hangisinin .Recordset değerlerini içerdiğini anlaması zorlaşabilir. Bu bakımdan değişken adlarının önüne .Connection için olanında conn, .Recordset için olanında rs harflerini kulllanmak yararlı olabilir. Veritabanından fiilen hangi verileri çekeceğimizi gösteren SQL deyimini de belirgin bir şekilde SQL değişkenine yazabiliriz: <% Set connVeriyolu = Server.CreateObject("ADODB.Connection") SQL ="SELECT uyeAdi, uyeSoyadi FROM uyeler" %> Şimdi bu değerlere dayanan ve adına uyeler diyeceğimiz veri kümesini oluşturalım: <% connVeriyolu.open "uyeler" Set rsVeri=connVeriyolu.execute(SQL) %> Artık elimizde içinde bütün üyelerin adı ve soyadını tutan bir dizi-değişken var. Şimdi biliyoruz ki veritabanından veri satır-satır okunur. Birinci satırın okunması sırasında bu değişkenin değerlerini yazacak olursak: rsVeri (0) = üye 1’in adı rsVeri(1) = üye 1’in soyadı olacaktır. Veritabanından ikinci satırın okunmasında ikinci üyenin adı ve soyadı, üçüncü satırın okunmasında üçüncü üyenin adı ve soyadı bu değişkenlerin değeri olacaktır. Demek ki, bu değerleri bir SELECT etiketinin OPTION değeri olarak kullancaksak, bu işlemi ikinci satır okunmadan yaptırmamız gerekir. O halde: <SELECT NAME="AdSoyad"> <% Do While Not uyeler.eof %> <OPTION VALUE = "<%= rsVeri(0) & " " & rsVeri(1)%>"><%= rsVeri(0) & " " & rsVeri(1)%> </Option> <%rsVeri.movenext loop%> </select> <% rsVeri.close %> </SELECT> Do döngüsünün içinde iken veritabanından alınan değer, herhangi bir değişkenin değeri gibi kullanılabilir. Burada verilerin uyeler dizisinin dosya sonuna (eof, End Of File) okunduğuna dikkat edin. Şimdi yukarıdaki kodları bir Form içinde birleştirelim: <%@ LANGUAGE="VBSCRIPT" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>ASP SELECT DOLDURMA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <% ' Değişkenleri tanımlayalım Dim connVeriyolu, rsVeri, SQL Set connVeriyolu = Server.CreateObject("ADODB.Connection") SQL ="SELECT uyeAdi, uyeSoyadi FROM uyeler" connVeriyolu.open "uyeler" Set rsVeri=connVeriyolu.execute(SQL) %> <BODY> Bu listeden bir üyenin adını seçiniz: <SELECT NAME="AdSoyad"> <% Do While Not rsVeri.eof %> <OPTION VALUE = "<%= rsVeri(0) & " " & rsVeri(1)%>"><%= rsVeri(0) & " " & rsVeri(1)%> </Option> <%rsVeri.movenext loop%> </select> <% rsVeri.close %> </SELECT> </BODY> </HTML> Bu sayfayı option.asp adıyla kaydederek sınayabiliriz. Alacağımız sonuç şuna benzemelidir: <odbc0003.tif> Burada yapılan seçim sonucu elde edilen değer Server’a gönderilebilir; ve söz gelimi ziyaretçinin seçtiği kişiye ait bilgiler kendisine ulaştırılabilir. İşaretleme Alanları: INPUT-RADIO INPUT etiketi türleri ziyaretçilerimizin önceden belirlenmiş bir çok unsurdan birini veya daha fazlasını seçmelerine veya kendilerinin girdi yapmalarına imkan veren bir etikettir. INPUT türlerinden Radio ve Checkbox (işaretleme kutusu) veritabanından çekilen değerlerle doldurularak ziyaretçiye sunulabilir. Ziyaretçi, seçimini radyo düğmelerinden veya işaret kutularından birini işaretleyerek yapar. INPUT etiketinin radyo düğmesi türünün genel yazım kuralı şöyledir: <FORM ACTION=”...” METHOD=POST|GET> <INPUT TYPE=”Radio” NAME=metin1 VALUE=deger1> <INPUT TYPE=”Radio” NAME=metin1 VALUE=deger2> <INPUT TYPE=”Radio” NAME=metin1 VALUE=deger3> </SELECT> Bu Form’un gönder (Submit) düğmesi ile sağlanan hareket (ACTION), seçilen değeri Form’u işleyecek ASP programına gönderir. Bir Form’daki bir grup oluşturan bütün radyo düğmeleri aynı adı alırlar, ki böylece ASP programına bir değişken için değer gönderilmiş olur. Diyelim ki ziyaretçimizden beğendiği rengi seçmesini isteyen bir grup radyo düğmesi sunan bir Form yapacağız. Şu kodu radyo.asp adıyla kaydedelim: <%@ LANGUAGE="VBSCRIPT" %> <HTML> <HEAD> <TITLE>ASP OPTION-RADIO DOLDURMA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <% ' Değişkenleri tanımlayalım Dim connVeriyolu, rsVeri, SQL Set connVeriyolu = Server.CreateObject("ADODB.Connection") SQL ="SELECT renk FROM renkler" connVeriyolu.open "uyeler" Set rsVeri=connVeriyolu.execute(SQL) %> <BODY> <FORM><DIV ALIGN="center"><center><TABLE BORDER="0"> <TR> <TD colspan="2" align="center"><h3>Renk</h3></TD> </TR> <% Do While Not rsVeri.eof %> <TR><TD><INPUT TYPE="radio" VALUE="<%=rsVeri(0)%>" NAME="Radyo"></TD> <TD><%=rsVeri(0)%></TD></TR> <%rsVeri.movenext loop%> </TABLE></CENTER></DIV></FORM> </BODY> </HTML> Burada “Radyo” isimli radyo düğmesine verdiğimiz değerleri, ODBC’nin “uyeler” adıyla tanıdığı veritabanından alıyoruz; bir önceki örnekten farklı olarak bu kez aynı veritabanındaki farklı tablodan, renkler tablosundan ve sadece bir alanın, renk alanının değerlerini çekiyoruz. Bu örnek programda da ziyaretçinin seçtiği değerleri Server’a gönderecek bir Gönder düğmesi yok. Ama içeriğini veritabanından aldığımız değerlerle doldurduktan sonra, ziyaretçinin radyo düğmeleriyle yapacağı tercihler, tıpkı klasik HTML’deki gibi kullanılabilir; Server’a değişken olarak gönderilebilir; veya ziyaretçinin bilgisayarında (client-side) herhangi bir Script tarafından kullanılabilir. İşaretleme Alanları: INPUT-CHECHBOX INPUT etiketinin ziyaretçiye işaretleyerek tercih imkanı veren diğer aracı Checkbox (işaretleme kutusu) türüdür. Tıpkı radyo düğmesinde olduğu gibi veritabanından çekilen değerlerle doldurularak ziyaretçiye sunulabilir. Ziyaretçi, seçimini işaret kutularından birini işaretleyerek yapar. INPUT etiketinin Checkbox türünün genel yazım kuralı şöyledir: <FORM ACTION=”...” METHOD=POST|GET> <INPUT TYPE=”checkbox” NAME=metin1 VALUE=deger1> <INPUT TYPE=”checkbox” NAME=metin1 VALUE=deger2> <INPUT TYPE=”checkbox” NAME=metin1 VALUE=deger3> </SELECT> Bu Form’un gönder (Submit) düğmesi ile sağlanan hareket (ACTION) seçilen değeri Forma gönderecektir. Radyo düğmesi ile Checkbox’ın arasındaki fark, ziyaretçinin aynı ismi taşıyan radyo düğmelerinden birini işaretleyebilirken; istediği kadar Checkbox’a işaret koyabilmesidir. Birden fazla Checkbox işaretlendiği taktirde Server’a “metin1=deger1, deger2..” şeklinde bilgi gönderirler. (ASP programlama açısından, bu değişken Request.Form nesnesinde Checkbox’ın adını taşıyan kolleksiyonun içinde dizi-değişken olarak yazılır.) Yukarıdaki radyo düğmesi örneğimizin sadece Do döngüsüne ait kısmını değiştirerek,Checkbox’a uyarlayalım, ve isaret.asp adıyla kaydedelim: <% Do While Not rsVeri.eof %> <TR><TD><INPUT TYPE="checkbox" VALUE="<%=rsVeri(0)%>" NAME="Isaret"></TD> <TD><%=rsVeri(0)%></TD></TR> <%rsVeri.movenext loop%> Ziyaretçi bu form ile birden fazla kutu işaretleyerek Gönder düğmesine basarsa, Server’a gelecek bilgi örneğin, “Isaret=Kırmızı, Mavi” şeklinde olacaktır. ASP Kaynakları Bu kitapçıkta öğrendiğimiz ASP ve VBScript tekniklerinin uygulamasına ilişkin örnekleri, ikinci kitapçıkta bulacaksınız. İkinci kitapçığa geçmeden önce, buradaki küçük uygulamaların yapılması ve örneklerin çalıştırılması yerinde olur. Bu sırada ASP teknikleri ve VBScript komutları hakkında geniş bilgiyi Internet’te şu kaynaklarda bulabilirsiniz: asp.superexpert.com/ aspwire.com/ www.15seconds.com/ www.asp101.com/home/home.asp www.aspalliance.com/ www.aspdeveloper.net/ www.aspexpress.com/aspexpress.asp www.aspforums.com/ www.aspguild.org/default.asp www.asp-help.com/ www.asphole.com/asphole/default.asp www.aspin.com/index/default.asp www.asplists.com/asplists/ www.aspmessageboard.com/ www.asppipeline.com/ www.aspsite.com/ www.codeave.com/ www.devasp.com/ www.haneng.com/ www.mavweb.net/ www.programmersresource.com/ www.shopit.co.uk/ www.takempis.com/ www.tcp-ip.com/ asp/kitap 2 uu ASP/KİTAP 2 111 Önsöz 112 Alıştırma Uygulamaları 114 Doğum Günü Hesabı 114 Çift Tırnak Gerekince! 117 HTML Dışında İçerik 117 Başka Sayfaya Yönlendirme 119 Ziyaretçiden Bilgi Alma 120 Form etiketlerinden bilgi alma 126 Parola İle Sayfa Koruma 127 Dinamik İçindekiler Sayfası 129 Gecikme Bildirme Sayfası 132 Form Değerlerini Yakalayalım 135 Konuk Defteri Uygulaması 141 Veri Yönlendirmeli Web Uygulaması 146 Veri için hazırlık 146 İnşaata Başlarken 149 ODBC’e Veritabanımızı Bildirelim 150 Sıra Web Programı’nda 150 ASP’de Güvenlik 167 Elektronik Adres Doğrulama 168 Zararlı Kod Temizleme 171 ADO Güvenliği ve Hata Mesajları 174 ASP Hatası Arama 178 İleri ASP Konuları 179 Önsöz Bu kitapçık önce Byte, ardından PC World ve şimdi de PC Life dergisinin eki bid dizinin son bölümü olan ASP tekniklerinin temel ilkelerini ve VBScript kullarını anlattığımız kitapçığın devamı niteliğindedir. Bu kitapçıktan yararlanabilmek için PC Life dergisi Eğitim dizisinin Haziran 2000 sayısıyla verilen birinci bölümünü edinmeniz gerekir. ASP veya Active Server Pages (Etkin Sunucu Sayfaları) tekniği, sayfalarınızı canlandıracak bir tekniktir. Bu teknik, sil baştan bir bilgisayar programlama dili öğrenmeye gerek olmadan uygulanabilir. Bununla birlikte ASP tekniğini kullanabilmek için HTML ve Web’in nasıl çalıştığını, Server (Sunucu) ve Client (İstemci) ilişkisinin nasıl yürüdüğünü de bilmek gerekir. ASP teknolojisinden yararlanabilmek için Web sitesine evsahipliği yapan bilgisayarda çalışmakta olan Web Server’ın ASP teknolojisini tanıması ve sitenize bu hizmeti vermesi şarttır. ASP, bir zamanlar sadece Microsoft’un NT ve daha sonra Windows 2000 işletim sistemine dayanan MS-IIS (Internet Information Server) programında işleyebilirdi. Fakat şimdi artık NT-tabanlı diğer Web Server programları gibi Unix-tabanlı Web Server programları da ASP anlar ve işletir hale gelmiş bulunuyor. Fakat ASP sayfalarınızı gerçek Internet ortamında ziyaretçilerinizin hizmetine sunmadan önce, kendi bilgisayarınızda sınamanız gerekir. Bunun için bilgisayarınızın işletim sistemi Windows 95/98 ise Kişisel Web Server (PWS), NT 4.0 ise IIS kurulmuş olmalıdır. Sisteminiz Windows 2000 ise, IIS 5.0 kendiliğinden kurulmuş demektir. Örnek Kodlar İki kitapçıktan oluşan ASP rehberinin bütün örnek kodları ve veritabanı dosyaları, http://www.pclife.com.tr/......... adresinden edinilebilir. Ancak ASP öğrenirken örnek kodları kendiniz yazmalısınız. Kodlamanın incelikleri ancak kodları siz yazarsanız öğrenilebilir. Bu örneklerden sadece kendi yazdığınız kodlar hata verdiği ve hatayı bulmaktan güçlük çektiğiniz zaman, karşılaştırma amacıyla yararlanmalısınız. Teşekkürler Bu kitapçıktaki kodların değişik ortamlarda sınanması için için bana yardımcı olan dilini ve yazımını denetleyen dostlarım Mustafa Durcan, Osman Nuri Hömek ve Armağan Ergon’a teşekkür ederim. Varolan hatalar elbette bana aittir. Çok sevgili arkadaşım Mustafa Durcan’ın bütün dizinin gelişimine katkısını daima şükranla hatırlayacağım. Alıştırma Uygulamaları Bu bölümde, birinci kitapçıkta öğrendiklerimizi küçük ASP uygulamalarında kullanacağız; ve böylece son iki bölümde yer alan nisbeten daha büyük ASP Programları için hazırlık yapmış olacağız. Bu bölümdeki örnekleri mutlaka kendiniz yazmalısınız ve açıklanmamış kodlardan anlamadıklarınız olursa mutlaka daha önceki bölümlere dönerek gözatmalısınız. Bu bölümdeki kodları dikkatle incelerseniz, çoğunda daha önce ele aldığımız temel VBScript komutlarının veya ASP nesnelerine ait metodlarının kimi zaman değişik tarzda kullanımına yer verdiğimizi göreceksiniz. Temel kullanım biçimlerini öğrendikten sonra, mutlaka Microsoft’un MS-Developers Network sitesinde (http://www.microsoft.com/msdn) VBScript ve ASP konularındaki belgeleri ve eğitim metinlerini incelemelisiniz. Doğum Günü Hesabı VBScript’in dil olarak bize sağladığı bazı kolaylıkları ASP teknolojisi ile birleştirebiliriz. ASP sayfalarımızda istediğimiz gibi HTML kodları da kullanırız. Bu örnekte, bu iki unsuru da birarada göreceğiz. Aşağıdaki kodu dogumgunu01.asp adıyla kaydedin: <% @LANGUAGE=VBscript %> <% Option Explicit Response.Expires = 0 Dim serverSaat, kalanSaat serverSaat = Time ' aşağıdaki satırda işaretler arasındaki yere kendi doğum gününüzü yazın kalanSaat = DateDiff("h",Now,#7/8/2000#) %> <HTML> <HEAD> <TITLE>Dogum Günü Hesabı!</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <H3> <CENTER> <p>Selam:</p> <p>Şu anda saat: <%=ServerSaat%></p> <% If kalanSaat > 0 Then Response.Write "Doğum gününüze " & kalanSaat & " saat var." & VbCrLf ElseIf kalanSaat < 0 Then Response.Write "Doğum gününüz " & kalanSaat & " geçmiş buluyor." & VbCrLf Else Response.Write "<b>Doğum gününüz kutlu olsun!</b>" & VbCrLf End If %> </CENTER> </H3> </BODY> </HTML> Bu kodda bulunan ASP nesnelerini ve metodlarını kolayca görüyor olmalısınız. Tanımlamadığımız bir değişken kullanmayı veya değişken adlarını yanlış yazmayı önleyen Option Explicit ifadesi dikkatinizi çekiyor olmalı. Sayfamızda bir hesap yapılacağı için Browser tarafından geçici Internet dosyaları arasında (cache) saklanmasını istemediğimizi, Response.Expires’ın değerini 0 yaparak belirtiyoruz. iki değişken tanımlıyoruz (serverSaat ve kalanSaat) ve bunlardan birincisine Server’ın o andaki saatini Time fonksiyonu ile atıyoruz. İkinci değişken ise hesaplama sonucu belirlenecek. Bu arada ASP programının hangi tarihe kaç saat kaldığını hesaplamasını istiyorsak, kalanSaat’i belirleyecek formüle o tarihi yazıyoruz. Bu formüle dikkatle bakalım: kalanSaat = DateDiff("h",Now,#7/8/2000#) DateDiff ve DateAdd, VBScript’in vereceğiniz iki tarih arasında, yine vereceğiniz biçime göre farkı bulmasını veya toplamasını sağlar. Buradaki “h” hesap sonucunun saat olarak verilmesini istediğimiz gösterir. “d” ise sonucu gün olarak istediğimiz anlamına gelir. Now, Server’ın o andaki saatidir; ”#” işaretleri arasında ise hesabın yapılacağı tarih, veya buradaki örnekte doğum gününüz yer alıyor. kalanSaat değişkeninin değeri bu hesaplama sonucu olarak doğum gününüze kalan saat olacaktır. Kodumuzun geri kalan bölümünde ise elde ettiğimiz sonucu Browser’a yollayan bir If seçimi var: doğum gününüze kalan saat 0’dan büyükse veya küçükse bunu farklı cümlelerle belirtiyoruz. Kalan süre 0 ise, bugün doğumgününüz demektir! (ASP ile bu kadar uğraşırsa, insanın doğum gününü filan unutması normaldir. üzülmeyin!) Daha önce VBScript’in metin ve değişkenleri birbirine “&” işareti ile eklediğini görmüştük. VBScript ile yazdırdığımız satırların sonuna kimi zaman <BR> kodu koyarak, yeni satırın bir satır aşağıdan başlamasını sağladığımızı hatırlıyor olmalısınız. Burada & VbCrLf şeklinde gördüğümüz ifade de bunu sağlar. Bu, Visual Basic’in “alt satıra geç, başa git!” (Carriage Return, Line Feed) komutudur. <asp0011.tif> Dedik ki, DateDiff ve DateAdd fonksiyonlarının, sonucu gün olarak vermesini istiyorsanız, “d” argümanını kullanmanız gerekir. Şimdi burada öğrendikleriniz bu programı doğumgününüze kalan saati değil de günü hesaplayacak şekilde değiştirebilir misiniz? (Ortaya çıkartacağınız kodu bu kitapçığın kodları arasındaki dogumgunu02.asp dosyası ile karaşılaştırabilirsiniz.) <asp0012.tif> //////////////////KUTU/////////////////////// Çift Tırnak Gerekince! Kimi zaman ASP yoluyla ziyaretçinin Browser’ına HTML kodu göndermek gerektiğinde HTML’in gerektirdiği çift tırmak işaretini yazdırma sorunuyla karşılaşırız. VBScript’in gereği olan çift-tırnak işaretinin içine koyacağımız HTML’in gereği olan çift tırnak, ASP hatasına yol açar, C'den türetilen dillerde ters bölü işaretiyle yaptığımız türden, kontrol karakterlerinin metin olarak anlaşılmaması işini (ESCape-ing'i) VBScript’te türlü şekillerde yapabiliriz. Burada, yerine göre, üç yöntemden yararlanabiliriz işe yarar: 1. Tırnak işareti gereken yerde iki kere tırnak yazmak; 2. İçerdeki tırnak yerine tek-tırnak kullanmak 3. İçerdeki tırnak yerine & Chr(34) & kullanmak. (Bu yöntemi kullandığımızda "dışardaki" tırnak diye bir şey kalmadığına dikkat etmek gerekir.) Örnekler: objMetin.WriteLine("<%@ LANGUAGE=""VBScript""%\>") objMetin.WriteLine("<%@ LANGUAGE='VBScript'%\>") objTsOut.WriteLine("<%@ LANGUAGE=" & Chr(34) & "VBScript" & Chr(34) & "%\>") ////////////////KUTU BİTTİ////////////// HTML Dışında İçerik HTTP iletişiminde istemci Browser ile Server arasında her talep ve sunuşla birlikte bir dizi HTTP Header (başlık) bilgisi gönderildiğini biliyoruz. Bu bilgiler arasında neler bulunduğunu dabu kitapçığın kodları arasında bulunan SerDeg.asp dosyasını çalıştırarak inceleyebilirsiniz. Browser penceresinde beliren bilgilere dikkat ederseniz, Browser, Server’a HTTP yoluyla kabul edebileceği bilgi türlerini de sıralıyor: HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */* Burada düzyazı (text/plain) türünün bulunmadığını görüyorsunuz. Fakat ASP yoluyla, sayfanıza düz yazı gönderebilirsiniz. Aşağıdaki kodu duzyazi.asp adıyla kaydedin, ve çalıştırın: <% @LANGUAGE=VBscript %> <% Response.ContentType = "text/plain" Response.Expires = 0 %> Selamlar Bu dosyada HTML etiketi kullanmıyoruz. Metin tamamen bir düz yazıdan ibaret. İçinde <BR> kodu bulunmadığı halde satırlar Enter'a bastığımız yerde alt satıra geçecektir. Bu kodu yazarken buradaki örnekte gördüğünüz satır sonlarında Enter’a basmalısınız. Browser’ınızdaki sonuç şuna benzer ıolmalı: <asp0013.tif> Genellikle HTML sayfalarımızı tasarlarken içerik türünü belirten Content-Type özelliğini yazmayız; çünkü Browser, içerik türü belirtilmemişse gelen belgenin mutlaka “text/html” olduğunu varsayar. Fakat burada olduğu gibi, içinde bir tek HTML etiketi (hatta <HTML> etiketi bile) olmayan bir metni Browsar’a gönderebilir ve istediğimiz şekilde görüntületebiliriz. Bunu Response.ContentType = "text/plain" ifadesi sağlamaktadır. Response nesnesi, varsayılan türler dışında sadece düz yazı türü göndermekle kalmaz, Browser’ın kabul edebileceği ve HTTP’nin aktarılmasına elverişli olduğu her türlü dosyayı gönderebilir. Bu dosya türlerinin hangileri olabileceğini çevre değişkenlerinden HTTP_Accept’in içinde görebilirsiniz. Bunu sınamak için duzyazi.asp’nin Content-Type satırını şu şekilde değiştirin ve dosyayı msword.asp adıyla kaydedin: Response.ContentType = "application/msword" Bu dosyayı çalıştırdığınızda, Broewser türünüze ve ayarlarınıza ve sisteminizde MS-Word programının bulunup bulunmamasına bağlı olarak, ya doğruca ya da size sorarak, bilgisayarınız MS Word kelime işlemcisini açacaktır: <asp0014.tif> Bu imkandan ziyaretçiye resim veya diğer tür dosyaları göndermek için yayarlanabiliriz. Ancak bir resim dosyasını gönderirken, metin vermek yerine dosya yolu ve adını belirtmemiz gerekir. Başka Sayfaya Yönlendirme Diyelim ki ziyaretçilerimizin Web programımızda belirli işleri yapabilmeleri veya eski ifadesiyle sitemizde belirli bir sayfaya erişmek için kayıt yaptırmış olmaları gerekiyor; bu kaydı yaptırmamış olanları kayıt sayfasına yönlendirmek istiyoruz. Birazdan form yoluyla ziyaretçiden bilgi alma ve bunu işlemeyi göreceğiz, ama şimdilik sadece bu senaryonun ikinci kısmını ele alalım: ziyaretçimizi başka sayfaya yönlendirelim. Bunun için iki ayrı sayfa yapacağız. Önce şu kodu, gonder.asp adıyla kaydedin: <% @LANGUAGE=VBscript %> <% Response.Redirect("yeni.asp") Response.Expires = 0 %> <HTML> <HEAD> <TITLE>ASP ILE YONLENDİRME</TITLE> </HEAD> <BODY> Bu sayfada yazılı olanları okumanız mümkün olmayacak<br> çünkü bu sayfa sizi başka sayfaya gönderecek.. </BODY> </HTML> Şimdi şu kodu da yeni.asp adıyla kaydedin: <HTML> <HEAD> <TITLE>YENİ SAYFA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <%= “Sizi buraya başka sayfa gönderdi.. <BR>”%> </BODY> </HTML> gonder.asp’yi çağırın; karşınıza yeni.asp’nin içeriği gelecektir; çünkü gonder.asp kendisinden beklediğimizi yapacak ve sizi yeni.asp’ye gönderecektir. Bunu “Response.Redirect” metodu yapmaktadır. Bu metodun argümanı olarak kendi programımızın bir başka sayfasını verebileceğiz gibi, bir Internet sitesinin URL’ini de verebiliriz. Ziyaretçiden Bilgi Alma İstersek adına Web Programı diyelim, sitemize ziyaretçilerin bilgi ulaştırması ancak HTML’in Form etiketi yoluyla olur. Klasik HTML+CGI yöntemleri ile ASP tekniğinde Form etiketlerinin işlevleri arasında bir fark yoktur. Ancak aralarındaki benzerlik de hemen hemen bundan ibarettir. Klasik HTML+CGI yönteminde Form’larımızın Action özelliğine değer olarak çoğu zaman bir CGI programının yolunu ve adını yazarız; oysa ASP’de Form bu bilgileri kendisinin de içinde bulunduğu ASP sayfasına gönderebilir; ve örneğin formun eksik doldurulup doldurulmadığını sınayabilir. HTML bilgilerinizi tazelerseniz; bir Form’dan Server’a iki metodla bilgi gelebilir: Get ve Post yöntemleriyle. Get, Browser’ın bilgileri yumak yapıp, aradaki boşlukları kaldırarak ve ASCII olmayan karakterleri URL koduyla şifreleyerek Query_String içine yazdırmasını sağlar. Diğer yöntemi birazdan ele alacağız. Küçük bir form oluşturalım ve bu formdan Get yoluyla gelecek bilgileri daha sonra nasıl kullanabileceğimizi görmek için, şimdilik sadece sayfamıza yazdıralım. Şu kodu miniform_get.asp adıyla kaydedin: <% @LANGUAGE=VBscript %> <% Option Explicit Response.Expires = 0 Dim strAdi, strSoyadi, hamBilgi, islenmisBilgi If Request.ServerVariables("QUERY_STRING") <> "" Then strAdi = Trim(Request.QueryString("adi")) strSoyadi = Trim(Request.QueryString("soyadi")) hamBilgi = Trim(Request.QueryString("mesaj")) islenmisBilgi = Replace(hamBilgi, vbcrlf, "<BR>" & vbcrlf) %> <html> <head> <title>Mini Form</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </head> <body> Script'imize Form'dan bilgi ulaştı <BR><BR> Gelen bilgiler:<BR> Formu dolduran kişinin adı: <%= strAdi%> <BR><BR> Formu dolduran kişinin Soyadı: <%= strSoyadi%> <BR><BR> Ham Bilgiler: <%= hamBilgi%> <BR><BR> İşlenmiş Bilgiler: <%= islenmisBilgi%> <BR><BR> "Query_String" olarak gelen bilgi: <BR> <%= Request.ServerVariables("QUERY_STRING")%> </body> </html> <% Else %> <html> <body> Bize bilgi verir misiniz?<BR> <FORM ACTION= "<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="GET"> Adınız: <INPUT TYPE="Text" NAME="adi"><BR> Soyadınız: <INPUT TYPE="Text" NAME="soyadi"><BR> Mesajınız: <TEXTAREA NAME="mesaj">Mesajınızı buraya yazın!</TEXTAREA><BR> <INPUT TYPE="Submit" NAME="Gönder" VALUE="Gönder"> </FORM> </body> </html> <% End If %> Kodumuzun bir değişken tanımladığımız ve Form’dan gelen bilgileri işleyen bölümü, bir de henüz bu bilgi gelmeden önce Form’u oluşturan bölümü olduğuna dikkat ediyor musunuz? Bu iki bölümü bir If sınama deyimiyle oluşturduğumuzu da görüyorsunuz. ASP tekniği ve VBScript’in kolaylıkları birleşince, CGI’da olduğu gibi, Formdan gelen bilgileri özel fonksiyonlar yazarak ayıklamamız gerekmez. ASP’nin anladığı şekliyle, Query_String Form’dan GET metoduyla gelen bilgileri Form’un bilgileri atadığı değişkenlerin adlarıyla eşleştirerek tutar; ve bize sadece Form’daki değişkenlerin değerlerini, istiyorsak, başka değişkenlere atamak kalır. Burada Form’un “adi” olan değişkenini bir String değişkeni olan strAdi değişkenine, yine Form’un “soyadi” olan değişkenini başka bir bir String değişkeni olan strSoyadi değişkenine atıyoruz. Bunu yapmamızın sebeplerinden biri iki dizi değişkenden hangisinin ASP tarafında kullanıldığını bilmektir. Form’un üçüncü değişkeni olan “mesaj” ise ASP tarafından işlenirken, iki şekilde ele alınacak: hamBilgi değişkeninin değeri olarak, ve bunu Replace() fonksiyonu ile işledikten sonra atayacağımız islenmisBilgi değişkenini değeri olarak. Replace() fonksiyonu, bir değişkende bir değeri bulur ve arzu ettiğimiz bir başka değerle değştirir. Üç argüman alır: içinde arama ve değişiklik yapılacak değişken, aranacak değer ve yerine konacak değer. Burada iki veya daha fazla paragraf içeren bir mesajın içindeki satırbaşı-yeni paragraf karakterini, HTML’in anlayacağı <BR> ve satırbaşı karakteri ile değiştiriyoruz. Şimdi miniform_get.asp’yi çalıştırın, doldurun (mesaj bölümünde iki paragraf oluşturmak için bir yerde Ctrl+Enter’a basmayı unutmayın! Yoksa işlenmiş bilgi ile ham bilginin farkını göremeyiz!) ve Gönder tuşunu tıklayın. Bu arada Browser’ınızın URL hanesine bakın. Bu Get metodunun bilgi gönderme şeklidir. Bilgiler URL-kodu olarak değiştirilir ve gideceği sayfanın adına, soru işareti ile eklenerek, gönderilir. (Tabii ziyaretçiniz yıldızlar halinde görüntülenen bir parola yazdıysa onu da burada açık şekilde görecektir!) <asp0015.tif> Bizim Form bilgilerimiz hangi sayfaya gönderiliyor? Yine kendisine. Bunu Form etiketinin Action özelliğinin karşısında yazılı olan VBScript kodu sağlıyor. Bu yolla gelen bilgi, şuna benzer olmalıdır: Script'imize Form'dan bilgi ulaştı Gelen bilgiler: Formu dolduran kişinin adı: Kroninukus Formu dolduran kişinin Soyadı: Computerium Ham Bilgiler: Merhaba Ben üniversiteyi yeni bitirmiş bir gencim! İşlenmiş Bilgiler: Merhaba Ben üniversiteyi yeni bitirmiş bir gencim! "Query_String" olarak gelen bilgi: adi=Kroninukus+&soyadi=Computerium+&mesaj=Merhaba%0D%0ABen+%FCniversiteyi+yeni+bitirmi%FE+bir+gencim%21+%0D%0A&G%F6nder=G%F6nder Replace() fonksiyonunun, mesajın içindeki CRLF karakterini bulup yerine <BR> koyduğuna dikkat edin. Query_String’in yazdığınız ad ve soyad ile mesajı nasıl yumak (tek String) yaptığına bakın. Ve programımızın bu yumaktan bilgileri alıp, yeni değişkenlere atayarak Browser penceresinde nasıl görüntülediğini inceleyin. Bu programın canalıcı noktası, Request nesnesinin ServerVariables kolleksiyonunda, Query_String koleksiyonunu kullanmasıdır. Çünkü Get, Form’un sağladığı bilgileri bu koleksiyona kaydetmiş bulunuyor. Şimdi aynı işi Post metodu ile yapalım. Bunun için biraz önce kaydediğiniz kodda şu değişiklikleri yapın ve miniform_post.asp adıyla kaydedin: <% @LANGUAGE=VBscript %> <% Option Explicit Response.Expires = 0 Dim strAdi, strSoyadi, strBilgi If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then strAdi = Trim(Request.Form("adi")) strSoyadi = Trim(Request.Form("soyadi")) strBilgi = Trim(Request.Form("mesaj")) strBilgi = Replace(strBilgi, vbcrlf, "<BR>" & vbcrlf) %> <html> <head> <title>Mini Form (Post)</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </head> <body> Script'imize Form'dan bilgi ulaştı <BR><BR> Gelen bilgiler:<BR> Formu dolduran kişinin adı: <%= strAdi%> <BR><BR> Formu dolduran kişinin Soyadı: <%= strSoyadi%> <BR><BR> Mesaj: <%= strBilgi%> <BR><BR> </body> </html> <% Else %> <html> <body> Bize bilgi verir misiniz?<BR> <FORM ACTION= "<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST"> Adınız: <INPUT TYPE="Text" NAME="adi"><BR> Soyadınız: <INPUT TYPE="Text" NAME="soyadi"><BR> Mesajınız: <TEXTAREA NAME="mesaj">Mesajınızı buraya yazın!</TEXTAREA><BR> <INPUT TYPE="Submit" NAME="Gönder" VALUE="Gönder"> </FORM> </body> </html> <% End If %> İki Miniform sayfası arasındaki değişikliği farkettiniz mi? Önce, Form etiketinin METHOD özelliğinin Post olduğuna dikkat edin. Bu yöntemle gelen bilgiler, Request nesnesinin Form kolleksiyonuna, işlenmiş (yani değişken=değer çiftleri halinde yazılmış) olacağı için, Form bilgilerini yeni değişkenlere atama ifadelerimizi de farklı yazıyoruz. Önce formdan gerçekten bilgi gelip gelmediğini Content_Length değişkeninin boyutunun sıfır olup olmadığına bakarak anlıyoruz. Bu değişkenin boyutu 0 ise form içi boş gönderilmiş demektir; bu durumda ziyaretçiyi form’u doldurması için uyaran bir Sub’a gönderebiliriz. Form doldurulmuş ise, kodumuzun birinci bölümü yapması gereken değişkenlere atama işlemini yapıyor; ve sonuçları ziyaretçinin Browser penceresine yazıyor. Daha sonra yapacağımız örnek Konuk Defteri’nde bu bilgileri ziyaretçinin ekrarına değil, bir metin dosyasına yazacağımızı göreceksiniz. Form etiketlerinden bilgi alma Form içinde kullandığımız bir çok etiket, Server’a farklı biçimde bilgi gönderir. Yukarıdaki örnekte gördüğümüz Input ve Textarea etiketle
  22. Response.Write "<BR>" Response.Write "Site Onarım Sitesine Hoşgeldiniz" %> </CENTER> </H2> </BODY> </HTML> Select Case komutuna, içindeki değerleri “durum” sayacağı dizi veya değişken olarak VBScript’in kullanılmaya hazır fonksiyonlarından Hour(Now)’ı veriyoruz. Bu fonksiyondan, 0 ile 24 arasında bir değer dönecektir. Bu değer Select Case için bir durum demektir. Select Case, bu değer ile altta sıralanan Case’leri karşılaştıracak ve elindeki değer hangi Case’i tutuyorsa ona ait komutları icra edecektir. Sonuncu Case’e lütfen dikkat edin: Burada Case olarak Else (başka) veriliyor. Bu bizi, 17’den 23’e kadar olan saatleri sıralamaktan kurtarır. 0’dan 11’e kadar olan saatlerle 12’den 17’ye kadar olan saatleri sıraladığımıza göre başka hangi saat olursa olsun, ziyaretçimize “İyi akşamlar!” dileyebiliriz. Eğer 24’den sonra ve 04’den önce ziyaretçinize “İyi geceler!” dilemek isterseniz, bu programı nasıl değiştirirdiniz? Döngüler Sınama bir programın akışını kontrol için kullanacağımız birinci en önemli unsur ise, döngü de ikinci en önemli unsur sayılır. Hatta programcının tembellik katsayısına göre, belki de birinci en önemli unsuru bile sayılabilir! Çünkü Döngü (Loop) programa, bir işi biteviye yaptırmaya yarar. Tabiî bu iş sonsuza kadar sürecek olursa, buna Endless Loop (Sonsuz Döngü) denir; en iyi program ve Windows dondurma yöntemidir! VBScript’te kullanabileceğimiz döngü yöntemleri şunlardır: 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 Burada, “sayaç” yerine istediğiniz bir değişken adını, “başlangıç” yerine sayacın başlamasını istediğiniz sayıyı, “son” yerine sayacın durmasını istediğiniz sayıyı, ve “adım” yerine, sayacın kaçar-kaçar artmasını istediğinizi yazabilirsiniz. En sondaki Next deyimi ise döngünün bir sonraki adıma geçmesini sağlar. Bu adımda sayaç, Step kelimesi varsa, karşısındaki değer kadar arttırılır ve yapılacak işler yeniden yapılır. Bir örnek yapalım (gunler.asp): <HTML> <HEAD> <TITLE>ASP ILE GÜNLERI SAYMA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <H2> <CENTER> <% Dim Gunler Gunler = Array("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar") For sayac = 0 to 6 Response.Write Gunler(sayac) Response.Write "<BR>" Next %> </CENTER> </H2> </BODY> </HTML> Bu ASP kodunda, Gunler adıyla bir dizi-değişken oluşturuyoruz ve bu değişkenin yedi hanesine, günlerin adlarını atıyoruz. Sonra, sayac adlı sayacı 0’dan 6’ya kadar arttırıyoruz (Bir sayaç birer birer artsın istersek, Step bölümüne adım sayısı yazmayız). Şimdi kendimizi bir an için VBScript’in yerine koyalım ve birinci adımda yapacağımız işi düşünelim: “Hmm.. Programcı bey, benim sayac’ı önce 0 yapmamı istiyor; peki sayac 0 olsun. Sonra, Gunler dizi-değişkeninden sayaç değeri ile aynı sayıyı taşıyan değişkeni alıp, bunu ziyaretçinin Browser’ına yazmamı istiyor. Peki, Gunler(0) ne imiş, bakalım. Hmm Gunler(0) Pazartesi imiş. o halde ziyaretçinin ekranına bir Pazartesi kelimesi yazalım. Sonra bir de <BR> kodu yazmamı istiyor. Onu da yazalım.. Şimdi, sırada Next var. Yani bir sonraki adıma devam edeceğiz. Step değeri olmadığına göre sayacı bir arttırayım. Sayaç böylece 1 oldu. ...” Ve böylece VBScript, sayacın son değeri olan 6’ya ulaşıncaya kadar, biteviye Gunler dizi-değişkeninden sayacın değerine göre değer seçerek ve bunu ekrana yazdırarak, işini yapacaktır. Bu bakımdan VBScript, güvenilir ve çalışkan bir arkadaştır! 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 "<BR>" sayac = sayac + 1 Wend Burada While döngüsünün Wend kelimesiyle sonlandırıldığına dikkat edin. While satırındaki sayacı değiştirdik, programın sayaç 5’den küçük veya 5’e eşit iken işlemesini sağladık. For’dan farklı bir diğer ifade ise sayacı arttıran “sayac = sayac + 1” ifadesidir. Bu ifade, ilk bakışta garip görünebilir. Fakat bilgisayar açısından bu “sayac’ın o andaki değerini al, 1 ile topla ve bulduğun yeni değeri sayacın mevcut değerinin yerine yaz!” demektir. VBScript sayacı bir arttırdıktan sonra önce While satırındaki şartın gerçekleşip gerçekleşmediğine bakar; gerçekleşmiş ise Wend’i izleyen ilk satıra gider; gerçekleşmemişse While döngüsünün içindeki işi yapmaya devam eder. Kendinizi VBScript’in yerine koyup, birinci ve ikinci adımda nasıl düşündüğünüzü ve ne iş yaptığınızı söyleyebilir misiniz? Belgenin Başı 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 Burada, Loop komutu şartın henüz gerçekleşip gerçekleşmediğini sınar ve henüz gerçekleşmemişse verilen işleri yapar; gerçekleşmişse bir sonraki satıra geçer. Visual Basic metinlerinde bu döngüye verilen klasik örnek, bilgisayara yazı-tura attırmaktır! Biz de ASP sayfamıza yazı-tura attırabiliriz. Bunun için şu kodu yazın ve yazi-tura.asp adıyla kaydedin: <% Option Explicit %> <HTML> <HEAD> <TITLE>ASP ILE YAZI-TURA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <H2> <CENTER> <% Dim ParaAt, Yazi, Tura, Atis Randomize Yazi = 0 Tura = 0 Atis = 0 Do While Tura < 3 atis = Atis + 1 ParaAt = Int(Rnd * 2) + 1 If ParaAt = 1 Then %> Yazı!<P> <% Yazi = Yazi + 1 Else %> Tura!<P> <% Tura = Tura + 1 End If Loop %> 3 Tura getirebilmek için parayı <%=Atis%> kere atmak gerekti! </HTML> Bu kodda şu ana kadar karşımıza çıkmamış olan Randomize (Tesadüfî sayı bulma) Fonksiyonu’nun kullanıldığını görüyoruz. ////////////////////KUTU/////////////////// 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 %> <HTML> <% Dim TesadufiSayi Randomize TesadufiSayi = Rnd %> <%=TesadufiSayi%> </HTML> Bu dosyayı tesaduf.asp adıyla kaydedip çalıştırın; Browser’ın Yenile düğmesini her tıkladığınızda ekranda yeni bir sayı göreceksiniz. Bu sayıların rastlantısal olması, bir kere daha gelmeleri için hiç bir kural (örneğin her rakamın 123 kerede bir gelmesi veya 1 milyon 245 bin kerede bir gelmesi gibi) bulunmamasıdır. İşin tekniğini bilmek isterseniz, VBScript, her Rnd komutu icra edildiğinde bilgisayarın saatini öğrenir; içinden seçeceği bir rakamı son derece karmaşık bir formülden geçirerek size bir rakam verir. bu rakam daima 0 ile 1 arasında olur. “(Rnd*6)+1” formülü bize 1 ile 6 arasında (yani bir zarın değerlerinden her hangi biri), “(Rnd*13)+1” formülü ise 1 ile 13 arasında (yani bir iskambil destesindeki kağıt değerlerinden herhangi biri) bir değer verir. Fakat dikkat: bu değerler tam sayı değildir! /////////////////KUTU BİTTİ///////////// Programımızın bütün işlemi Do döngüsü bölümünde yapılıyor ve bilgisayarın bir tesadüfî sayı üretmesi esasına dayanıyor. Bunu Randomize ve Rnd fonksiyonları ile yapıyoruz. Rnd’un verdiği tesadüfî rakamı, iki ile çarpıyor ve çıkan sayıyı 1 ile topluyoruz; böylece ortaya 1’den büyük 3’den küçük bir kesirli rakam çıkmış oluyor (Neden?). Bu rakamı Int() fonksiyonundan geçirerek, kesirinden kurtarıyoruz. ////////////////////////KUTU//////////// Tam Sayı Elde Etmek için: Int ve Round Rnd fonksiyonu ile ilgili yukarıdaki örneği yaptıysanız, dönen sayının 0 ile 1 arasında, yani daima kesirli olduğunu görmüş olmalısınız. Bazen bizim sayfalarımızdaki hesaplamalar veya veritabanından alınan değerler de kesirli olabilir. Örneğin öğrencilerin not ortalamalarını hesaplattırırken VBScript size sonu gelmez kesirler verecektir. Oysa çoğu zaman bu rakamların ya yukarı “yuvarlanması”, ya da sadece tam sayı bölümü gerekir. VBScript’te Int() fonksiyonu, bize bir sayının tam sayı bölümünü verir. Diyelim ki elimizdeki KesirliSayi değişkeninin değeri 123,234567 olsun. Tamsayi = Int(KesirliSayi) işleminden sonra Tamsayi değişkenin değeri 123 olur. Fakat kimi zaman bir sayının kesirli bölümünü böyle bıçakla kesip atmak işimize gelmeyebilir. Round() fonksiyonu, kesirli bir sayıyı yukarı veya aşağı “yuvarlayarak” tam sayı haline getirir. Bu kez ki elimizdeki KesirliSayi değişkeninin değeri 5,6 olsun. Tamsayi = Int(KesirliSayi) işleminden sonra Tamsayi değişkenin değeri 6 olur. Kesirli sayı 56,2 ise, Round() fonksiyonu bize 56 değerini verir. //////////////////////////////KUTU BİTTİ/////////////// Programımız, elde ettiği ve Paraat değişkenine kaydettiği bu sayı 1 ise, Yazı gelmiş sayıyor; ve Browser Penceresine “Yazı!” yazıyor. Bu arada yapılan atış sayısını kaydettiğimiz Atis ve gelen tura sayısını tuttuğumuz Tura değişkenlerinin değeri bir arttırılıyor. ParaAt değişkeninin değeri başka bir şeyse (ne olabilir?), programımız bu kez tura geldiğine hükmediyor ve Browser penceresine “Tura!” yazıyor. Do döngüsü, Tura gelen atışların sayısı 3 oluncaya kadar devam ediyor. Çünkü Do döngüsünü While Tura < 3 (Tura 3’den az iken) deyimi ile çalıştırıyoruz. Ve program sonunda 3 tura gelinceye kadar kaç atış yaptığını yazıyor. <asp0008.tif> Bu ASP sayfası görüntülenirken Browser’ın Yenile düğmesini tıklarsanız, her seferinde Tura getirmek için farklı sayıda atış yapmak gerektiğini; aynı sayıda atış yapılsa bile turalarla yazıların yerinin değiştiğini göreceksiniz. Dizi değişkenler için döngü: For Each..Next For..Next gibi çalışan bu özel döngü, sayaç değeri kullanmaz, fakat bir dizi değişkenin bütün değerleri için bir kere icra edilir. Dizi-değişkenler, VBScript ile yapacağımız işlemlerde önemli bir yer tutar. Örneğin bir sınıftaki öğrencilerin veya müşterilerimizin listesi bir dizi değişkenin elemanları olabilirler. Yapmak istediğimiz işlem, dizi-değişkenin bütün elemanları için tekrar edilecekse, For Each..Next döngüsü daha elverişli olabilir. Bir dizi-değişkenin eleman sayısı ilerde değişirse ve siz döngüyü For..Next ile kurmuşsanız döngünün sayacı için verdiğiniz için alt ve üst sınırı değiştirmek zorunda kalırsınız. Oysa For Each, kaç kere tekrar edeceğine ilişkin değeri her zaman dizi-değişkenin elemanların sayısından alır. Örneğin, bütün öğrencilerin listesini tutan Ögrenciler dizi-değişkeninin bütün elemanlarının değerini ekrana yazdıralım: For Each Ogrenci In Ogrenciler Response.Write Ogrenci Next Burada “Ogrenci” Ogrenciler dizi-değişkeninde döngünün her adımında okunan bir elemanın değerini tutar. For Each döngüsü tarafından “okunmakta olan” dizi-değişkenin her bir değeri sırayla bu değişkene yazılacaktır. Bunu bir tür endeks değişken olarak düşünebilirsiniz. Belgenin Başı 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 Bu durumda For..Next döngüsü, Degisken1’in değerinin Degisken2’den yüksek olduğunu belirlerse, derhal döngüyü durdurarak, Next’ten sonraki satıra gidecektir. Do döngüsünden ise Exit Do ile çıkababiliriz. Bu ifadenin kullanımı da Exit For gibi olur. 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: <% Sub YaziTura() Dim ParaAt Randomize ParaAt = Int(Rnd * 2) + 1 If ParaAt = 1 Then Response.Write “Yazı” Else Response.Write “Tura” End If 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: Hesapla 10, 20 Bu Sub işini bitirdiği anda programın akışı, Sub’a atıf yaptığımız noktada devam eder. Sık Kullanacağımız Hazır Fonksiyonlar VBScript’te kullanabileceğimiz bir iki hazır-fonksiyona yukarıda değindik. Tesadüfî sayı üreten Rnd() fonksiyonu bunlardan biriydi; ayrıca Int() fonksiyonu ile kesirli bir sayının tam bölümünü alabildiğimizi gördük. VBScript’in kullanılmaya hazır daha bir çok fonksiyonu vardır; ancak ASP uygulamalarında sık kullanacağımız ve özellikle metin düzenlemeye ait olan bir kaçını burada sıralayalım. Tarih 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. Karakter-dizisi Düzenleme Karakter-dizisi veya String, VBScript için herşey olabilir. “Sana Sevdanın Yolları Bana Kurşunlar” bir String’dir. “Bugün 7 Ağustos 2000” bir String’dir. “Doğum Günün Kutlu Olsun!” bir String’dir. Web sitemizi ziyaret eden kişinin formlarımıza yazacağı ve Gönder tuşunu tıklayarak Server’a göndereceği bilgiler String’dir. Fakat bunların hepsi olduğu şekliyle işimize yaramaz. Bunları yeniden düzenlemek, içinden seçmeler yapmak veya biçimlerini değiştirmek gerekebilir. VBScript bu amaçla kullanılmaya hazır bir dizi fonksiyon verir: InStr Uzun bir String’in içinde vereceğiniz daha kısa bir String’in bulunup bulunmadığını arar; bulursa bu kısa String’in başlama noktasının değerini verir. Diyelim ki, “Sana Sevdanın Yolları Bana Kurşunlar” String’ini Kayahan değişkenine, “Sevda” kelimesini de Ara değişkenine atadınız. InStr fonksiyonu ile Ara’nın değerinin yerini Kayahan’ın değerinin içinde bulabilirsiniz: Yer = InStr(Kayahan, Ara) Yer’in değeri 6 olacaktır; çünkü “Sevda” kelimesi, uzun String’de 6’ncı karakterden başlamaktatır. Len Bir String’in uzunluğunu belirler. Yukarıdaki örnekte yer alan Kayahan değişkenin uzunluğunu şöyle belirleyebiliriz: Uzunluk = Len(Kayahan) Uzunluk değişkeninin değeri 36 olacaktır. UCase Vereceğiniz bir String’in tüm karakterlerini büyük harfe çevirir. YeniString = UCase(Kayahan) Yeni String’in değeri: “SANA SEVDANIN YOLLARI BANA KURŞUNLAR” olacaktır. LCase Vereceğiniz bir String’in tüm karakterlerini küçük harfe çevirir. YeniString = LCase(Kayahan) Yeni String’in değeri: “sana sevdanın yolları bana kurşunlar” olacaktır. LTrim, RTrim, Trim Verdiğiniz String’in (sırasıyla) solunda yani baş tarafında; sağında yani sonunda ve hem başında ve hem de sonundaki boşlukları temizler. Space İçinde, vereceğiniz sayı kadar boşluk olan boş bir String oluşturur. Örneğin Bosluk = Space(20) Bosluk değişkenin değeri “ “ (20 boşluk) olacaktır. String İstediğiniz sayıda ve istediğiniz bir karakterle bir String oluşturur. YeniString = String(3, “*”) YeniString değişkeninin değeri “***” olacaktır. Left, Right Bir String’in içinde soldan (baştan) veya sağdan (sondan) verdiğiniz sayıya kadar olan karakterleri verir. Örneğin, yine yukarıdaki Kayahan değişkenini kullanırsak: Solda = Left(Kayahan, 4) Solda değişkeninin değeri “Sana” olacaktır; çünkü Kayahan değişkeninin soldan itibaren dört harfi “Sana“ kelimesine denk geliyor. Mid Bir String’in içinde başlangıç noktasını ve karakter olarak boyunu verdiğiniz alanda yer alan String’i verir. Ortada = Mid(Kayahan, 5, Ortada değişkeninin değeri “Sevdanı” olacaktır; çünkü Kayahan değişkeninin soldan 5’nci değişkeninden itibaren 8 karakterlik alanda “Sevdanı” karakterleri yer alıyor. Dizi-Değişken (Array) Fonksiyonu VBScript’in dizi-değişken oluşturmada Array() fonksiyonu ile sağladığı kolaylıklara kısaca değindik. Fakat Array ile daha bir çok iş yapabiliriz; ve dizi değişken oluşturmakta VBScript’in diğer bazı kolaylıklarından yararlanabiliriz. Dizi-değişkenler, özellikle Web ziyaretçilerimizden gelecek bilgilerin kaydedilmesinde; veritabanından çekeceğimiz verilerin kullanılır hale getirilmesinde yararlı bir araçtır. Dolayısıyla ASP sayfalarınızda sık sık çok-boyutlu dizi değişkenlerden yararlanacaksınız. Bunun için gerekli araçları kısaca ve topluca ele almamız yerinde olur. Bir dizi değişken oluştururken, değişkenin eleman sayısını belirtmezsek, VBScript, kendi kendine “Anlaşılan bu diziyi dinamik yapmamı istiyorlar!” der; ve daha sonra elemanlarının değerleri sonradan belirtilebilecek ve eleman sayısı sonradan arttırılabilecek bir dinamik dizi-değişken oluşturur. (“VBScript iyi huyludur,” demiş miydim?) Örnek: Dim Ogrenciler() Bu komutla, Ogrenciler dizi-değişkeni oluşturulur; ancak eleman sayısı belirtilmediği için dizi dinamiktir; yani daha sonra bu dizinin eleman sayını belirleyebilirsiniz. Bunu: ReDim Ogrenciler(15) gibi bir komutla yapabiliriz. Şimdi aklınıza şu soru gelebilir: Peki neden Ogrenciler dizisini baştan eleman sayısını belirterek tanımlamıyoruz? Güzel soru! Cevabı şu olabilir mi? Dizi-değişkenimizin eleman sayısını henüz bilmiyoruz; ve programın akışı içinde bu sayı, başka bir fonksiyonun, Sub’ın veya kullanıcı girdisinin sonucu olarak belirlenebilir. Fakat hemen belirtmek gereken bir nokta var: ReDim komutu, mevcut bir dizi-değişkenin içindeki herşeyi siler! Mevcut dizinin elemanlarını ve onların değerlerini korumak istiyorsak: ReDim Preserve Ogrenciler(20) yazmamız gerekir. Buradaki Preserve (koru) komutu, VBScript’e mevcut dizi içindeki elemanları korumasını, ve eleman sayısını 20’ye çıkartmasını bildirir. Buna neden gerek olabilir? Ziyaretçinin tercihleri değişebilir; örneğin bir elektronik alışveriş sitesinde ziyaretçiniz yeni şeyler alabilir; daha önceki alışverişlerine ilişkin verileri tuttuğunuz dizi-değişkenin eleman sayısını, daha önceki bilgileri silmeden arttırmanız gerekir. VBScript’in dizi-değişkenlerini tümü aynı adı taşıyan bir liste olarak düşünebilirsiniz; sadece değişken adının yanında dizinin kaçıncı elemanı olduğunu belirten sayı bulunur: Ogrenciler(1): Necip Ogrenciler(2): Serap Ogrenciler(3): Neslihan Fakat VBScript çok boyutlu dizi değişken de oluşturabilir. İki boyutlu dizi-değişkeni tablo gibi düşünün; dizinin elemanları aynı adı taşıyan değişkenler fakat bu kez sadece tek sayı değil sıra ve sütun numaraları ile belirleniyorlar: Ogrenciler(1,1): Necip Ogrenciler(1,2): Serap Ogrenciler(1,3): Neslihan Ogrenciler(2,1): Selim Ogrenciler(2,2): Murat Ogrenciler(2,3): Merve Ogrenciler(3,1): Elif Ogrenciler(3,2); Hande Ogrenciler(3,3): Leyla Şimdi, burada üç sıralı, üç sütunlu bir tablo getirebilirsiniz gözünüzün önüne. Bu dizi-değişkeni şu komutla oluşturabiliriz: Dim Ogrenciler(3,3) Böyle bir değişkende sözgelimi birinci sıra (numarası 1,x olanlar) çalışkanları, ikinci sıradakiler (2,x’ler) daha az çalışkanları vs., belirtebilir. VBScript, üç, dört ve hatta beş boyutlu dizi-değişken oluşturur. Ama bunu nerede kullanacağınızı siz kararlaştırabilirsiniz. Bir dizi-değişkenin herhangi bir elemanın değerini, programın herhangi bir aşamasında değiştirebilirsiniz: Ogrenciler(3,2) = “Caner” komutu, Hande’nin adını siler ve yerine Caner’in adını yazar. Dizi-değişkenlerimizin eleman sayısını bilmek isteyebiliriz. Kimi zaman dizi-değişkenlerimizin eleman sayısı biz belirlemeyiz; bu bilgi bir formdan gelebilir; bir veritabanından alınabilir; fakat mesela bir döngü için bu değişkenin kaç elemanı olduğunu bilmek gerekir. Örneğin elimizde 35 elemanı olan Ogrenciler dizi-değişkeni varsa, bu sayıyı ElemanSayisi = UBound(Ogrenciler) komutu ile ElemanSayisi değişkenine yazdırırız. ElemanSayisi’nin değeri bu durumda 35 olacaktır. Belgenin Başı Test Fonksiyonları 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! ASP’nin Nesneleri Masa, nesnedir. Notebook bilgisayarınız da nesnedir! Arkadaşınız da bir nesnedir. Tabiî bunu onun yüzüne karşı söylemeseniz, iyi olur. Her nesnenin özellikleri vardır. Masa serttir. Su, içine konulduğu nesnenin biçimi alır. ASP tekniğinde de amacımız nesnelerin özelliklerini kullanarak, ya bu özellikleri belirlemek, ya da değiştirmektir. Nesne Yönelimli Programlama (Object Oriented Programming, OOP) kavramını daha önce çok duymuş olmalısınız. Bir önceki bölümde fonksiyonlarla, Sub’larla, değişkenlerle tanıştık. Diyelim ki öğretmensiniz (ah, nerede o günler!) ve ASP programınızda her öğrencinin notunu veritabanına işleyen, veritabanından notları alarak geçeni-kalanı belirleyen veya öğrencilerle ilgili daha yapılması gereken bir çok işi yapan fonksiyonlarınız ve Sub’larınız var; bunların kullandığı bir çok değişkeniniz var: demek ki sizin ASP programınızda “öğrenci” diye bir nesneniz var. Ve siz bu nesneye yönelimli program yapmışsınız! Her “program nesnesi” iki unsura sahiptir: Özellik (Property, Attribute): Bir nesnenin özellikleri, onun değişkenleridir. “Öğrenci” nesnesinin “Öğrencinin Adı,” “Notları,” “Adresi” gibi değişkenleri, yani özellikleri vardır. Metod (Method): Bir nesnenin işlemesi, çalışması için, kısaca kendisinden bekleneni yerine getirebilmesi için çalışma yöntemlerine ihtiyacı vardır. Dolayısıyla bir ASP nesnesinin fonksiyonları, onun metodlarıdır. Fakat ASP’de nesneler sadece sizin öbekler halinde toplayacağınız fonksiyonlar ve değişkenlerden ibaret değildir. Bir kere, ASP programında kullandığınız Script dilinin getirdiği nesneler vardır. ASP sayfasını Javascript ile yazarsanız başka, VBScript ile yazarsanız başka dil nesnelerine sahip olursunuz; ancak her ikisinde de ortak olan “Scripting” nesneleri vardır. Bunlara birazdan ayrıntılı ele alacağız. Sonra Web Server’ın size hazır sunduğu nesneler vardır. Bunları daha sonraki bölümde göreceğiz. Ve tabiî, Browser’ın bir HTML sayfasının bölümlerini nesne sayarak oluşturduğu nesneler vardır. Bunlara da diğer nesneleri ele alırken sırası geldikçe değineceğiz. (Tabiî bir de ASP programınızı Javascript ile yazarsanız, VBScript’ten farklı olarak kendisi nesne-yönelimli bir dil olan Javascript’in oluşturmanıza imkan vereceği nesneler vardır. Fakat bu nesneler, bu kitapçığın kapsamı dışında kalıyor.) Nesneler nasıl oluşmuş olursa olsunlar, daima size bir değer verirler: Nesne.Özellik = Değer Bir nesnenin bir özelliğinin değeri, bizim için bir değişken değeri gibi önem taşır: If Nesne.Özellik > Değer Then ... Nesnelerin özelliklerinin değerlerini değişkenlere atayabiliriz; ancak bunu yaparken Nesne’nin bir metoduna (fonksiyonu) göndermede bulunmamız ve gerekiyorsa bu fonksiyona kullanması için veri göndermeliyiz (bir fonksiyona kullanması için gönderilen değere argüman/argument denir): Degisken = Nesne.Metod(argüman1, argüman2...) Daha sonra bu değişkeni istediğimiz yerde kullanırız. Bu kadar teoriden sonra bir örnek nesne oluşturursak, belki işin içinden daha kolay çıkabiliriz. Nesneler, diğer yararlarının yanı sıra, birbiri ile ilgili Sub’larımızı, fonksiyonlarımızı ve değişkenlerimizi birarada tutmamızı sağlar. Şimdi VBScript ile bir nesne oluşturabiliriz: <% Class Ogrenci Public Adi, Soyadi, No Function AdiSoyadi AdiSoyadi = Adi & “ “ & Soyadi End Function End Class %> Bir dakika! Nesne (object) adını verdik fakat Class (sınıf) oluşturduk! Bu grubun Object..End Object olması gerekmiyor mu? Belki haklısınız; ama bir “sınıf” ancak VBScript tarafından kullanılmaya başlanırsa Nesne olur. Dolayısıyla biz “sınıf” yazarız; VBScript onu Nesne haline getirir. Peki, nesneyi oluşturduk; şimdi bunu nasıl kullanacağız. Çok kolay; önce bu nesneden yeni bir olgu (instance) oluşturacağız; sonra.. Ama önce bunu nasıl yapacağımızı yazalım: <% Dim Ogr1 Set Ogr1 = New Ogrenci Ogr1.Adi = “Necip” Ogr1.Soyadi = “Fazıl” Ogr1.No = “181” Response.Write Ogr1.AdiSoyadi %> Her nesne, New (yeni) komutu ile yeni bir değişkene bütün özelliklerini verir. Burada Ogr1 değişkeni, yukarıda oluşturduğumuz Ogrenci nesnesinin bütün özelliklerini kazanmış oluyor. Ogrenci nesnesinin “.Adi”, “.Soyadi” ve “.No” özellikleri olması gerekir; nitekim Ogr1’e bu özelliklerini burada veriyoruz. Ogrenci nesnesinin bir de metodu (fonksiyonu) var; Ogr1 bunu da kazanabilir mi? Tabiî; hem kazanır, hem de bunu ziyaretçinin Browser penceresine yazdırabilir. Nesne kavramını kavramak zordur. Fakat yukarıdaki örnekte görüldüğü gibi, ASP sayfalarınızda nesne oluşturarak çalışmaya alıştığınız zaman bunun sağladığı kolaylıktan kolayca vazgeçmeyeceksiniz. ///////////////KUTU//////////////////// Hata (Err) Nesnesi Hangi dille olursa olsun program yazarken hata yapmak kaçınılmaz bir kuraldır. Dolayısıyla kullandığınız programlama dili hatalarınızı kolayca yakalamanıza imkan vermelidir. ASP programlarınızda yazım yanlışlığı, olmayan değişkene gönderme gibi Script hatası olmaması gerekir. Bu tür hatalar, program Web’e gönderilmeden mutlaka ayıklanmalıdır. Fakat programcı olarak öngöremeyeceğiniz, ve çoğu Web ziyaretçisinden veya ziyaretçinin bilgisayarından kaynaklanan hata durumları olabilir. VBScript, şu standart komutla beklenmedik hata durumlarında programın yoluna devam etmesini sağlayabilir: <% On Error Resume Next %> Bu komutla VBScript’e, hata halinde bir sonraki satırdan yoluna devam edecektir. Fakat oluşan hata, programın daha sonra vermesi beklenen sonucu vermesini önleyebilir. VBScript, Err (Hata) Nesnesi’nin bir çok özelliğinden özellikle hata sayısı (Number), tanımı (Description) ve kaynak (Source) özellikleri ile size hatanın ne olduğunu ve nereden kaynaklandığını söyleyebilir. Bu özellikleri kullanarak, programlarınızda, en azından geliştirme aşamasında, örneğin, If Err:Number = xx Then şeklinde bir ifade ile hatanın türüne göre programın kazasız yürümesini sağlayabilirsiniz. Burada xx yerine 108 ayrı hata numarası yapabilirsiniz. Hata numaraları, Microsoft’un VBScript sitesinden edinilebilir. ////////////////////////////////KUTU BİTTİ////////////// Nesneler hakkında aşağı yukarı bir fikir edindiğimize göre, şimdi kullanılmaya hazır Nesne’lerden başlayarak, VBScript kullanırken, ASP sayfalarımızda yararlanabileceğimiz Nesne’leri ele alabiliriz. Dosya Sistemi Nesnesi Dosya Sistemi Nesnesi (FileSystemObject), ASP programının, Web Sunucusunun sabit disk sisteminde, sürücüleri, klasörleri ve dosyaları yönetmekte kullanacağımız temel araçtır. Burada, ne denli güçlü bir araçtan söz ettiğimizi hemen görebilmek için şu kodu yazalım ve dosya_yaz.asp adıyla kaydedelim: <% Option Explicit %> <HTML> <HEAD> <TITLE>ASP ILE DOSYA YAZMA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <% Dim YaziFSO, yaz Set YaziFSO = CreateObject("Scripting.FileSystemObject") Set yaz = YaziFSO.CreateTextFile("c:\yazi_deneme.txt",True) yaz.WriteLine("Bu bir denemedir.") yaz.Close %> <H2><CENTER>Bu Web sayfası sabit diske yazı yazdırır!! <BR>Şimdi C: sürücüsünde yazi_deneme.txt adlı bir dosya olması gerekir! <BR>Lütfen bakar mısınız?</H2></CENTER> </BODY> </HTML> Kodumuzun Dim satırında iki değişken belirlediğimizi görüyorsunuz. Fakat bu iki değişkeni sistem nesnesi olan Scripting’in yeni bir olgusu olarak kullanacağımız için daha önce standart değişkenlere değer atadığımız gibi değil, fakat Set komutundan yararlanıyoruz, ve YaziFSO değişkeninde bir “Scripting.FileSystemObject” nesnesi oluşturulmasını sağlıyoruz. (ASP uzmanları arasında gelenek, nesne değeri tutan değişkenlere, ilgili nesnenin baş harflerini eklemektir. Böylece bir değişkenin adına bakarak, işlevini anlamak mümkün olur.) “yaz” değişkeni YaziFSO’da yeni bir olgusunu oluşturduğumuz FileSystemObject’in CreateTextFile (Düzyazı dosyası oluştur) metodunu kullanıyoruz; bu metod oluşturulacak dosyanın adını ve eğer bu dosya varsa üzerine yazılmasına izin veren True (doğru) veya buna izin vermeyen False (yanlış) kelimesini argüman olarak alır. “yaz” değişkeni şimdi kendisi bir metod kullanabilecek şekilde, FileSystemObject’in bir örneğidir; nitekim WriteLine metodu ile biraz önce oluşturulan dosyaya, argüman olarak verdiğimiz metni yazdırmaktadır. Bu kodu çalıştırdıktan sonra, sabit diskinize bakarsanız, düzyazı dosyasını göreceksiniz: <asp0009.tif> Bugüne kadar Web tekniği olarak Browser’da bir sayfayı görüntüleyebileceğimizi sanıyor idiysek, sistem nesneleri kullanarak çok daha farklı şeyler yapabileceğimizi görmüş olduk. Şimdi FileSystemObject’i daha yakından tanıyabiliriz. Bu nesne bize sabit diske erişme ve onun kaynaklarını kullanma imkanı verir. Bütün nesneler gibi kullanılabilmesi için önce bir değişkenin bünyesinde oluşturulması gerekir: <% Dim DosyaSistemi Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”) %> Dosya Sistemi Nesnesi’nin 20’den fazla metodu vardır; fakat bunlardan önemlileri şöyle sıralanabilir: CopyFile (dosya kopyala), MoveFile (Dosya taşı), CopyFolder (klasör kopyala), MoveFolder (klasör taşı), Create Folder (klasör oluştur), DeleteFile (dosya sil), DeleteFolder (klasör sil). Şimdi bunlardan birinin nasıl kullanılabileceğine bir örnek verelim: <% Dim DosyaSistemi Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”) DosyaSistemi.DeleteFile “c:\belgelerim\test.*” %> Bu program ile “Belgelerim” klasöründeki “test” isimli bütün dosyaları silmiş olursunuz. (Bu programı çalıştırmadan önce bir kaç kez düşünmeniz, sanırım iyi olur; çünkü ASP yoluyla sildiğiniz dosyalar, Geri Dönüşüm Kutusu’na gitmez!) Daha az zararlı bir diğer örnek ise şöyle olabilir: <% Dim DosyaSistemi Set DosyaSistemi = CreateObject(“Scripting.FileSystemObject”) DosyaSistemi.CopyFile “c:\belgelerim\*.*”, “c:\yedekler\” %> Bu program “Belgelerim” dizinindeki bütün dosyaları “Yedekler” dizinine kopyalar. FileSystemObject’in sadece bir özelliği (Property) vardır: Drives (sürücüler). Fakat bu özellik, bir değil bir çok elemandan oluşan bir dizi-değişken gibi Kolleksiyon (Collection) sayılır. Nede? Çünkü bir Web Server’da birden çok sürücü bulunur. Her sürücü, bu kolleksiyonun üyesidir (FileSystem.Drives) ve her birinin sürücü harfi (.DriveLetter), disk adı (.VolumeName), byte olarak boş alanı (.FreeSpace) özellikleri vardır. suruculer.asp adıyla kaydedeceğiniz şu program, denediğiniz sistemin disk-disket-CD-ROM durumunu size listeleyecektir. <% Option Explicit %> <HTML> <HEAD> <TITLE>ASP ILE SÜRÜCÜ KOLLEKSİYONU</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <% Dim DosyaSistemi, Surucu, Suruculer Set DosyaSistemi = CreateObject("Scripting.FileSystemObject") Set Suruculer = DosyaSistemi.Drives For Each Surucu In Suruculer %> <b>Sürücü:</b> <%=Surucu.DriveLetter%><br> <% If Surucu.IsReady = True Then%> <b>Disk Adı:</b> <%=Surucu.VolumeName%><br> <b>Boş alan:</b> <%=Surucu.FreeSpace%><br> <% Else %> <i>Sürücü hazır değil!</i><br> <% End If Next %> </BODY> </HTML> Burada özelliklerini ve metodlarını DosyaSistemi adlı değişkene atadığımız Dosya suistemi Nesnesi’nin sürücüler kolleksiyonunun dizi-değişken gibi olduğunu söylemiştik. For..Next akış kontrolü ile bu kolleksiyonun bütün üyelerinin sırayla sürücü harfi, ve hazırsa disk adı ve boş alanı bilgilerini alıyoruz. Drives kolleksiyonunun diğer özellikleri arasında toplam yüzey genişliği (TotalSize), sürücü türü (DriveType; 0=bilinmiyor; 1=çıkartılabilir; 2=sabit; 3=ağ; 4=CD-ROM; 5= RAM-Drive), ve dosya sistemi (FileSystem; FAT, NTFS, CDFS), kök dizin (RootFolder) vardır. Bu program bir PWS’da çalıştığında, şu sonucu alıyoruz: <asp0010.tif> VBScript açısından, her sürücüde klasörler (Folders) ve onların içinde alt-klasör (Subfolders) ve dosya (Files) kolleksiyonları bulunur. (Her klasörün içinde içinde bir alt-klasör nesnesi bulunduğu için ASP ile sonsuza kadar bütün klasörlere gönderme yapabilirsiniz. Klasör nesnesinin bazı özellikleri şunlardır: Adı (Name), oluşturulma (DateCreated), erişim (DateLastAccessed), değiştirme (DateLastModified) tarihleri, içindeki dosyalar ve alt-klasörlerdeki dosyalarla birlikte boyutu (Size), bulunduğu sürücü (Drive), içinde bulunduğu klasör (ParentFolder), alt-klasörler (SubFolders), kök dizin olup olmadığı (IsRoot). Klasör nesnesinin kopyala (Copy), sil (Delete) ve Taşı (Move) metodları vardır. Dosya (File) nesnesinin de ad, oluşturma, erişim, değiştirme, boyut, sürücü ve içinde bulunduğu sürücü özellikleri, ve kopyala, sil, taşı metodları vardır. PWS’ınızın bulunduğu sistemde, söz gelisi C: sürücüsünün kök dizinindeki bütün dosyaların listesini size veren bir kod şöyle yazılabilir (dosyalar.asp): <% Option Explicit %> <HTML> <HEAD> <TITLE>ASP ILE KLASOR - DOSYA KOLLEKSİYONU</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <% Dim DosyaSistemi, Surucu, Dosya, KokDizin, KokDosyalar, DosyaNesnesi Dim SurucuHarfi SurucuHarfi = "C:" Set DosyaSistemi = CreateObject("Scripting.FileSystemObject") Set Surucu = DosyaSistemi.GetDrive(SurucuHarfi) Set KokDizin = Surucu.RootFolder Set KokDosyalar = KokDizin.Files For Each DosyaNesnesi In KokDosyalar %> <%=DosyaNesnesi.Name%><br> <% Next %> </BODY> </HTML> Burada SurucuHarfi değişkenin değerini değistirerek, arzu ettiğiniz disk/disket veya CD-ROMa ulaşabilirsiniz. GetDrive metodu dikkatinizi çekmiş olmalı; bu metodla, VBScript, fiilen disk/disket sistemine erişir. Daha sonra yapacağımız ASP sayfalarında dosya sistemi nesnesinden ve disk sürücüleri kolleksiyonundan yararlanacağız. Metin (TextStream) Nesnesi Dosya sistemi nesnesi bize disk sistemine, klasörlere ve dosyalara erişme imkanı verir ama yeni dosyaları oluşturmak veya mevcutlara ek yapmak için yeterli özellik ve metoddan yoksundur. Bunu TextSream nesnesi sağlar. Bilgisayar işletim sistemlerinin anası, Unix’e aşina iseniz, klavyeden sabit diske kadar bir bilgisayara girdi akımı bulunduğunu, bunlardan birinin de metinler olduğunu hatırlayacaksınız (Aşina değilseniz, şimdi oldunuz!). Bir işletim sistemi, metin dosyalarını okurken, yazarken bir metin akışı olur; TextStream nesnesinin adı da bunu anlatıyor: Metin Akımı. Web Server ve dolayısıyla ASP açısından sabit diske bir metin yazarken, veya sabit diskten bir metin okurken, bir metin akışı nesnesi oluşur. Bu nesnenin özellikleri ve metodlarını kullanarak, örneğin ziyaretçilerin sitemize bırakacakları form bilgilerini Web Server’ın sabit diskine yazdırabiliriz. Veya mevcut metinleri okuyabilir ve bunların içeriğini ziyaretçimize göndereceğimiz HTML sayfanın etiketlerinin içeriği olarak kullanabiliriz. Metin dosyası okumak ve yazmak disk sistemini ilgilendiren bir eylem olduğu için yine Scripting nesnelerinden FileSystemObject nesnesinden yararlanacağız; fakat bu kez değişik metodlar kullanacağız. Metin Dosyası Oluşturma (CreateTextFile) Aslında biraz önce, ASP nesnelerinin neler yapabileceğine örnek olarak yazıp dosya_yaz.asp adıyla kaydettiğimiz program, bir metin dosyasını yazdırma işlemiydi. Oradaki kodlara yeniden göz atarsanız, CreateTextFile (metin dosyası oluştur) metodunu yardıma çağırıyor ve bu metoda argüman olarak yeni metin dosyasının yolunu ve adını veriyorduk. Bu metod TextStream nesnesinindir; ve otomatik olarak bu nesnenin diğer metodlarını kullanmamızı sağlar. kullandığımız metodlar ise WriteLine (satır yaz: bir String’i sonuna yeni satır karakteri koyarak dosyaya yazar) ve Close (kapat: açılan metin dosyasını kapatır). TextStream’in burada kullandığımız ikisinin dışında iki metodu daha vardır: Write (yaz): Bir String’i dosyaya yazdırır; satır sonuna yeni batır karakteri (Return kodu) koymaz. WriteBlankLines (boş satır yaz): Bir metin dosyasına argüman olarak vereceğiniz sayıda boş satır yazdırır. Varolan Metin Dosyasına Ek Yapma (OpenTextFile) Metin yazdırma işlerinde sık sık uygulayacağımız bir senaryo, mevcut bir metin dosyasına ek yapmak olacaktır. Örneğin bütün ziyaretçilerimizin sitemizdeki konuk defterine yazdıklarını, bir metin dosyasında toplamak isteyebiliriz. Bunu OpenTextFile metodu ile yapacağız. Bu metod, tahmin edeceğiniz gibi, açılacak dosyanın yolunu ve adını isteyecektir. Örneğin, dosya_yaz.asp’nin ilgili satırı şöyle olacak: Set yaz = YaziFSO.OpenTextFile("c:\yazi_deneme.txt",8,0) Burada dosya yolunu ve adını veren birinci argümana ek olarak iki yeni argüman görüyorsunuz: “8,0” şeklinde. Bunlardan birinicisi girdi/çıktı durumu (I/O Mode), ikincisi ise biçim (Format) ile ilgilidir. I/O Mode parametreleri şunlardır: 1: okumak için aç 8: eklemek için aç Açılacak dosyanın biçimini belirttiğimiz son argüman ise şu değerlerden birini alabilir: 0: ASCII dosyası olarak aç -1: Unicode dosyası olarak aç (Örneğin içinde Türkçe karakterler varsa) -2: Sistemin varsayılan dosya türü olarak aç Buna göre, bir dosyayı salt okumak için açmak amacıyla “1,0” argümanlarını kullanmamız gerekir. Diyelim ki bir dosyayı açtık. İçindekileri nasıl okuyabiliriz? Bir döngüyle. İşte örneği: <% Option Explicit %> <HTML> <HEAD> <TITLE>ASP ILE DOSYADAN METİN OKUMA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <% Dim DosyaSistemi, MetinDosyasi, Satir Set DosyaSistemi = CreateObject("Scripting.FileSystemObject") Set MetinDosyasi = DosyaSistemi.OpenTextFile("c:\yazi_deneme.txt",1, 0) Do Satir = MetinDosyasi.ReadLine %> <%=Satir%> <% Loop Until MetinDosyasi.AtEndOfStream MetinDosyasi.Close %> </BODY> </HTML> Burada kullandığımız metod dikkatinizi çekmiş olmalı: ReadLine. Bu, açılan metin dosyasından bir satır okutmamızı sağlar. İkinci ve son satırları okutmamızı ise Do..Loop kontrolü sağlıyor. Bu döngü ne kadar sürüyor? MetinDosyası nesnesi, AtEndOfStream (akımın sonunda) oluncaya kadar. Bu, dosyanın sonuna geldiğimiz anda ortaya çıkan bir durum; bu durumla karşılaştığı anda Do..Loop, yaptığı işi durdurup, bir sonraki komuta geçecektir. Burada kullandığımız ReadLine metoduna ek olarak yararlanabileceğimiz diğer metodlar ise şunlardır: Read (oku): Bir sayı örgümanı ile çalışır ve verdiğiniz sayı kadar karakter okur. ReadLine (satır oku): Bir satır okur ve String olarak verir. ReadAll (tümünü oku): Bütün satırları okur ve tek String olarak verir. Skip (atla): Bir sayı argümanı ile çalışır ve verdiğiniz sayı kadar karakteri atlar. SkipLine (satır atla): Bir sonraki satıra atlar. Bu metodlarla sağladığımız okuma işinin kontrolü amacıyla şu özellikleri de kullanabiliriz: AtEndOfStream (akımın sonunda): Okutulan dosyanın sonuna gelinmesi halinde True (doğru) olur. AtEndOfLine (satırın sonunda): Okutulan satırın sonuna gelinmesi halinde True (doğru) olur. Sunucu (Server) Nesneleri Buraya kadar ele aldığımız nesneler bir anlamda bizim sadece tek tek sayfalarda yararlanacağımız araçları sağlıyor. Oysa ASP’yi diğer CGI teknolojilerinden ayıran başlıca özelliklerden biri tek tek Web sayfalarını sanki bir bilgisayar programının çeşitli pencereleri, diyalog kutuları, mesaj kutuları, girdi kutuları gibi, birarada bir “uygulama programı” olarak bağlayabilmesidir. Başka bir deyişle bize, ziyaretçinin sitemize bağlandığı ve ana sayfamızı açtığı andan itibaren sitemizin bir program bütünlüğünde çalışmasını sağlayacak araçlar gerekir. Bunu ancak Web Server’ın yardımıyla yapabiliriz. ASP sayfalarımızda kullanacağımız ikinci grup nesne, Sunucu Nesneleri’dir. Bu grupta tabiî önce Sunucu’nun kendisi yer alır; sonra ziyaretçi ile kurduğumuz ilişki gelir. Ziyaretçi ile ilişkimizi iki yönlü trafiğe benzetebilirsiniz: ondan bize gelen talepler, bizim ona karşılıklarımız. Ziyaretçiden bize gelen trafiğe neden “Talep” diyoruz? Ziyaretçi, Browser’ının URL hanesine yazdığı her adresle, veya formlardaki bir düğmeyi veya sayfalarımızdaki herhangi bir köprüyü tıklamakla, Server’a “Bana şunu göndersene!” demiş olur. Bu taleptir. Ziyaretçi taleplerinin tümü Talep Nesnesi (Request Object) olarak bir arada ele alınabilir. Server’ın bu taleplere verdiği karşılıklar, yani ziyaretçinin Browser’ına gönderdiği sayfalar, resimler, sesler, videolar ise karşılıktır ve ASP açısından Karşılık Nesnesi’ni (Response Object) oluşturur. Bu bölümde bu nesneleri daha yakından tanıyacağız. Server Nesnesi 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ı ü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/” di
  23. Asp Kitabı Önsöz 2 Örnek Kodlar 4 ASP’ye Giriş 4 Kişisel Web Server Kuralım 5 PWS Kurulurken Hata Verirse 5 Bir Örnek Yapalım 6 Internet’te ASP 6 ODBC İşliyor Mu? 8 ASP’nin Unsurları 8 ASP’nin Dili 9 VBScript’e Giriş 9 Bir iki yazım kuralı 10 Değişkenler 10 Kötü programcılığı önlemek için! 11 Array Fonksiyonu 11 VBScript’de Program Kontrolü 13 Mantıksal Sınamalar 13 Dönen Değer 14 Döngüler 15 While...Wend 16 Tesadüfî Sayı 17 Tam Sayı Elde Etmek için: Int ve Round 18 Dizi değişkenler için döngü: For Each..Next 18 Sık Kullanacağımız Hazır Fonksiyonlar 20 Karakter-dizisi Düzenleme 20 Dizi-Değişken (Array) Fonksiyonu 21 ASP’nin Nesneleri 22 Hata (Err) Nesnesi 23 Dosya Sistemi Nesnesi 24 Dim DosyaSistemi 24 Metin (TextStream) Nesnesi 26 Varolan Metin Dosyasına Ek Yapma (OpenTextFile) 26 Sunucu (Server) Nesneleri 27 Server Nesnesi 27 Talep (Request) Nesnesi 28 Cookie (Çerez) 30 Sertifika Nesnesi 31 Karşılık (Response) Nesnesi 31 Cookie’ler 31 Uygulama (Application) ve Oturum (Session) Nesnesi 33 ActiveX Veri Erişim (ADO) Nesneleri 34 ODBC ve OLE-DB 34 Recordset (Kayıt dizisi) 35 Hızlı SQL Kursu: Select 35 ADO Sabit Değerleri 36 İşaretleme Alanları: INPUT-RADIO 39 İşaretleme Alanları: INPUT-CHECHBOX 40 ASP Kaynakları 41 Önsöz 42 Doğum Günü Hesabı 42 Çift Tırnak Gerekince! 43 HTML Dışında İçerik 44 Form etiketlerinden bilgi alma 47 Dinamik İçindekiler Sayfası 48 Form Değerlerini Yakalayalım 51 Konuk Defteri Uygulaması 53 Veri Yönlendirmeli Web Uygulaması 55 Veri için hazırlık 56 İnşaata Başlarken 56 Sıra Web Programı’nda 57 ASP’de Güvenlik 64 Zararlı Kod Temizleme 65 ASP Hatası Arama 68 İleri ASP Konuları 68 Önsöz “Merhaba: Ben bilgisayar hastası—Kroninukus computerium—üniversiteyi yeni bitirmiş bir gencim. Byte dergisiyle verilen "Internet Tasarım Rehberi" kitapçığını okuyarak html'i öğrenmeye çalışıyorum ve bu konuda çok istekliyim. Bundan iki ay kadar önce bir shareware program kullanarak bir site hazırladım. Fakat bu programı kullanmak için hiç bir html etiketini öğrenmek gerekmiyordu. Oysa ben kendi çabalarımla bu işi halletmeyi ve hatta daha da ileri götürmeyi düşünüyorum. Sizden ricam bana nereye gitmem gerektiğini bildirmeniz, ve bunun için gerekli bilgi ve belgeleri sağlamanız, bizlere yardım etmenizdir. Gayretleriniz için çok teşekkür ediyor, çalışmalarınızda başarılar diliyorum.” Merhaba: çok değil, bir buçuk yıl önce yazdığınız bu mektuba, o günden beri sürekli karşılık verdim. Önce Byte, ardından PC World ve şimdi de PC Life dergisinin eki kitapçıklarla, bu arzunuzu yerine getirdik. Size bir harita sunduk; bu haritaya göre ilerlediniz. HTML’den sonra site yeri edinme yollarıyla işe başladık. Ardından HTML’in durağan kalıbını yırtmak için JavaScript öğrendik. Sonra, sitemizi ziyaret edenlerle etkileşmeli sayfalar yapmak, onlardan Form yoluyla bilgiler almak, konuk defterleri yapmak için CGI imkanlarını kullanmak amacıyla Perl’e sıra geldi. Şimdi yolun sonundayız. ASP tekniği ile sitelerimizi veritabanına dayalı hale getireceğiz; Server nesnelerini kullanarak gerçek dinamizme kavuşturacağız. Bunu yaparken Visual Basic Scripting Edition (veya kısa adıyla VBScript) ile tanışacağız. Gerçi bu ve gelecek ay sunacağımız ASP Uygulamaları kitapçığıyla, birlikte yürümek üzere çizdiğimiz eğitim döneminin sonuna gelmiş oluyoruz; ama sizin önünüzde uzun bir yol var. Bu yol, Internet denen yeni iletişim aracını kullanarak, toplumumuza yeni bir soluk kazandırma yoludur. Bu yolda yalnız ilerleyeceksiniz. Bilgisayarınızın ekranının aydınlattığı yolda, klavye ile baş başasınız. Kalbiniz ve onu dolduran Bilişim Teknolojisi aşkı size rehber olacak. Daha öğreneceğiniz çok şey var hayatta. Hergün yeni teknolojilerin çıktığı bir alan seçtiğinizin farkındasınız. Sakın kafanız karışmasın: Siz ustasınız; teknoloji, adı üstünde, araçtan ibaret. Her gün yenisi ile karşılaştığınız teknolojiler sizi korkutmamalı. Sırasıyla hepsini başaracaksınız. Öğrendikçe, çok değil bir ay önce sizi korkutan bir dilin, bir tekniğin ne kadar basit olduğunu göreceksiniz. Asla “Ben bunların hepsinin altından nasıl kalkarım?” demeyeceksiniz. Sırasıyla herşeyi öğrenebilirsiniz. Daima şunu tekrar edin: “Öğrenen nasıl öğrendi ise, ben de öğrenirim!” Bu yolda aklınız ve kalbiniz size rehber olacaktır. Yeter ki onlara kulak verin. ASP veya Active Server Pages (Etkin Sunucu Sayfaları) tekniği, sayfalarınızı canlandıracak bir tekniktir. Bu teknik, bir kaç sayfa sonra göreceksiniz ki, sil baştan bir bilgisayar programlama dili öğrenmeye gerek olmadan uygulanabilir. Bu kitapçığı yazarken sizinle yolun başından beri beraber olduğumuzu, yani HTML bildiğinizi varsayıyorum. Ayrıca Web’in nasıl çalıştığını, Server (Sunucu) ve Client (İstemci) ilişkisinin nasıl yürüdüğünü de biliyor olmalısınız. ASP teknolojisinden yararlanmak istediğinizde Web sitesine evsahipliği yapan bilgisayarda çalışmakta olan Web Server’ın ASP teknolojisini tanıması ve sitenize bu hizmeti vermesi gerekir. ASP, bir zamanlar sadece Microsoft’un NT ve daha sonra Windows 2000 işletim sistemine dayanan MS-IIS (Internet Information Server) programında işleyebilirdi. Fakat şimdi artık NT-tabanlı diğer Web Server programları gibi Unix-tabanlı Web Server programları da ASP anlar ve işletir hale gelmiş bulunuyor. Fakat ASP sayfalarınızı gerçek Internet ortamında ziyaretçilerinizin hizmetine sunmadan önce, kendi bilgisayarınızda sınamanız gerekir. Bunun için bilgisayarınızın işletim sistemi Windows 95/98 ise Kişisel Web Server (PWS), NT 4.0 ise IIS kurulmuş olmalıdır. Sisteminiz Windows 2000 ise, IIS 5.0 kendiliğinden kurulmuş demektir. Şimdi biraz ASP’den söz edelim. Bu kısaltmayı, “a..se..pe” veya “ey-es-pi” diye harf-harf okuyanlar olduğu gibi, “eyspi” diye bir kelime halinde okuyanlar da vardır; ve bana sorarsanız, hepsi de doğrudur. Internet programcıları, bütün görevi bir sabit diskteki HTML dosyalarını alıp, ziyaretçinin Browser’ına göndermekten ibaret olan Web Server programını yeniden tasarlamaya başladıklarında, Server’ın sadece durağan sayfaları göndermesi yerine, ziyaretçiden de veri kabul etmesinin uygun olacağını düşündüler. Bu amaçla Internet istemcisi ile sunucusunun buluştuğu noktada, yani Common Gateway Interface (Ortak Geçit Arayüzü) katmanında Web Server programının, istemci programdan (browser) kendisine bilgi ve komutlar gönderilmesini sağladılar. Örneğin bir Form’daki bilgilerin alınıp, bir dosyaya kaydedilmesi için vereceğimiz komut, sitemizin bulunduğu bilgisayarın işletim sisteminde CGI katmanı tarafından icra ettirilir. Bu manada CGI, Web Server’ın Internet ziyaretçisinin Browser’ın gelen bilgi ve komutları işlediği veya kendi işletim sistemine aktardığı noktadır. Bu gelişmenin sonucu olarak ortaya CGI programı dediğimiz şeyler çıktı. Perl, C/C++, Delphi, Visual Basic ile yazılan bu programlar Web Server tarafından çalıştırılır, ve vereceği komutlar işletim sistemine iletilir. CGI programları ile çok şey yapılabilir; fakat Web Server’a aynı anda birden fazla kişi erişir ve aynı CGI programını çalıştırırsa, (yani aynı anda aynı formun “Gönder” düğmesini tıklarlarsa), CGI programının birden fazla “kopyası” çalışmaya başlar. Aynı anda aynı forma ulaşan kişi sayısı 4-5 ise bu belki sorun oluşturmaz; ama bu sayı arttıkça Web Server da adeta yerlerde sürünmeye başlar! Özetle CGI programları Web Server’ı yavaşlatır. Microsoft programcıları biraz geriden gelmekle birlikte Server işine el attıklarında, istemci ile sunucunun etkileşmesini, bütün sistemi yavaşlatan “haricî” programlar yerine, işletim sisteminin bir işlevi haline getirebileceklerini düşündüler. Bunun yolu ise işletim sisteminin Uygulama Programı Arayüzü (API, Application Programming Interface) denen unsurlarını kullanmaktı. Nitekim Microsoft, oturup bir dizi Internet Server API (veya kısaca ISAPI) tasarladı. ISAPI, tıpkı CGI gibi, Web Server programının bulunduğu bilgisayardaki diğer programlarla alışverişini sağlar. Ne var ki ISAPI’den yararlanan programlar üreterek bunları Web Server’ın emrine vermek oldukça pahalı bir yol. Başka bir deyişle, bir formda Gönder düğmesinin çalışabilmesi için sözgelimi Excel ayarında bir program yazdırtmak pek akıl kârı olmasa gerek. Bu noktada çeşitli firmalar ISAPI benzeri “yorumlayıcılar” geliştirerek, düz yazı bir Script yazmakla ve bu Script’in içindeki komutları Server programına icra ettirmekle, Web tasarımcısının hayatını çok kolaylaştırabileceklerini gördüler. Microsoft’un bu noktadaki çözümü ASP oldu. Yani bir bakıma “Server’a Aktif Sayfalar sunma” teknolojisi! NetObjects firması kendi Server Extension’larını geliştirdi. Linux-Unix dünyasında bir başka grup PHP dilinden yararlanarak PHP Sayfaları sistemini geliştirdi. Bunlardan sadece MS’un ASP teknolojisi birden fazla dil ile Script kabul edebilen teknoloji olarak, diğerlerinden ayrıldı. Bu noktaya birazdan geleceğiz; ama önce “ASP nasıl çalışır?” sorusunun üzerinde duralım. Ama önce biraz başa dönelim: Siz Web ziyaretçisi olarak Browser’ınızın URL hanesine bir HTML sayfasının Internet yolunu ve adını yazıp (örneğin, http://www.pclife.com.tr/index.htm) Git düğmesini tıkladığınızda veya klavyede Enter/Return tuşuna bastığınız zaman ne olur? Web Server, Internet’in bulutları arasından geçip kendisine gelen bu istem üzerine, index.htm’i bulur ve yine aynı bulutların arasından sizin blgisayarınıza kadar gönderir. ASP teknoloji ile üreteceğiniz sayfanın adının uzatması ise .asp şeklinde olur. Siz bu kez URL hanesine bu dosyanın adını (örneğin http://www.pclife.com.tr/index.asp) yazarsınız. Bu durumda Web Server, bu sayfayı alıp, doğruca size göndermez: önce içindeki kodları icra eder. Sonra bu kodları ayıklar ve geriye saf ve temiz HTML kalır. Ve bu sayfa, bizim Browser’ımıza gönderilir. Yukarıdaki son üç cümleyi lütfen yeniden okur musunuz? Nelere dikkat ettiniz: 1. ASP sayfasının içinde kod vardır. 2. ASP sayfasının kodları Web Server tarafından icra edilir. 3. ASP sayfası, Browser’a salt HTML olarak gelir. Şimdi burada ASP ile Javascript’in farkını görebiliyor musunuz? Javascript, HTML’in içine konuluyor; ama Server’da değil, Browser’da çalışıyor. Peki CGI/Perl programı ile ASP’nin farkını görebiliyor musunuz? HTML sayfasını Perl ile yazdığınız program üretiyor (print “<HTML>\n”; kodunu hatırlıyor musunuz?); oysa ASP’de ziyaretçiye gidecek HTML’i Server ve tasarımcı birlikte üretiyorsunuz. Bu bakımdan, Javascript “istemci-tarafında” çalışırken, ASP, CGI programları gibi, “sunucu-tarafında” çalışır. Bunun sonucu ise ASP ile yazacağınız sayfaların, ziyaretçinin bilgisayarında kurulu Browser programı ne olursa olsun (Netscape Navigator, Opera, Amaya, Internet Explorer), mutlaka görüntülenecek olmasıdır. ASP sayfalarınıza koyacağınız VBScript kodları Server’da icra edileceği için, ziyaretçinin Browser’ının örneğin VBScript’i tanımayan Netscape olması, sizi hiç etkilemeyecek. Bununla birlikte ASP yoluyla üreteceğiniz sayfalarda yer alacak dinamik HTML kodlarının, her Browser’da mutlaka arzu ettiğiniz gibi yorumlanmayacağını unutmamalısınız. Peki, ASP’nin içinde HTML ile kod yan yanadır, dedik. Nedir bu kodlar? Hangi dille yazılır? ASP yoluyla Web Server’a vereceğiniz komutları içeren bu kodlar, tabir yerinde ise, “arzu ettiğiniz bir Script dili ile” yazılabilir. Bu VBScript olabilir; Javascript veya Jscript olabilir; hatta, MS’un yeni teknolojisi olan Windows Scripting Host ile uyumlu olmak koşuluyla, kendi Script dilinizi icad edip, bunu Web Server’a öğretecek plug-in (ek program) geliştirebilirsiniz. İlk dönemlerinde ASP kodlarını VBScript ile yazmak adeta şarttı. Giderek daha çok kaynakta ASP’nin Javascript ile yazıldığını görüyorum. Fakat BT gibi sürekli gelişen ve yenilenen bir alanda, Web tasarımcısın yeni bir dille tanışmasına imkan sağlamak için bu kitapçıkta kodlarımızı VBScript ile yazacağız; dolayısıyla kitapçığın büyükçe bir bölümü VBScript’e ayrılacak. Şimdi kolları sıvayıp; işe başlıyoruz. Bir dizinin sonu olan bu kitapçığı, Kroninukus computerium’a adıyorum. Sadece BT alanında değil, tüm yaşamında yolun açık ve aydınlık olsun. Bu eğitime birlikte başladığımızda “bilgisayar hastası” idin; eğer şimdi “usta bir bilgisayar hastası” olmanı sağlayabildimse, ben görevimi yerine getirmiş sayılırım. Bundan sonra sıra sende. Şimdi yardım edecek olan sensin. Bu yardımı kimseden esirgeme. Kim olduğunu ve işlevini daima hatırla. Kalbinde duyduğun çağrıya her zaman kulak ver. Örnek Kodlar İki kitapçıktan oluşan ASP rehberinin bütün örnek kodları ve veritabanı dosyaları, http://www.pclife.com.tr/......... adresinden edinilebilir. Ancak ASP öğrenirken örnek kodları kendiniz yazmalısınız. Kodlamanın incelikleri ancak kodları siz yazarsanız öğrenilebilir. Bu örneklerden sadece kendi yazdığınız kodlar hata verdiği ve hatayı bulmaktan güçlük çektiğiniz zaman, karşılaştırma amacıyla yararlanmalısınız. Teşekkürler Bu kitapçıktaki kodların değişik ortamlarda sınanması için için bana yardımcı olan dilini ve yazımını denetleyen dostlarım Mustafa Durcan, Osman Nuri Hömek ve Armağan Ergon’a teşekkür ederim. Varolan hatalar elbette bana aittir. Sevgili arkadaşım Mustafa Durcan’ın bütün dizinin gelişimine katkısını daima şükranla hatırlayacağım. ASP’ye Giriş Bir HTML sayfayı sınamak için sadece Browser programına ihtiyacınız var; bir HTML belgesini iki kere tıkladığınızda varsayılan Browser açılacak ve bu sayfayı yorumlayarak, görüntüleyecektir. Fakat uzatması .asp olan bir dosyayı iki kere tıkladığınızda ya Windows size bu dosyayı hangi programla açmak istediğinizi soracak; ya da MS Visual Studio veya Adobe Photoshop çalışacaktır. Bilgisayarınızda MS Visual Studio programı kurulu ise, onun açılması normal: çünkü MS’un ASP dahil hemen hemen bütün Web tasarım araçları Visual Studio’nun üyesi. Photoshop ise renk paletlerini belirlemek üzere kullandığı dosyalara .asp uzatmasını veriyor. Bilgisayarınızda MS Visual Studio kurulu değilse, fakat Photoshop varsa, ASP dosyalarınızın simgesi Photoshop’a ait olacaktır. MS Visual Studio’dan yararlanmıyorsanız, ASP dosyalarınızı, (herhangi bir klasörün Görünüm menüsünden Klasör Seçenekleri maddesini seçerek ve üçüncü sekme olan Dosya Türlerini tıkladıktan sonra ASP satırını işaretleyerek ve Düzenle düğmesine basarak) Not Defteri ile ilişkilendirmek en doğru yoldur. Bu, bu kitapçıktaki örnek ASP dosyalarını oluşturmak, düzenlemek, değiştirmek için kullanacağımız başlıca programın da herhangi bir düzyazı programı olduğu anlamına gelir. ASP üretim işini herhangi bir ortamda yapabilirsiniz. Bunun için bilgisayarınızda mutlaka Windows kurulu olması gerekmez. Fakat ASP dosyalarının çalışıp çalışmadığını sınamak için sayfalarınızı gerçek Web Server’a göndermeden önce kendi bilgisayarınızda çalıştırmanız gerekir. Bunu Kişisel Web Server (PWS) veya IIS ile yapacağız. Kişisel Web Server Kuralım Bilgisayarınız Windows 95, 98, NT4 WorkStation veya NT4 Server ile çalışıyorsa, sisteminize bir Web Server programını siz kurmak zorundasınız. Windows 2000 Professional veya Windows 2000 Server ise Kişisel Web Server programını kendiliğinden kurar. Windows 98’e bir kişisel Web Server kurmaya geçmeden önce bilgisayarımıza bir kimlik vermemiz gerekir: Bilgisayarım/Denetim Masası/Ağ’ı tıklayarak açacağınız diyalog kutusunda ikinci sekme olan Tanımlama’yı açın ve “Bilgisayar adı” kutusuna istediğiniz adı yazın. Bilgisayarın ağ ortamında olması gerekmez. Windows 98’e Kişisel Web Server kurmak için iki yol izleyebilirsiniz. Windows 98 CD-ROM’unda Add-ons klasöründeki PWS dizininde Kur.exe’yi tıklayın veya Windows NT Option Pack CD-ROM’unda Default.htm’i açın. Bilgisayarınızın Windows 98 ile çalıştığını algılayacak olan program size Personal (kişisel) Web Server (PWS) kurmayı önerecektir. Kişisel Web Server’ı kurarken her iki durumda da ikinci diyalog kutusunda Minimum/En az veya Typical/Tipik seçeneğini değil, Custom/Özel’i seçin ve açılacak yeni diyalog kutusunda Microsoft Data Access Components (MS Veri Erişim Bileşenleri) satırına işaret koyarak, Alt Bileşenleri Göster düğmesini tıklayın. Açılacak seçme kutusunda ise ADO Documentation satırına işaret koyun. Bu belgelerden daha sonra veri-yönlendirmeli Web Uygulaması yaparken yararlanacağız. <asp0001.tif> Kişisel Web Server kurulduktan sonra bilgisayarı yeniden başlatmak gerekir. //////////////////////KUTU////////////////// PWS Kurulurken Hata Verirse Windows 98’e PWS kurarken, programın Microsoft Transaction Server bölümüne ilişkin sistem kayıtları yapılırken, iki hata mesajı ile karşılaşabilirsiniz (0x80004005 ve 0xfee662). Bu, orijinal Windows 98 CD-ROM’undaki PWS Kur programının, Windows Registry dosyasının büyük olması halinde hata vermesinden kaynaklanıyor. Böyle bir durumla karşılaşırsanız, Bilgisayarım/Denetim Masası/Program Ekle Kaldır aracılığıyla, Personel Web Server’ı kaldırın. Bilgisayar kapanıp açıldıktan sonra, Windows 98 CD-ROM’unda Add-ons/PWS dizinindeki bütün dosyaları, sabit diskinizde Temp dizinine kopyalayın. Sonra http://support.microsoft.com/support/kb/articles/q246/0/81.asp adresinde “Download Mstsetup.dll” satırını tıklayın. Mssetup.exe adlı bir dosya bilgisayarınıza indirilince; bu dosyayı iki kere tıklayın ve dosyanın genişletileceği yer olarak C:\Temp’i gösterin; program Mstsetup.dll dosyasının değiştirilmesini isteyip istemediğinizi sorduğu zaman “Tamam”ı tıklayın. Şimdi, C:\Temp’deki Kur.exe (Windows CD-ROM’unuz İngilizce ise Setup.exe) programını iki kere tıklayın. PWS şimdi hatasız kurulacaktır. ///////////////////KUTU BİTTİ////////////////////////////// Windows NT4.0 Workstation veya Server’a IIS4.0 kurmak için Option Pack CD-ROM’undaki default.htm’i çalıştırmanız ve açılacak Browser penceresinde IIS’i kurma seçeneğini tıklamanız yeter. Burada da ADO Documentation’ı sabit diskinize aktarabilmek için gerekli seçenekği işaretleyin. Windows 98’e Kişisel Web Server kurulduğunda Masaüstü’nde Yayımla (Publish) adlı bir simge belirecektir. NT sistemlerinde ise Başlat menüsünde Programlar bölümüne IIS Manager satırı eklenir. Bu yollardan biriyle PWS veya IIS’i çalıştırın. Kişisel Web Server’da Personel Web Server Manager (Yönetici) kutusu açıldığında soldaki araç çubuğunda Yönetici’nin çeşitli bölümlerine gitmeniz için gereken gezinme simgelerini göreceksiniz. Şimdi, açılan ana pencerede iki unsura dikkat edin: <asp002.tif> 1. Kişisel Web Server’ınızın adı. Bilgisayarınızın adı buraya Server adı olarak yazılmış olmalı. Biraz sonra, Internet’e koymadan önce sınayacağımız ASP sayfalarını çağırırken, Browser’ın adres kutusuna burada gördüğümüz adı yazacağız. 2. Kişisel Web Server’ın bilgisayarımızda sabit diskteki gerçek adresi. Bu, sizin Kişisel Web Server’ınızın kök (root) dizinidir. Bu genellikle C:\inetpub\wwwroot klasörüdür. Kişisel Web sitesi yaparsanız, sitenin gerektirdiği bütün dizinleriniz ve dosyalarınız burada gördüğünüz dizinin içinde olmalıdır. Yapacağımız ASP dosyalarını işte bu dizinin içine koyacağız. Bunları bir kenara not ettikten sonra, soldaki araç çubuğunda Gelişmiş simgesini tıklayın; ortadaki pencerede sanal dizinlerinizi görüyorsunuz. Bunlardan Home’u seçin ve sağdaki “Özellikleri düzenle” düğmesini tıklayın. <asp003.tif> Ana dizinin okuma, yürütme ve makro erişim haklarının işaretli olmasına dikkat edin. İlerde kendinize Kişisel Web Server’ınızın kök dizininde yeni bir dizin oluşturursanız (örneğin “resimler” gibi) ve içine sitenizle ilgili dosyalar koyarsanız, Gelişmiş penceresinde Ekle düğmesini tıklayarak bu gerçek dizini de sitenin sanal dizinlerinden biri haline getirmeniz gerekir. Gerçek dizinin adı XYZ bile olsa, sanal dizin haline getirirken istediğiniz sanal adı verebilirsiniz. Ama unutmayın, Browser’ın adres hanesine gerçek dizin adını değil sanal dizin adını yazmanız gerekir. Bu işlemleri IIS’te değişik araçlar ve diyalog kutularıyla, fakat temel ilkeler itibariyle aynı şekilde yapabilirsiniz. NT4 sistemlerine IIS’i kurmadan önce, Service Pack 3’ü uygulayın; Internet Explorer 5’i kurun. Elinizde varsa Service Pack 4, 5 veya 6’yı en son uygulayın. Bu noktada, ASP sayfalarınızı sınayacağınız bilgisayarda Microsoft Internet Explorer programının kurulu bulunmasının şart olmadığını hatırlatalım. ASP sayfalarınızı Netscape ile de sınayabilirsiniz. Bir Örnek Yapalım Şimdi ilk ASP sayfamızı yapalım ve bununla kişisel Web Server programının çalışıp çalışmadığını sınayalım. Buraya kadar anlamış olduğunuz gibi ASP sayfası da HTML gibi düz yazı dosyasıdır; dolayısıyla beğendiğiniz bir düz yazı programı ile ASP yazabilirsiniz. Şimdi açın en beğendiğiniz düz yazı programını ve başlayın yazmaya. Eğer kelime-işlemci kolayınıza gidiyorsa, dosyayı ASCII veya ANSI biçiminde kaydetmeyi unutmayın (10’ncu satırın sonunda nokta olduğuna dikkat edin): <HTML> <HEAD> <TITLE>ASP ILE ILK SAYFA</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <H1><CENTER>Merhaba Dünya!</H1> <H2>Bugün: <% Response.Write(Date) %>. </CENTER </H2> </BODY> </HTML> Bu dosyayı merhaba.asp adıyla kaydedin ve kendi bilgisayarınızda kişisel Web Server’da veya ISS’te sınayacaksanız, bu programları çalıştırın. Browser’ınızın URL hanesine, kişisel Server’ınızın adıyla birlikte dosyanın adını yazın; ve ilk ASP programınız dünyaya Merhaba desin. <asp0004.tif> ////////KUTU/////////////////// Internet’te ASP ASP teknolojisi ile oluşturduğunuz sayfaları, yani içinde ASP teknolojisinin gerektirdiği kodlar bulunan HTML dosyalarını, .asp uzatmasıyla kaydederiz. Bu dosyalar talep edildiğinde, Web Server programı, eğer ASP teknolojisini tanıyorsa, talep edilenin ASP sayfası olduğunu dosya adının uzatmasından anlar; ve bu sayfayı ziyaretçiye yollamadan önce kendisi işleme tabi tutar. ASP sayfamızdaki kodlar büyük bir ihtimalle bir takım dinamik işler yapacak, örneğin hesaplamalar, araştırmalar, veri tabanından veri çekme, dosya sisteminden dosya isteme gibi görevlerini yerine getirecek, ve ortaya çıkacak olan HTML dosyasını ziyaretçiye gönderecektir. Diyelim ki bu kitapçıktaki örnekleri yaptınız ve ücretsiz Site yeri edinmiş olduğunuz Hosting firmasının bilgisayarındaki sitenize yerleştirdiniz. Sonra Browser’ınızın URL hanesine bu ASP dosyasının adını yazdınız ve sayfayı talep ettiniz. Karşınıza, ya ASP sayfasının içindeki kodları görüntüleyen veya sadece sayfanın HTML unsurlarına yer veren bir sayfa geldi! Bu Server’ınızın ASP anlamadığını gösterir. ASP sayfalarınızı ASP-uyumlu Web sunucularında çalıştırabilirsiniz. Sitenizde ASP sayfaları bulunacaksa ve ücretli ev sahibi firmalardan site alanı edinecekseniz, sunucunun ASP-uyumlu olmasına dikkat edin. //////////////KUTU BITTI//////// Ş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. <asp0005.tif> ASP.DLL, kendisine bir .asp dosyasının geldiğini görünce, hemen ASP’lerin Anayasası olan global.asp’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. Biliyorsunuz, mevcut sürümleri itibariyle Browser programları içinde Netscape VBScript dilini anlamaz. ASP sayfalarımızda istediğimiz Script dilini kullanabiliriz; VBScript de kullanabiliriz. Netscape’in VBScript anlamamasıyla, ASP sayfalarımızda VBScript kullanmamızın bir ilgisi yoktur; çünkü ASP sayfasının ortaya çıkartacağı HTML kodunda ASP dolasıyla VBScript bulunmayacaktır; dolayısıyla ASP sayfalarınız, Netscape tarafından da anlaşılıp, görüntülenebilecektir. Tabiî ortaya çıkacak HTML sayfasının Netscape tarafından arzu ettiğiniz gibi görüntülenebilmesi için Netscape’in anlayabildiği dinamik HTML unsurlarına yer verme zorunluğunuz hâlâ devam ediyor. ASP tekniğinin nasıl çalıştığını anladığımıza göre şimdi biraz terminoloji serpiştirelim ki, Webmaster meslektaşlarınızla biraraya geldiğinizde, gerçekten ASP ile mesela Javascript arasındaki farkı bildiğiniz belli olsun. ASP bir Server-Side Script teknolojisidir. Internet’te istemci ile sunucu arasındaki çizginin sunucu tarafına Server-Side (Sunucu Tarafı), istemci tarafına da Client-Side (evet, doğru tahmin ettiniz: İstemci Tarafı) denir. Server-Side’da çalışan Script programları da “Server-Side Script” (Sunucu Tarafı Script’i) adını alır. Dolayısıyla şöyle bir sayfa yaparsanız (merhaba.htm), bu sayfada Client-Side Script teknolojisi kullanmış olursunuz: <HTML> <HEAD> <TITLE>JavaScript ile Tarih</TITLE> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY BGCOLOR=WHITE> <H1>Merhaba Dünya</H1> <H2>Bugün:</H2> <H3> <script LANGUAGE=JAVASCRIPT> <!-- tarih = new Date(); document.write(tarih); //--> </SCRIPT> .</H3> </BODY> </HTML> HTML sayfanıza <script>..</SCRIPT> etiketleri arasına yerleştireceğiniz bu kodun çalışması için Server’ın hiçbir şey yapması gerekmez; kodu Browser çalıştıracak ve günün tarihini size (Türkçeleştirmediğiniz için İngilizce olarak) bildirecektir. Şimdi, bir de Server tarafında çalışan Script içeren sayfaya örnek verelim (merhaba2.asp). Bu kodu yazarken kapanan Script etiketinden sonra nokta olduğuna dikkat edin: <HTML> <HEAD> <TITLE>VBScript ile Tarih</TITLE> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY BGCOLOR=WHITE> <H1>Merhaba Dünya</H1> <H2>Bugün:</H2> <H3> <script LANGUAGE=VBScript RUNAT=SERVER> Response.write(Date) </SCRIPT>. </H3> </BODY> </HTML> Bu sayfada kullandığınız Script’i VBScript ile yazdığınızı farkettiniz. Yani? Bu HTML sayfası, Netscape’de görüntülenemez! Hayıır. Görüntülenir, çünkü Script’i Netscape değil, Server çalıştıracak. Bunu <script> etiketinin içindeki “RUNAT” özelliği ile belirtiyoruz. (“Run,” çalıştır; “at” ise “içinde, üzerinde” anlamına gelir. “RUNAT” “...de çalıştır” gibi bir anlama sahiptir.) Burada RUNAT’in karşısına yazdığımız SERVER ifadesi ile, Script’in Browser’a gönderilmeden önce Server’da çalıştırılmasını sağlıyoruz; Server’a “Bu Script’i Server’da Çalıştır!” demiş oluyoruz. <asp0006.tif> Netscape bu sayfayı görüntüleyecektir; ama galiba bir terslik var. merhaba.asp ile merhaba2.asp’nin ekran görüntülerini ve kodlarını karşılaştırırsanız, birinde noktanın olması gereken yerde olduğu halde diğerinde noktanın yanlış yerde olduğunu görüyoruz. Oysa iki kodu da karşılaştırırsanız, ikisinde de nokta işareti, kodun bittiği yerde yer alıyor. Yukarıda ASP’nin icrasında HTML sayfa Server’a verilmeden önce ASP.DLL tarafından içindeki ASP kodlarının icra edildiğini söylemiştik. Nitekim, burada gördüğünüz gibi, ASP.DLL, HTML sayfayı içinde Server’ın çalıştırması gereken bölümle birlikte Server’a gönderdi; Server kendisine gelen dosyada kendi icra etmesi gereken (RUNAT=SERVER özelliği verilmiş olan Script’i) bölümü icra etti ve sonucu Browser’a aktardı. Yani, Server’ın çalıştırdığı Script’in sonucu sayfaya ASP’den sonra eklendi. Dolayısıyla, nokta, yanlış yerde kaldı. Bundan çıkartacağımız sonuç şu olacak: ASP sayfalarımıza, Browser, Server ve ASP.DLL tarafından çalıştırılacak kodları yerleştirirken, sırasına dikkat edeceğiz ve hangi sırada icra edilmelerini istiyorsak, o sırada koyacağız. Server ile ASP.DLL’in ilişkisi sadece Script dilini çalıştırmaktan ibaret değildir. ASP, istemciden gelen HTTP İstemi (Request) ve HTTP’ye giden Karşılık (Response) unsurlarından tutun, ActiveX Data Objects (ADO, AcvtiveX Veri Nesneleri) aracılığıyla, işletim sisteminin sunacağı veritabanına erişim imkanını ve işletim sisteminin sunduğu dosya yönetimine kadar bir çok imkanı kullanır. Bu “imkanlar” ASP’nin eline geçtiği anda “nesne” (Object) sayılırlar Şimdi bu nesnelere biraz yakından bakabiliriz. ////////////////////////////KUTU////////////////// ODBC İşliyor Mu? Kolları sıvayıp, ASP’ye kodu yazmaya başlamadan önce yapmamız gereken bir iş daha var: ASP sayfaları geliştirme ortamımızda, ODBC (Open Database Connectivity, Açık Veritabanı Bağlantısı) olması gerekir. Windows 98, 95 (OSR2) veya NT4.0 işletim sisteminizde Denetim Masası’nda ODBC, ODBC32 veya “ODBC Veri Kaynakları (32 Bit)” adlı bir simge görüyor olmalısınız. Bunu açın, Sistem DSN sekmesini ve açılan pencerede göreceğiniz Ekle düğmesini tıklayın. Buradaki Access, dBase, Excel, FoxPro, Paradox sürücüleri 4.00.3711.08 veya daha büyük mü? Değilse, Microsoft’un sitesinden (http://www.microsoft.com/data/download.htm) Microsoft Data Access Components (sürüm 2.1.1.3711.11 GA, 6.2 MB) güncelleme dosyasını indirin ve sisteminizi güncelleştirin. Windows 2000 kurulu sistemlerde bunu yapmaya gerek yok. Böylece sisteminiz, ilerde yazacağımız veri-yönlendirmeli Web uygulamaları için hazır hale gelmiş olacaktır. ////////////////KUTU BİTTİ//////////////// ASP’nin Unsurları ASP tasarımcısı olarak, biz gerçekte ASP’nin Nesneleri ile birşeyler yaparız; başka bir deyişle ASP kodlarımız bu nesnelere yöneliktir, onları kullanma ve onlardan bir sonuç alma veya onlara bir sonuç aktarma amacına yöneliktir. ASP’nin Nesneleri altı grupta toplanır: Application/Uygulama: Bir ASP sitesi, gerçekte bir Uygulama Programı olarak görülür. Bu, HTML/CGI geleneğine aşina tasarımcı için yeni bir kavram. ASP’yi icad edenler; bir ziyaretçi bir ASP sayfasından girerek, bir sitede surfing’e başladığında, onu bir programı işleten bilgisayar kullanıcısı olarak görüyorlar. Böylece, sitemiz, her ziyaretçinin karşısına çıktığında “bir program çalışmış” gibi sayılıyor. Bu yaklaşımın Web tasarımcısı olarak bize kazandırdığı imkanları ele alacağız. Session/Oturum: Bir ziyaretçi sitemize geldiğinde, hangi sayfamızı talep ederse etsin, bu bağlantı ASP açısından bir oturum sayılır. Her oturumun belirli bir süre devam eden özellikleri, değişkenleri ve değerleri vardır. Site tasarımında oturum özelliklerinden geniş ölçüde yararlanacağız. Request/Talep: Browser’dan Server’a ulaşan bütün bilgiler, Request (Talep) nesnesinin ögeleridir. Bu nesneyi kullanarak, istemciden gelen her türlü HTTP bilgisini kullanırız. Response/Karşılık: Server’dan ziyaretçinin bilgisayarına gönderdiğimiz bütün bilgiler, çerezler (cookie) ve başlıklar (Header) Response (Karşılık) nesnesinin ögeleridir. Bu nesneyi kullanarak ziyaretçiye göndermek istediklerimizi göndeririz. Server/Sunucu: ASP, Web Server programını bir nesne olarak ele alır ve onun bize sağladığı araçları ve imkanları kullanmamızı sağlar. ObjectContext/Nesne Bağlamı: Microsoft’un Transaction Server (MTS) programının sunduğu hizmetlere erişmemizi sağlar. MTS, ASP sayfaları içinden, uygulama programlarından yararlanmamızı sağlar. ASP uzmanlığınızı ileri düzeylere ulaştırdığınız zaman MTS ve ObjectContext nesnesinden yararlanabilirsiniz. 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. VBScript’e Giriş Bu kitapçıktaki örneklerimizi VBScript diliyle yazacağımıza göre, önce hızlı bir VBScript kursu görsek iyi olur. Visual Basic dilini biliyorsanız, VBScript biliyorsunuz sayılır. VBScript, güçlü bir dildir; ancak Netscape firmasının hiç bir zaman Browser’ında istemci tarafında çalıştırılabilecek diller arasında kabul etmemesi sebebiyle VBScript, Web’in istemci tarafında kendisinden bekleneni yapamadı. MS’un Browser’ı Internet Explorer ise VBScript ile yazacağınız İstemci-Tarafı kodları okuyabilir ve icra edebilir. Ne var ki ASP kodlarımız hiç bir zaman ziyaretçinin Browser’ının yüzünü göremeyeceği ve sadece Server’da çalışacağı için Server’da VBScript desteği bulunduğu sürece, ASP sayfalarınızı VBScript ile yazabilirsiniz. Bir Server’da ASP desteği varsa, VBScript desteği de var demektir. VBScript’in hemen hemen bütün komutlarını ve yöntemlerini ASP’de kullanabilirsiniz. Ancak bunun bir kaç kısıtlaması vardır. VB veya VBScript’e ASP dışında aşina iseniz, mesaj kutusu (MsgBox) ve girdi kutusu (InputBox) aracılığı ile programlarınıza kullanıcının bilgi girmesini sağlayabileceğinizi biliyorsunuz demektir. Bu iki komutu ASP içindeki VBScript kodunda kullanamayız. Ayrıca ASP teknolojisi zaten VBScript’in bütün komutlarını ve deyimlerini kullanmanızı da gerekli kılmayacaktır. Göreceksiniz ki, mükemmel ASP sayfaları oluşturmak için bile bir avuç VBScript komutu kullanacağız. ASP sayfalarımızdaki HTML kodları ile VBScript (veya diğer Script dillerinin) kodlarını birbirinden ayırmamız gerekir. Bu ASP.DLL’ye, HTML’in nerede bittiğini, Script diliyle yazılmış kodun nerede başladığını gösterebilmemiz için gerekli. Bunu sağlamak için Script diliyle yazılmış herşeyi “<%” ve “%>” işaretleri arasına alırız. ASP.DLL bu işaretleri görünce, içindekileri “yazmak” yerine “yapar.” Bir ASP sayfanızda HTML’in klasik “<” ve “>” işaretleri arasındaki unsurlar, ASP.DLL tarafından ziyaretçiye gönderilecek olan sayfaya aynen aktarılır; ancak “<%” ve “%>” arasındaki herşey, başta belirttiğiniz LANGUAGE etiketinde yazılı Script dilinin yorumlayıcısına verilir; yorumlatılarak, gereği yerine getirilir. “<%” ve “%>” işaretlerine “sınırlayıcı” denir. Sınırlayıcının içinde bir veya daha çok satır kod bulunabilir. Sınırlayıcılar ve içindeki Script, HTML etiketlerinin içinde veya dışında yer alabilir. Sınırlayıcının içindeki kodlarımızı açıklamak için koyacağımız yorum satırlarının başına tek tırnak işareti (') koyarız. İşte bu kuralları uyguladığımız bir ASP sayfası örneği: <% @LANGUAGE=VBscript %> <html> <head> <title>Hoşgeldiniz!</title> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </head> <body> <center> <% ' Yazı tipi boyutunu tutacağımız bir değişken tanımlayalım Dim fontBoyut %> <% ' yazı tipi boyutunu 1'den 7'ye kadar değiştirelim For fontBoyut = 1 To 7 %> <font size = <%=fontBoyut%>> Hoşgeldiniz!<br> <% Next %> </center> <h3>Bugün <% =WeekdayName(Weekday(Date)) %>, <% = Date %>. Şu anda Server'da saat: <% = Time %>.<p> </h3> </body> </html> Burada sınırlayıcı arasında tek veya çok satırlı VBScript kodları ile başında tek tırnak olan icra edilmeyen, yorum satırlarını görüyorsunuz. HTML etiketinin içine gömülmüş VBScript kodu ise HTML’in <FONT> etiketinde yer alıyor: <font size = <%=fontBoyut%>>. Burada karşılaştığımız “<%=” ifadesi, ASP’ye, “Bu değişkenin değerini bul ve tam buraya yaz!” dememizi sağlıyor. Bu ifade daha sonra yakından ele alacağımız Response.Write metodunun kısaltılmış halidir. HTML etiketinin içine yazdığımız VBScript bölümünün kendi sınırlayıcı işaretlerinin yine de kullanıldığına dikkat edin. <asp0007.tif> Bir iki yazım kuralı 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 < 10 Then %> Değişkenler Programcılıkta işlemlerimizi değişkenlerle yaparız. değişkeni bir kap gibi düşünebilirsiniz. Sözgelimi “Gün,” değişkenin adı ise bu değişkenin değeri Pazar, Pazartesi, Salı, vd., olabilir. Her değişken, türüne göre, ya bir ya da daha fazla değer tutar. Adından da anlaşılacağı gibi değişkenin değeri değişir! Bu değişikliği biz yapabiliriz; programın kendisi yapabilir. VBScript’te, bir çok başka bilgisayar programlama dilinden farklı olarak değişkenlerin tanımlanması veya “beyan edilmesi,” “boyutlandırılması” gerekmez. Belirtilmemiş, önceden tanımlanmamış bir değişkene değer atamaya kalkarsanız, VBScript bunu mükemmel şekilde kabul eder. Fakat bu kötü bir programcılıktır. İ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. Örnekler: <% DIM Gun, Ay, Ogrenci, Not Gun = “Pazartesi” Ay = “Ocak” Ogrenci = “Necip” Not = 5 %> Şimdi burada Gun, Ay, Ogrenci, Not adıyla dört değişken oluşturduğumuzu ve bunlara sırasıyla “Pazartesi,” “Ocak,” “Necip” ve “5” değerlerini atadığımızı görüyorsunuz. Bu noktada VBScript yorumlayıcısına sorsanız, “Peki, söyle bakalım, Gun değişkeninin değeri nedir?” diye, yorumlayıcı size “Bunu bilmeyecek ne var? Elbette Pazartesi’dir!” derdi. Belki bu noktada siz de kendi kendinize “Pazartesi, Ocak ve Necip kelimeleri tırnak içinde iken, acaba 5 rakamı neden tırnak içinde değil?” diye soruyorsunuz. Güzel soru. Ama cevabı için biraz bekleyeceksiniz. Değişken isimleri, mutlaka harfle başlamalıdır; içinde noktalama işaretleri bulunamaz ve uzunluğu 255 karakteri geçemez. ////////////////KUTU//////////// Kötü programcılığı önlemek için! Değişkenleri tanımlamadan kullanmak “kötü programcılıktır” demek, ilerde kendi başınıza elinizle program hatası getirirsiniz demektir. Daha sonra örneklerini göreceğiz; ASP, sitemize giren bir ziyaretçiye bir oturum (Session) açar ve bazı değişkenleri oturum boyunca aklında tutar. Bir sayfada kullandığınız bir değişkeni, daha sonraki sayfada kullanabilmek için, bu değişkenin değerinin yeni sayfada değişmemesi gerekir. ASP programı yazarken, bazen gelişi-güzel değişkenlere değer atayabilirsiniz. Neden? O anda aklınıza değişken adı olacak kelime gelmediği için! Bu değişken adını daha önce kullanmışsanız ve içinde biraz sonra kullanacağınız bir değer varsa, değer değiştirilmiş olacaktır. VBScript, savurgan ve dağınık programcılığı önlemek için OPTION EXPLICIT imkanını verir. 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. ///////////////////////KUTU BİTTİ///////////// Peki, şöyle bir değişken tanımlama acaba ortaya nasıl bir değişken çıkartır: <% DIM Gunler(31), Aylar(12), Ogrenciler(210), Notlar(10) %> Bu yöntemle oluşturduğumuz kodlarla elde edilecek “kaplar,” birden fazla değer tutabilir. Yani: <% DIM Gunler(7), Aylar(12), Ogrenciler(21), Notlar(10) Gunler(1) = “Pazartesi” Aylar(3) = “Mart” Ogrenciler(12) = “Necip” Notlar(5) = 5 %> Bu durumda içinde 7 ayrı değişken tutabilecek olan Günler değişkeninin 1 numaralı olanının değeri “Pazartesi,” 12 değer tutabilecek olan Aylar değişkeninin 3 numaralı olanının değeri “Mart,” 21 ayrı değer tutabilecek olan Ogrenciler değişkeninin 12 numaralı olanının değeri “Necip” ve nihayet 10 ayrı değer tutabilecek olan Notlar değişkeninin 5 numaralı olanının değeri ise 5 olacaktır. Böyle, birden fazla değer tutabilen değişkenlere Dizi Değişken veya Array denir. //////KUTU//// Array Fonksiyonu 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 tasarı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! /////////////////KUTU BİTTİ/////////////// Şimdi, aklınıza şu soru gelebilir: Dizi değişken oluşturacağımıza, neden “ogrenci1,” “ogrenci2,” “ogrenci3” diye değişkenler oluşturmuyoruz ve bunlara değerler atamıyoruz? Kötü soru! Dolayısıyla cevabını hemen verelim. Dizi değişkenlerde bir değişkene numarasıyla atıfta bulunabilirsiniz. Ve numara yerine bir başka değişkeni kullanabilirsiniz. Örneğin, OgrenciNo değişkeninizin değeri 12 ise <% .... If Ogrenciler(OgrenciNo) = “Necip” ... %> şeklinde bir döngü ile aradığınız öğrencinin Necip olup olmadığını sınayabiliriz. (Döngülere birazdan geliyoruz!) Başka programlama dillerine özellikle Visual Basic’e aşina olanların aklına şöyle bir soru gelebilir: VBScript’te değişkenin metin mi, sayı mı olduğunu ayırt etmiyor muyuz? Başka programlama dillerinde bir değişkenin değeri harf ve rakamlardan oluşuyorsa, yani matematik işlem yapmaya elverişli değilse bunlara String (Alfanümerik, karakter değerler) denir. Programlama dillerinde bir de matematik işlem yapmaya elverişli değişken türü vardır: Sayı (Number). VBScript, bir değişkene alfanümerik (karakter, metin) olarak atadığınız değeri çift tırnak içine almanızı ister. Sözgelimi Ogrenci(12) değişkeni için Necip değerini atamak istiyorsunuz: Necip kelimesini çift tırnak içine almak zorundasınız. Sayı olarak kullanacağınız değerleri ise tırnak içine almazsınız. (Sayı olarak kullanacağınız değerlerin sadece rakam olabileceğini söylemek gerekmez!) Fakat, işleri karıştıran nokta, VBScript açısından değişken türü diye bir şey olmamasıdır. Visual Basic, küçültülüp Script dili haline getirilirken, değişken türü özelliği alınmayınca, ortaya işleri karıştıran (veya kolaylaştıran) böyle bir durum çıkmış bulunuyor. Karışıklık, çift tırnak içinde verdiğiniz bir değeri matematik işlemde kullanmaya kalktığınızda karşınıza çıkabilir. Rakam olmayan bir karakter-dizisini bir değişkene tırnaksız olarak atadığınızda VBScript “tanımsız değişken” vermeye kalktığınızı söyleyerek, duracaktır. VBScript’in bu eksikliğini gidermek için bazı ASP programcıları değişken adlarının önüne karakter-dizileri için “str” harflerini koyarlar: strAy, strOgrenciler, gibi. İsterseniz, VBScript’in karakter-dizisi ve sayı değişkenleri nasıl ayırt ettiğini veya etmediğini bir kaç örnekle görelim. Şu kodu yazarak, çalıştırın: <% Option Explicit %> <HTML> <% Dim Degisken(2), Toplam Degisken(1) = "Necip" Degisken(2) = "Dayanır" Toplam = degisken(1) + Degisken(2) %> <% =Toplam %> </HTML> Sonuç: “NecipDayanır” değil mi? (Arada boşluk olmamasına aldırmayın şimdilik!) Peki; şimdi Degisken(1) değeri olarak tırnak içine alarak 5, Degisken(2) değeri olarak yine tırnak içinde 10 yazın. Programı tekrar çalıştırın. Sonuç? 510!? Peki; tırnakları kaldırın 5 ve 10’un çevresinden. Sonuç? 15. Oh, neyse! Bir an için VBScript matematik bilmiyor sandık! Bu durum VBScript’in matematik bilgisinin kıtlığından değil, tırnak içindeki değerlerin, VBScript ayrım yapmıyor bile olsa, karakter-dizisi (String) iken toplama işleminde ard arda eklenmesinden (concatenate) kaynaklanıyor. Tırnakları kaldırdığınızda, VBScript bu değerlerin sayı olduğunu anladı ve doğru işlemi, yani toplama işlemini yaptı. Şimdi VBScript’in değişkenleri ele alış tarzını daha iyi kavramak için Degisken(1) değeri olarak tırnak işareti koymadan kendi adınızı, Degisken(2) değeri olarak da soyadınızı yazın ve programı çalıştırın. Ne sonuç aldınız? VBScript’in kullandığı tek tür değişkene variant denir. Variant, karakter-dizini (String) de olabilir, sayı (Number) da. Fakat bir variant’ın içindeki değer, veri olarak nitelendiğinde şu türlerden birine girer: Boolean Değişkenin değeri ya True (doğru) ya da False (yanlış) olur; True’nun değeri –1, False’un değeri ise 0’dır. Byte 0 ile 255 arasında bir sayısal değer olabilir. Double Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 4.9E-324 ile 1.8E308 arasında, negatif sayılarda -4.9E-324 ile -1.8E308 arasında bir değer alabilir. Date/Time Önceden belirlenmiş biçimlerde tarih ve zaman bilgisi içerir. Empty Tanımlanmış ancak henüz değer atanmamış (boş) değişken türüdür. Error Programın hata mesajlarını ve hata değerlerini tutar. Integer Noktalık bölüm içermeyen tamsayı verilerdir; değeri -32.768 ile +32.767 arasında olabilir. Long Noktalık bölüm içermeyen tamsayı verilerdir; değeri -2.147.483.648 ile 2.147.483.648 arasında olabilir. Null İçinde veri bulunmamak üzere tanımlanmış değişkenlerdir. Object Windows OLE Nesnelerini tutmak üzere tanımlanmış değişkenlerdir. Single Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 1.4E-45 ile 3.4E38 arasında, negatif sayılarda –1.4E-45 ile -3.4E38 arasında bir değer alabilir. String Alfanumerik veri tutan değişkenlerin değeridir Belgenin Başı Sabit 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” VBScript’te İşlemciler (Operatörler) Bilgisayar Operatörü ile program Operatörü arasında fazla bir fark yoktur. Her ikisi de verdiğiniz değerleri ya karşılaştırır bir sonuç bulurlar; ya da bu değerlerle aritmetik işler yapar ve bir sonuç ortaya çıkartırlar. Bilgisayar Operatörü daha sonra bu iş için sizden para ister; program operatörü istemez! VBScript’in operatörleri ve yaptıkları işler şöyle sıralanır: Operatör İşlev Sınıfı + Toplama Aritmetik - Çıkartma * Çarpma / Bölme ^ Üssünü alma \ Tamsayı bölme Mod Modüler aritmetik = Bir değişkenin diğerine eşit olduğunu sınar Karşılaştırma <> Bir değişkenin diğerine eşit olmadığını sınar >and< Bir değişkenin diğerinden büyük veya küçük olduğunu sınar (and kelimesi var) >= and <= Bir değişkenin diğerinden büyük veya eşit, veya küçük veya eşit olduğunu sınar (and kelimesi var) Is Bir ifadedeki iki referansın aynı Nesne’ye yapılıp yapılmadığını sınar And Bir veya daha fazla değişkeni test olarak karşılaştırır Mantıksal Or Bir işlemin devamı için hangi koşulun oluşması gerektiğini sınar Not Bir ifadeyi negatif hale getirir XoR Sadece bir koşulun doğru olup olmadığını sınar Eqv İki değişkenin eşitliğini sınar Imp İki ifadede mantıksal implikasyon işlemi yapar. VBScript ile yazacağımız ASP sayfalarında bu işlemcileri beklediğimiz sonucu verebilmesi için kullanım sıraları önemlidir. Bunu bir örnekle açıklayalım. 100’den 6’yı çıkarmak ve sonucu 2’ye bölmek istiyorsunuz; sonuç 47 olacaktır. Yani: 100-6/2. Değil mi? Bu işlemin VBScript’teki sonucu 97 olacaktır. Çünkü, VBScript önce 6’yı 2’ye bölecek ve elde ettiği sonucu 100’den çıkartacaktır. VBScript’te, aritmetik işlemlerin yapılma sırası şöyledir: Operatör İşlev Öncelik + Toplama 3 - Çıkartma 3 * Çarpma 2 / Bölme 2 ^ Üssünü alma 1 VBScript ile hesap işlemi yaparken, aritmetik işlem sırasını karıştırarak hatalı sonuç almamak için sık sık parantez kullanmak yerinde olur. Yukarıdaki örnek şöyle yazılabilirdi: (100-6)/2. Tabii amacınız 100’ü 6/2’ye bölmek ise bu işlemi şöyle yazmalısınız: 100-(6/2). VBScript’de Program Kontrolü İster Script diliyle, ister gerçek programlama diliyle yazılsın, bir bilgisayar programının varlık sebebi, çeşitli durumları değerlendirerek, belirli durumlarda belirli kararlar verebilmesidir. Bunu programın kontrol öğelerini kullanarak yaparız. Programlar, bu öğeler sayesinde karşılaştırma yaparlar; belirli durumların oluşup oluşmadığını sınarlar; veya belirli bir durumun oluşmasına veya sona ermesine bağlı olarak bir iş yaparlar veya yapmazlar. Bunu sınamalarla (koşullu ifadelerle) veya döngülerle sağlarız. Kimi zaman da, programa (programın mantığı çerçevesinde) istediğimiz anda yapmakta olduğu işi durdurarak, başka bir işi yapmasını bildirebiliriz. Bunlara da Süreçler (veya Prosedürler) denir. (Adındaki Basic’e bakarak, VBScript’i basit bir dil sanmıyordunuz, umarım!) Mantıksal Sınamalar VBScript’te programın karar vermesini sağlayan ilk kontrol ögesini “eğer ... ise... yap!” şeklinde özetleyebiliriz. VBScript bu işlemi iki ayrı ifadeyle yaparız: If.. Else 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 Bunu bir örnekle ifade edelim: Eğer saat 12’den önce ise sayfaya “Günaydın” yazdır; saat 12’den sonra ise “Tünaydın” yazdır. Fakat burada bir eksiklik var: Saat 18’den sonra ise sayfaya “İyi akşamlar!” yazdırmamız daha doğru olmaz mı? If döngüsü kendi içinde sınırsız Elseif (ikinci şartlı döngü) imkanı vererek bize bunu sağlar. Her Elseif’i yeni bir If gibi düşünebilirsiniz. İşte şu senaryoyu gerçekleştirecek kod örneği (hosgeldiniz01.asp): <HTML> <HEAD> <TITLE>ASP ILE SAATE GORE SELAM</TITLE> <META http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <META http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <H2> <CENTER> <% If Hour(Now) <12 Then Response.Write "Günaydın! " ElseIf Hour(Now) >= 18 Then Response.Write "İyi akşamlar! " Else Response.Write "Tünaydın! " End If Response.Write "<BR>" Response.Write "Site Onar
  24. [b]Asp Kitapları - Asp Dersleri[/b] ASP - Hakkı Öcal 181 Sayfa.pdf ASP Güncesi - Mehmet Günce Akkoyun 151 sayfa.PDF ASP - Faruk Çubukçu 68 Sayfa.pdf ASP Ders Notları - 47 Sayfa.pdf ASP ile E Ticaret Programcılığı - 545 sayfa.pdf ASP TR IIS.pdf - 32 Sayfa.pdf ASP VBScript - 33 Sayfa.pdf [code]http://rapidshare.com/files/57648689/ASP.rar[/code]
  25. [color="#0000FF"][b]Konu Başlığı :[/b][/color] [b] [color="#FF0000"] Yeni Harry Potter yazmayacak [/color] [/b] [color="#0000FF"][b]Konu Detayları:[/b][/color] [b] [color="#FF0000"] [/color] [/b] [quote] [b] [img]http://www.haber3.com/images/news/454708.jpg[/img] J.K Rowling, Harry Potter serisine yeni bir kitap eklemeyecek. 23 Haziran 2011 İngiliz yazar J.K. Rowling'in Harry Potter serileri, Ekim ayında elektronik kitap olarak satışa çıkacak. J.K. Rowling, yeni açılacak interaktif pottermore.com adresli internet sitesinde, serinin 7 kitabının, Ekim ayında çok sayıda dilde sesli ve elektronik kitaplar olarak satışa sunulacağı bildirildi. Sitede kullanıcıların, bilgisayar oyunu, sosyal ağ ve internet mağazası unsurlarını birleştirerek Harry Potter'ın dünyasını keşfe çıkabilecekleri, ayrıca Rowling'in karakterler ve mekanlar hakkında "biriktirdiği bilgiye" ulaşabilecekleri belirtildi. İnternet sitesinin, 31 Haziran'da faaliyete geçeceği kaydedilirken, Rowling, başka bir Harry Potter kitabı yazmayacağını ifade etti. Harry Potter serisinin 7. ve son kitabı "Harry Potter ve Ölüm Yadigarları", 2007 yılında piyasaya çıkmıştı. (Ntvmsnbc ve Ajanslar) [quote]http://www.haber3.com/yeni-harry-potter-yazmayacak-912926h.htm[/quote] [/b] [/quote]
×
×
  • Create New...