evcil.net noktanın egemenliği

408 / 020

Validation Kontrolleri

Kompleks web sitelerinin birçoğunda üyelik sistemi veya forum gibi server-client
arasında iletişim kurulmasını gerektiren uygulamalar vardır. ASP ve PHP gibi
server taraflı platformların kullanımının yaygınlık kazanmasından sonra birçok
web sitesi üyelik sistemi kullanmaya başlamış, sadece üyelerin ulaşabildiği
forum gibi uygulamaları sunmuştur. Kaynak sitelerin artmasıyla birlikte, birkaç
yıl önce örnekleri sadece alışveriş siteleri gibi büyük projelerde görülebilen
üyelik başvurusu formları, bir nevi özelleşmiş ve herkesin kullanmaya başladığı
bir uygulama olmuştur.

Bedava ASP veya PHP hosting hizmeti veren web
sitelerinin de artışıyla birlikte her sitenin forumu ve böylece bir üye
topluluğu olmuştur. Birçok web programcısı değişik tarzlarda üyelik başvurusu
formları hazırlamıştır. Çoğu kez ziyaretçinin girdiği değerleri kontrol edip
uygunsuz üyelik başvurularının önüne geçmek büyük bir sorun oluşturmuştur.


Bazıları işin kolayına gidip kullanıcısına pek yardımcı olmayan formlar
hazırlamayı tercih etmişlerdir. User-friendly olmayan bu formlar beyaz ve boş
bir sayfada "Kullanıcı adınız 4 karakterden uzun olmalıdır" demekle
yetinmişlerdir. Özellikle bedava SMTP mail hizmeti veren, bu işe gerçekten para
yatırıp zaman harcayan Yahoo veya Hotmail benzeri sitelerin başvuru formları web
programcılarının hayallerini süslemiş ve hedefleri olmuştur.


Kullanıcısını anlamayan ve çıkan hataları tokat gibi yüzüne çarpan
formlar yerine daha arkadaşçıl formlar tercih edilmeye başlamıştır. Ancak Yahoo
veya Hotmail ''in sahip olduğu üye başvuru formunu yapmak da pek kolay değildir.


Birçok kişi bu uğurda uzun zaman harcamıştır. Çoğu ASP veya PHP ''nin
yetersizliğine bu sırada kanaat getirmiş, eskinin el üstünde tutulan
teknolojilerinin artık eskidiğini düşünmüşlerdir. Klasik ASP ile, hiçbir alanı
doldurulmadan gönderilen bir formu tekrar göstermek ve doldurulması gereken
input kutularının yanına kırmızı bir font ile hata yazısı yazmak kolay iş
değildir.

Bazı web programcıları ise daha ileri gidip bu kontrollerin
sayfa tekrar yüklenmeden yapılmasını istemiştir. Bunu istemek her ne kadar çok
kolay olsa da her şey o kadar kolay değildir. JavaScript ile birşeyler
yapılabilir belki ama bu uğurda günler harcanmıştır.


Validation
Kontrolleri

ASP.NET Server kontrollerinden birisi de Validation
(Geçerlilik)
kontrolleridir. Server taraflı validation kontrolleri
onaylanması istenen veriyi kontrol edip gerekirse hata mesajı gösterir. Server
bu kontrollere gizli (invisible) kontroller olarak davranır. Kullanıcı
istenmeyen bir veri girişi yaptığında kontrol görünür (visible) olur.

