Asp'de VbScript fonksiyonlarını ve bazı özellikleri kullanarak işlemlerinizi daha kolay daha az vakitde daha güçlü ve daha esnek yapabilirsiniz.
İşlenecek fonksiyonlar ve açıklama:
1.) Replace : Verilerimiz içerisindeki kelimeleri istediğimiz şekilde değiştirme yapmak için kullanılır.
Ayrıntılı açıklama ve örnekler yazının devamında.
2.) Function : Fonksiyon işlemi toplu işlem dosyaları olarak düşünülebilir sayfa içerisinde sık sık yaptığımız işlemleri function olarak sayfamıza koyduktan sonra verilerimize bu function ile düzenleyebiliriz veya yapmak istediğimiz hesaplamaları biçimlendirmek istediğimiz yazıları bir Function bölüm açarak biçimlendirir ve sayfa içerisinde istediğimiz yerde function'u çağırarak kullanabiliriz.
Ayrıntılı açıklamalar ve örnekler yazının devamında.
3.) LeftRightLenUcaseLCaseTrimMidInstr : Genelde kelimeler üzerinde işlem yapmak için kullanılır. Ayrıntılı açıklamalar ve örnekler yazının devamında.
4.) ForNext : Herhangi bir işlemi bu data da olabilir bizim istediğimiz kadar tekrarlamamızı sağlar
Ayrıntılı açıklamalar ve örnekler yazının devamında.
5.) UBound Split : UBound dizideki içerisindeki eleman sayısını verir Split ise verdiğimiz ayraç ile bir dizedeki değerleri bölerek stringlere atamamızı sağlar. Genelde uzun verilerle değişik işlemler yapmak için veya Stringleri düzenli ifadelere ve değerler döndürmek için kullanılır.
Ayrıntılı açıklamalar ve örnekler yazının devamında.
İşe başlayalım.
1.) Replace : Bir çok script yazarı kötü niyetli kişilerin sayfasına zararlı kodlar yazarak bozulmasından şikayetçidir Ayrıca kelimelerde çeşitli düzenlemeler yapmak bir ölümdür VbScript 'de kelimeleri değiştirmek için fonksiyon bulunmaktadır Bu fonksiyonu kullanarak zararlı kodlardan ve kelime işlemlerinden kolay şekilde sıyrılabiliriz.
Kullanımı:
Replace ("Değiştirilecek kelime""Hangi harfler değiştirilecek""Ne diye değiştirilecek")
Örnek:
<%
duzenlenmis_deger = Replace("Merhaba .net ailesi."" .net"" .NET")
duzenlenmis_deger = Replace(duzenlenmis_deger" .NET""<font color=red> .NET</font>")
%>
Örnek'tende anlayacağınız gibi Merhaba .net ailesi kelimesinin içerisindeki .net kelimesini .NET olarak değiştirdik.daha sonra değiştirdiğim değeri tekrar ikinci bir Replace ile font rengini kırmızı yaptık. dikkat etmeniz gereken sadece sıralama Hangi değerin içerisindeki hangi kelimeyi hangi kelimeyle değiştireceğimiz yazıyoruz. Bir örnek daha yapalım bu örnektede zararlı bazı kodları temizleyelim.
<%
kelime = "Merhaba naber nasıl gidiyor.? <script>alert('Ben zararlı bir kodum')</script>"
duzenlenmis_kelime = Replace(kelime"<""")
duzenlenmis_kelime = Replace(duzenlenmis_kelime">""")
duzenlenmis_kelime = Replace(duzenlenmis_kelime"'""")
duzenlenmis_kelime = Replace(duzenlenmis_kelime"like""")
duzenlenmis_kelime = Replace(duzenlenmis_kelime"select""")
Response.Write duzenlenmis_kelime
%>
Sanırım replace ile ilgili bu kadar örnek yeterli.
2.) Function : Çoğumuz script yazarken bir işleme birden fazla gerek duyarız aynı şeyleri tekrar tekrar yazmakta sizi oldukça rahatsız ediyorsa sayfanız içerisinde bir function yazarak bu fonksiyondan yararlanabiliriz. Mesela bir değer hesaplama Kelimeleri biçimlendirme gibi olaylar siz yazılarınızı normal olarak yazarsınız daha sonra biçimlendirilecek veya hesaplanacak değeri fonksiyona gönderirseniz fonksiyon'da sizin gönderdiğiniz değeri alır ve sizin prosedürlerinize göre biçimlendirir ve çıktıyı size verir. Bu hem asp sayfanızı karmaşıklıktan kurtarır hem de sizin daha rahat ve hızlı kod yazmanızı sağlar.
Kullanımı:
Function fonksiyon_adi
. işlemler
End Function
Fonksiyonun kullanımı yukarıdaki biçimdedir ama genelde fonksiyonlar da hazır işlevler veya kendi hesapladığı değerler kullanılmaz bunun yerine yukarıda belirttiğimiz gibi bizim atadığımız fonksiyona gönderdiğimiz değerler biçimlendirilir hesaplanır Onun için kullanımı genelde aşağıdaki şekildedir.
Function fonksiyon_adi(gelen_deger)
işlemler
fonksiyon_adi = gelen_deger veya islenmis_deger
End Function
Dikkat ederseniz yukarıdaki fonksiyon ile iki farkı var Birincisi bir parantez açıp gelen_deger yazmışız yani fonksiyonda yapılacak işlemlere bir değer atamışızatamışız da bunu nasıl yapmışız. bunu asp kodlarınızı yazarken fonksiyon_adi("Fonksiyona gidecek değer") şeklinde yapabilirsiniz.
İkincisi ise fonksiyonu sonlandırmadan fonksiyon_adi diye bir değişken açıp buna değer atamışız bunun sebebi'de fonksiyona gelen_deger 'e işlem yaptık al kardeşim sonucu da bu demek.
Örnek:
Şimdi biz öğretmeniz ders notları olan bir sayfa yapıyoruz diyelim biz veriyi yazarken ahmet 50 mehmet 40 aldı diye yazıyoruz buraya kadar her şey tamam ama ben istiyorum ki benim yazdığım 50'nin 40'ın yanına bir parantez açıp finalde alması gereken notu da script'in hesaplayıp yazması onlarca da öğrencimiz var hemen bir fonksiyon yazalım o zaman bu sınavda(1.sınav) aldığın notun karne notuna %30 ikinci sınavda aldığı notunda karne notuna %70 etki edeceğini varsayarsak.
'İlk önce sayi_hesabla'da parantez içerisine yazdığımız değeri alıyoruz.
Function sayi_hesapla(deger)
'Gelen değeri ilk sınav notu olarak bir değişkene atadık
ilk_sinav_notu = deger
'İlk sınavda almış olduğu notun karneye ne kadar etki edeceğini bulduk
ilk_sinav_etki = ((deger * 30) /100)
'Ve ikinci sınavda alması gereken notuda hesaplayıp ikinci_sinav_gereken_not değişkenine atadık
ikinci_sinav_gereken_not = FormatNumber(((50 - ilk_sinav_etki) * 100 / 70)0)
'Şimdi sıra son aşamaya geldi ilk önce fonksiyon_adi 'na bir değer açtık ve fonksiyon sonucunda:
'İlk önce bizim ilk aldığımız değeri daha sonra & koyup hesapladığımız değeri yazdırıyoruz.
sayi_hesapla = deger &"("& ikinci_sinav_gereken_not &")"
'Ve fonksyonumuzu bitiriyoruz.
End function
Üsteki şekilde bir fonksiyon yazdıktan sonra tek yapmamız gereken normal şekilde öğrencilerin notlarını yazarken asp sayfamızda sayi_hesapla("45") şeklinde öğrencinin notunu fonksiyona yollamak. Örnek vermek gerekirse;
Ömer <%=sayi_hesapla("20")%>
Şahin<%=sayi_hesapla("40")%>
Neşet <%=sayi_hesapla("50")%> siye yazdığımızda ekrana çıktı olarak.:
Ömer 20(63)
Şahin40(54)
Neşet 50(50) bunu dökecektir.
3.) Left Right Len Ucase LCase Trim Mid Instr : Bunları kısaca açıklamak gerekirse:
Left: Kelimenin solundan istediğiniz kadar bir karakter alır.
Kullanımı : Left("İşlem yapılacak Kelime"Kelimeden alınacak karakter sayısı)
Örnek:
kelime = "merhaba ben bir makaleyim."
soldan_al = Left(kelime7)
Response.Write soldan_al
Yukarıdaki şekilde bir kullanım bize çıktı olarak merhaba kelimesini verir.
Right: Kelimenin sağından istediğiniz kadar karakteri alır.
Kullanımı: Right("İşleme yapılacak kelime"Kelimeden alınacak karakter sayısı)
Örnek:
'Yukarıdaki kelime üzerinden gidersek
sagdan_al = Right(kelime10)
Response.Write sagdan_al
Yukarıdaki şekilde bir kullanım bize çıktı olarak makaleyim. kelimesini verecektir.
Ucase: Yazılan değeri büyük harfe çevirir.
Kullanımı: Ucase("Büyük harfe çevrilecek yazı")
Örnek:
buyuk_yap = Ucase ("naSIL YAzArsAnIZ YazIn bU CÜmlE bÜyÜk oLaCAK")
Response.Write buyuk_yap
Yukarıdaki şekilde bir kullanım bize NASIL YAZARSANIZ YAZIN BU CÜMLE BÜYÜK OLACAK bu şekilde bir çıktı verecektir.
Lcase: Yazılan değeri küçük harf yapar.
Kullanımı Ucase ile aynı.
Trim: Değerin sağındaki ve solundaki boşlukları siler.
Kullanımı: Trim(Request.Form("gelen değer"))
Mid: Kelimenincümlenin veya değerin içerisinden şu karakterden başlayarak şu kadar karakter al dememizi sağlar.
Kullanımı: Mid("İşlemin uygulanacağı kelime cümle veya sayı"Karakterden başlayarakHane karakter al")
Örnek: Mid("İşlemin uygulanacağı kelime cümle veya sayı"812)
Yukarıdaki şekilde bir kullanım bize 8.karakterden saymaya başlayarak 12 karakter ekrana dökecek yani uygulanacağı kelimesini verecektir.
InStr : KelimeninCümlenin veya Sayının içerisinde bir karakter veya karakter dizisi aratmamızı ve aratmış olduğumuz karakterin varolup olmadığını var ise kaçıncı haneden itibaren başladığını verir.
Kullanımı: InStr(Kaçıncı karakterden itibaren aramaya başlanacakNerde aranacakNe aranacak)
Örnek: InStr(1"İşlem yapacağımız kelime 'in kabuğunu kırıp özüne inmeyen.""illegalworld")
Yukarıdaki gibi bir kullanım kelimenin birinci karakterinden başlayarak içerisinde illegalworld kelimesi varmı diye bakacak var ise kaçıncı hane olduğunu ekrana dökecek Yukarıdaki gibi bir kullanım ekrana : 26 dökecektir.
Şimdi yukarıdaki işlemleri öğrendi isek karışık bir örnek yaparak bilgilerimizi pekiştirelim.
Uzun bir cümlem var bu cümlenin içerisinde [telif] [/telif] arasına yazarın ismini belirterek tekrar başka bir yerde belirtmeden [telif] [/telif] arasındaki yazıyı sayfanın sonunda yazdırmak istiyorum. Cümlemiz:
islem_yapilacak_kelime = "Bana bu web sayfasından ulaşabilirsiniz. "
Şimdi ilk yapmamız gereken aranacak kelimeleri belirtmek ve kaçıncı hanede ise onu bulmak.
'ilk önce 2 tane değişken atayarak aranacak karakterleri belirtiyoruz.
aranacak_karakter = "[telif]"
aranacak_karakter2 = "[/telif]"
'Daha sonra bu karakterler cümle içerisinde varmı diye bakıyoruz var ise kaçıncı karakterde olduğunu buluyoruz.
pozisyon = Instr(1 islem_yapilacak_kelime aranacak_karakter)
pozisyon2 = Instr(1 islem_yapilacak_kelime aranacak_karakter2)
'Bizim cümlenin içerisinden aradığımız karakterler arasındaki kelimeyi alacağımız için kaç karakter alacağımızı buluyoruz.kaç karakter alınacak'ta - 7 yazmamızın sebebi [telif] yazısınıda ekrana basmaması
kac_karakter_alinacak = (pozisyon2 - pozisyon) - 7
'Mid fonksiyonu ile cümleden şu pozisyondan başlayarak şu kadar karakter al diyoruz.
telif_hakki = Mid(islem_yapilacak_kelimepozisyon+7kac_karakter _alinacak)
Response.Write telif_hakki yazdığımızda ekrana Ömer Osmanoğlu 'nu dökecektir.
4.) ForNext : For ve Next bir döngüdür For ve Next arasına yazılan yorumları bizim döngüyü başlatırken yazacağımız değer kadar tekrarlar. Bu özelliği birden çok kayıt yapma Birden çok mail gönderme her kayıtta faklı bir şey yapma gibi işlemlerde kullanabiliriz.
Kullanımı :
For i=1 to 8
işlemler
Next
Basit olarak kullanım yukarıdaki gibidir. Yukarıdaki gibi bir kullanımda Döngünün 1'den başlayarak kendisini 7 kere daha tekrar etmesi demektir yani For değişkeni olarak kullandığımız i 8 olana kadar döngü kendini tekrarlayacaktır. Buradaki i değişkendir kendiniz buraya istediğiniz şeyi yazabilirsiniz bunu bir örnekle pekiştirelim.
For i=1 to 8
Response.Write i &"<br>"
Next
Gibi bir ifade yazarsa döngü 1 'den itibaren başlayarak her yazdıktan sonrada bir alt satıra geçerek ekrana i değerini bastıracaktır.
For'da step(Adım) özelliğide vardır yani yukarıdaki döngüyü For i=1 to 8 Step 2 gibi bir ifade yazarsanız size 12345678 çıktısını değil 1357 çıktısını verecektir. Döngüde Step parametresi verilmez ise döngü bir-bir artarak gider ama step parametresi ile döngünün nasıl artacağını belirleyebiliriz.
Şimdi gelelim For döngüsünü işe yarar bir şeyde kullanmaya mesela seçilen kayıtlara göre bir işlem yapmak istiyorsunuz bunun için seçim yapacak bir form oluşturmak lazım.
<form method="post">
<input ******"checkbox" name="secim" value="Ömer">Ömer<br>
<input ******"checkbox" name="secim" value="Şahin">Şahin<br>
<input ******"checkbox" name="secim" value="Neşet">Neşet<br>
<input ******"checkbox" name="secim" value="Murat">Murat<br>
<input ******"checkbox" name="secim" value="Emel">Emel<br>
<input ******"submit" value="Hangi üyeyi silmek istersiniz.">
</form>
Diye bir form oluşturduk daha sonra sayfanızın altına aşağıdaki kodu yerleştirin
<%
For i=1 to Request.Form("secim").count
deger = Request.Form("secim") (i)
Response.Write "Tekmelediğiniz üyeler.:"& deger &"<br>"
Next
%>
Zaten kod'dan da anlayacağınız gibi ilk önce For döngüsünü formda işaretlenen checkbox(Seçim kutusu) kadar döndürüyoruz. daha sonra deger diye bir string açıp bu string'e de Formdan gelen değerleri yazdırıyoruz.deger'e atadığımız değerleri ekrana yazdırıyoruz ekrana yazdırmak yerine burada delete from veya Update gibi Sql cümleleri ile veritabanınızdan seçilmiş kayıtları(Birden çokda olabilir) silebilir update edebilirsiniz.
5.) UBound Split :
Ubound: Dize içerisindeki elemanları sayar.
Kullanımı: UBound(Dize_adi)
Split: Bir string'i belirli ayaraçlar ile dizelere atamamızı sağlar
Kullanımı : Split("Dize değeri1Dize değeri2Dize değeri3"Ayraç)
Örnek: Split("ömerosmanoğlukastamonu1980""")
Yukarıdaki örnekte virgül () ile ayırarak tırnak içerisinde yazdığımız değeri parçalamamızı sağlar.
Mesela UBound kullanarak split'teki cümledeki eleman sayısınıda bulmamız mümkündür. Örneği genişletirsek;
'Adınızı soyadınız doğum yerinizi ve tarihinizi (virgül) ile ayırarak yazınız.
cumledeki_degerler = Split("ömerosmanoğluistanbul1979""")
Response.Write "Adı:"& cumledeki_degerler(0) &"<br>"
Response.Write "Soyadı:"& cumledeki_degerler(1) &"<br>"
Response.Write "Doğum Yeri:"& cumledeki_degerler(2) &"<br>"
Response.Write "Doğum Tarihi:"& cumledeki_degerler(3) &"<br>"
Response.Write "Yazılan alan sayısı:"& UBound(cumledeki_degerler)
Yukarıdaki şekilde bir örnek bize Adı:ömer Soyadı: osmanoğlu Doğum Yeri: istanbul Doğum tarihi:1979 diye bir çıktı verir.
Yazılan alan sayısıda Ubound ile bize 3 değerini verecektir bundaki 3 rakamı 0 'dan başladığı içindir yani 0123 toplam 4 string'dir.
Şimdi yukarıdaki uygulamaları hepsi ile bir örnek yapalım örneğim Kötü Kelime Flitresi yapalım.
İlk önce kötü kelimeleri yazalım ben bu konuda tecrübeli olmadığım için arkadaşlardan yardım aldım.Kelimelerin telif hakkı neşet'e aittir.
kotu_kelimeler = "aptalsalakmanyak"
cumle = "Merhaba ben kötü kelime flitresinin çalışıp çalışmadığını öğrenmek için yazıyorum salakça bir gün geçirdim tıka basa bir otobüsten indikten sonra. güneşinde etkisi ile açıkca aptallaştım. İstanbul trafiğindede çok manyakça araba kullanıyorlar hala yaşadığıma inanamıyorum."
Şimdi ne yapacağız kotu_kelimeler aklımıza geldikçe virgül ile ayırarak yazıyoruz yani sayısı değişiyor o yüzden ilk önce bunları değişkenlere atayıp ne kadar kötü kelime flitresi yaptığımızı sayalım.
'Kötü kelimeleri kotu_kelimeleri_ayir değişkenine atadık.
kotu_kelimeleri_ayir= Split(kotu_kelimeler"")
'Kaç tane kötü kelimemiz var o kadar replace yapacağız çünkü
bu_kadar_kotu_kelime_var = UBound(kotu_kelimeleri_ayir)
Buraya kadar herşey tamam şimdi Replace(cumlekotu_kelime_ayir(0)"ayıp kelime") diye cumlemizdeki kötü kelimeleri ayıp kelime diye değiştirebiliriz veya yıldız falan koyabiliriz ama dediğim gibi kötü kelime sayısı sürekli değiştiği için kotu_kelime_ayir(0)(1)(2) diyerek her kelimeyi replace edemem. Ayrıca ben bunu sadece cumle değişkeni için değil ileride belkide yorum mesaj değişkenleri içinde kullanırım onun için bunu bir Fonksiyon haline getirmem en iyisi.
'Fonksiyonumuzu başlatıyoruz ve değerimizi alıyoruz
Function temizle(deger)
'For ile kotu_kelime sayisi kadar dongu kuruyoruz
'Her kötü kelime eklendiğinde for bir daha dönüp next'e kadar olan işlemleri tekrar yorumlayacaktır.
For i=0 to bu_kadar_kotu_kelime_var
'Her kötü kelimeyi cümle içerisinde ayıp kelime diye değiştirip deger'i güncelliyoruz.
deger = Replace (degerkotu_kelimeleri_ayir(i)"(ayıp kelime)")
'Döngümüzü sonlandırıyoruz.
Next
'Ve For ile tüm kötü kelimeleri replace ettikten sonra temizlenmiş değeri fonksiyonumuza atıyoruz.
temizle = deger
End Function
'Artık asp içerisinde sadece kötü kelime flitresi yapmak istediğimiz değişkenleri temizle parantezine aldığımız zaman kötü kelimelerden arınmış olacağız.
Fonksiyonun kullanımına örnek vermek gerekirse
Response.Write temizle(cumle)
Response.Write temizle(Request.Form("Formdan_gelen_deger"))
Response.Write temizle(RecordSetAdi("Datadan_gelen_değer")) vb
[ Alıntı ]