6
çeşit validation kontrolü ASP.NET ile web programcısının kullanımına
sunulmuştur.


  • RequiredFieldValidator : input kontrolünün herhangi bir değer taşıyıp
    taşımadığını kontrol eder.


  • RegularExpressionValidator : input kontrolünün değerini programcının
    belirlediği regular expression ile karşılaştırıp kontrol eder.


  • CompareValidator : Programcının belirlediği iki input kontrolünün
    değerini veya input kontrolünün değeri ile yine programcının belirlediği bir
    değeri karşılaştırır.


  • RangeValidator : input kontrolünün değerinin belirli bir aralıkta
    olup olmadığını kontrol eder.


  • CustomValidator : Özelleştirilmiş validation kontrolleri
    geliştirmenizi sağlar.


  • ValidationSummary : Formdaki tüm validation hatalarının özetini
    verir.

    Validation kontrolleri görevlerini server tarafında olduğu gibi
    client (istemci) tarafında da gerçekleştirirler. RequiredFieldValidator
    dışındaki kontroller boş input kontrolünde uygunsuz bir durum bulamazlar. Bir
    input kontrolü için birden fazla validation kontrolü kullanılabilir. Validation
    kontrollerinin en yaygın kullanılacak olan birkaç özelliği şunlardır.


  • ErrorMessage : Bu özelliğin değeri, kontrolün onaylaması istenen
    değerde uygunsuz bir durum olduğunda hata mesajı olarak gösterilir. Ayrıca
    ValidationSummary''de de bu mesaj gösterilir.


  • Display : Validation kontrolleri onaylayacakları değer hatalı olana
    kadar gizli beklerler. Kullanıcı veriyi girerken istenmeyen bir format
    kullanmışsa hata mesajı gösterilir. Display özelliğinin üç muhtemel değeri
    vardır.


  • class=CodeInText>Display="Static" : Mesajın gösterilmesi için gerekli
    alan başlangıçta ayrılır.
  • class=CodeInText>Display="Dynamic" : Hata mesajının gösterilmesi için yer
    ayrılmaz ve gerektiğinde sayfanın diğer içeriği ile yer değiştirilerek
    gösterilir.
  • class=CodeInText>Display="None" : ValidationSummary kullanılmadıkça hata
    mesajı gösterilmez. Mesaj özette gösterilir.


    size=2>RequiredFieldValidator

    RequiredFieldValidator
    adından da anlaşılabileceği gibi girilmesi zorunlu tutulan input kontrollerini
    denetlemek için kullanılır. Kontrolün bu görevi yerine getirebilmesi için
    denetleyeceği kontrolün id ''sini bilmesi yeterlidir. Boş bir input kontrolü
    RequiredFieldValidator gözünde hatalıdır. Kullanımı şu şekilde yapılır:









    RequiredFieldValidator

    class=HTML_Element>< class=HTML_ElementName>asp:RequiredFieldValidator class=HTML_AtributList> id="rfvParola"

    runat="server"
    ControlToValidate="txtParola"

    ErrorMessage="Parolayı
    girmelisiniz"
    Display= class=HTML_AtributListValues>"Static"/>


    RequiredFieldValidator
    kontrolüne denetleyeceği kontrolün id ''si ControlToValidate özelliği ile
    gösterilir.


    size=2>RegularExpressionValidator

    VBScript ''in son
    sürümüyle birlikte klasik ASP programcılarının da kullanmaya başladığı
    RegularExpression bu kontrolün ana bileşenini oluşturur.
    ControlToValidate özelliğinde id ''si verilen input kontrolünün değeri
    ValidationExpression özelliğinde verilen regular expression ifadesi ile
    karşılaştırılır. RegularExpressionValidator gerekli ifade oluşturulursa diğer
    bazı validation kontrollerinin görevini yapabilir. Örneğin bir kontrolün
    değerinin olup olmadığını kontrol edebilir.









    RegularExpressionValidator

    class=HTML_Element>< class=HTML_ElementName>asp:RegularExpressionValidator class=HTML_AtributList> id="revParola"
    runat="server"
    Display= class=HTML_AtributListValues>"Static" ControlToValidate= class=HTML_AtributListValues>"txtParola"
    ErrorMessage= class=HTML_AtributListValues>"Parola 4-8 karakter olmalıdır"

    ValidationExpression= class=HTML_AtributListValues>"S{4,8}"/>

    Bu
    RegularExpressionValidator kontrolündeki regular expression ifadesine göre
    txtParola kontrolünün değeri en az 4, en fazla 8 karakter olabilir. Aksi
    durumlarda hata mesajı gösterilir.


    size=2>CompareValidator

    Bu kontrol değişik şekillerde
    kullanılabilir. Bir kontrolün değeri ile başka bir kontrolün değerini
    karşılaştırabileceğiniz gibi bir kontrolün değeri ile spesifik (belirli) bir
    değeri de karşılaştırabilirsiniz. Ayrıca kontrolün değerinin belirli bir veri
    tipinde olup olmadığını da denetleyebilirsiniz.

    İki kontrolün değerini
    karşılaştırmak için ControlToValidate ile birlikte ControlToCompare
    özelliği de kullanılır. İki değer aynı değilse hata mesajı gösterilir.









    İki kontrolün değerini
    karşılaştırma

    class=HTML_Element>< class=HTML_ElementName>asp:CompareValidator
    id="cvParola" runat= class=HTML_AtributListValues>"server"

    ControlToValidate= class=HTML_AtributListValues>"txtParola1" ControlToCompare= class=HTML_AtributListValues>"txtParola2"
    ErrorMessage= class=HTML_AtributListValues>"Parolalar aynı
    olmalıdır"/>

    Bir
    kontrol ile özel bir değeri karşılaştırmak içinse ValueToCompare özelliği
    kullanılır.









    Kontrolün değeri ile özel bir değeri
    karşılaştırma

    class=HTML_Element>< class=HTML_ElementName>asp:CompareValidator
    id="cvParola" runat= class=HTML_AtributListValues>"server"

    ControlToValidate= class=HTML_AtributListValues>"txtParola" ValueToCompare= class=HTML_AtributListValues>"parola"
    ErrorMessage= class=HTML_AtributListValues>"Parolayı yanlış
    girdiniz"/>

    Gördüğünüz
    gibi txtParola kontrolünün değeri ile ValueToCompare özelliğinin değerini bu
    kontrol ile karşılaştırabiliyoruz. Ben size örnek vermek için parola denetlemesi
    yapan bir CompareValidator kullandım ama programcının belirleyeceği parola
    kaynak kodda görüneceği için pek güvenilir bir yöntem olmaz. Nasıl
    kullanacağınız size bağlı..









    Kontrolün değerinin veri türünü
    denetleme

    class=HTML_Element>< class=HTML_ElementName>asp:CompareValidator
    id="cvParola" runat= class=HTML_AtributListValues>"server"

    ControlToValidate= class=HTML_AtributListValues>"txtParola"
    ErrorMessage= class=HTML_AtributListValues>"Sayısal bir değer girmelisiniz"

    Operator="DataTypeCheck"
    Type= class=HTML_AtributListValues>"Integer"/>

    Bu
    CompareValidator kontrolü txtParola kontrolünün değerinin "Integer" türünde
    olmasını ister. CompareValidator bu denetlemeyi txtParola ''nın değerini Type
    özelliğinde belirtilen veri türüne dönüştürmeyi deneyerek yapar. txtParola ''ya
    girilen değer "Integer" ''e dönüştürülemiyorsa "InValid" (uygunsuz) bir durum söz
    konusu olduğuna karar verilir ve hata gösterilir. Ayrıca Operator özelliğine
    DataTypeCheck değeri verilerek veri türü kontrolü yapılmak istendiği
    belirtilir.


    size=2>RangeValidator

    RangeValidator ile denetlenen
    kontrolün değerinin belli bir aralıkta olup olmadığı kontrol edilir.
    MinimumValue ve MaximumValue özellikleri ile değerin hangi sayı
    aralığında olabileceği belirtilir.









    RangeValidator

    class=HTML_Element>< class=HTML_ElementName>asp:RangeValidator
    id="rvNumara" runat= class=HTML_AtributListValues>"server"

    ControlToValidate= class=HTML_AtributListValues>"txtNumara" ErrorMessage= class=HTML_AtributListValues>"Küçük veya büyük oldu"

    MinimumValue="2"
    MaximumValue= class=HTML_AtributListValues>"8"/>


    size=2>CustomValidator

    ASP.NET ''in web programcısına
    sunduğu validation kontrolleri yetersiz kaldığında CustomValidator imdata koşar.
    CustomValidator ''ın görevi programcı tarafında yazılan bir sub routine (alt
    program) ile verilir. Denetlemenin sonucu da sub routine içerisinde belirtilir.










    CustomValidator

    class=HTML_Element><script class=HTML_AtributList> runat="server"
    language="vb"> class=HTML_CodeInServerSideBlock>
    Sub ParolayıKontrolEt(Sender As class=cs_k>Object, E As ServerValidateEventArgs)
    class=cs_k>if E.Value = "parola" or E.Value =
    "sifre" then
    E.IsValid = True
    class=cs_k>else
    E.IsValid = False
    end class=cs_k>if
    End Sub
    </ class=HTML_ElementName>script class=HTML_AtributList>>
    < class=HTML_ElementName>form runat= class=HTML_AtributListValues>"server">
    class=HTML_Element><asp:TextBox class=HTML_AtributList> id="txtParola"
    runat= class=HTML_AtributListValues>"server"/>
    class=HTML_Element>< class=HTML_ElementName>asp:CustomValidator
    id="cvParola" runat= class=HTML_AtributListValues>"server"

    ControlToValidate= class=HTML_AtributListValues>"txtParola" ErrorMessage= class=HTML_AtributListValues>"hata"
    OnServerValidate= class=HTML_AtributListValues>"ParolayıKontrolEt"/> class=HTML_Element><br class=HTML_AtributList>>
    < class=HTML_ElementName>asp:Button id= class=HTML_AtributListValues>"btnOk" runat= class=HTML_AtributListValues>"server" text= class=HTML_AtributListValues>"Giris"/>
    class=HTML_Element></form class=HTML_AtributList>>

    CustomValidator
    kontrolüne ControlToValidate özelliğinde denetlenecek input kontrolünün id ''si
    verilir. OnServerValidate özelliğine ise denetlemeyi yapacak sub routine
    ''in ismi yazılır. Bu sub iki parametre alır ve ikinci parametre
    ServerValidateEventArgs sınıfının bir örneğidir. Bu nesne ile denetlemeyi
    yapan validator kontrolünün özelliklerine ve yöntemlerine ulaşılabilir. If
    kontrolüyle birlikte validator kontrolü "valid" veya "invalid" yapılır.


    Her ne kadar CustomValidator kontrolü işini server tarafında yapacak
    olsa da, ASP.NET otomatik olarak denetleme işini yapacak JavaScript kodunu
    yazar. Bu kodların görünmesini engelleyecek ve böylece güvenliği bir kademe
    artırabilecek seçenekler detaya girdiği için daha ileride yer vereceğim.



    Validation kontrolleri

    alt="Validation örneğine ait ekran görüntüsü.."
    src="/cgi-bin/files/2002082_ornek6.gif" width=509>



    Sonuç

    Validation
    (Geçerlilik) kontrolleri web programcılarının veriyi kontrol etmesini
    kolaylaştırıyor. Her türlü veri giriş formunun doldurulmasında ziyaretçinin
    bilerek/bilmeyerek yanlış formatta bilgi girmesi bu yolla engellenebiliyor.
    Klasik ASP ''de bu iş için uzun süre harcanıp karmaşık kodlar yazılırken ASP.NET
    ile birlikte bu işkence ortadan kalkıyor.



    Formdaki herhangi bir validation kontrolü, denetlediği
    input kontrolünün değerinin geçerli olmadığını düşünürse, formun gönderilmesini
    sağlayan buton pasifleşir. Tıklanabilir ama görevini yapamaz. Tüm alanlar
    geçerli olduğunda buton yeniden aktif olur.


    RequiredFieldValidator, RegularExpressionValidator,
    RangeValidator, CompareValidator ve CustomValidator bu makalemizin konusunu
    oluşturdu. Server taraflı CustomValidator örneği kullanarak basit bir örnek
    yaptım. Client (istemci) taraflı CustomValidator örneğini ise başka bir yazıda
    vereceğim. Ayrıca diğer bir validation kontrolü olan ValidationSummary
    hakkında da başka bir yazıda bahsedeceğim.

    Yazan: Muhammed C. Tahiroğlu

    No description. Please complete your profile.
  • Comments (0) Trackbacks (0)

    No comments yet.


    Leave a comment


    No trackbacks yet.

    Sayfalar

    Kısımlar

    Desteklediklerimiz

    Ay bazında arşiv

    Haberleşme