formDogrula

php ile yazılmış form doğrulama sınıfı

1. çoklu form alanlarını doğrulatma

HTML formlarında aynı "name" değerine sahip birden fazla form alanı olabilmektedir. Bu sayede form alanlarını grup grup ayırabilme imkanımız doğar. Örnek olarak "resimler" grubundaki form alanlarına "resim", videolar grubundaki form alanlarına da "video" ismi vermiş olalım. Buna göre aşağıdaki kodlarla örnek bir form hazırlayalım. Kodlardaki "name" değerlerine dikkat ediniz !

<form name="coklu" method="post" action="coklu_form_isle.php">
    <fieldset><legend>Resimler:</legend>
        <p> <label>Resim 1:</label> <input type="text" name="resim[]" /> </p>
        <p> <label>Resim 2:</label> <input type="text" name="resim[]" /> </p>
        <p> <label>Resim 3:</label> <input type="text" name="resim[]" /> </p>
    </fieldset>
    <fieldset><legend>Videolar:</legend>
        <p> <label>Video 1:</label> <input type="text" name="video[]" /> </p>
        <p> <label>Video 2:</label> <input type="text" name="video[]" /> </p>
    </fieldset>
        <p> <button type="submit">Gönder</button> </p>
</form>

Bu kodları coklu_form.html olarak kaydedin. Ekran çıktısı aşağıdaki gibi olacaktır:

çoklu form

Ve şimdi bu çoklu formu doğrulamaya geçmeden önce bir senaryo hazırlayalım:

  • Resimler:
    1. gerekli olmalı
    2. minimum 5 karakter uzunluğunda olmalı
    3. sonu ".jpg, .gif veya .png" ifadelerinden birisiyle bitmeli
  • Videolar:
    1. gerekli olmalı
    2. minimum 5 karakter uzunluğunda olmalı
    3. sonu ".avi veya .flv" ifadelerinden birisiyle bitmeli

Şimdi de formumuzun gönderileceği coklu_form_isle.php dosyasına aşağıdaki kodları yazalım:

<?php
  require './formDogrula/eb.formDogrula.php';

  // yeni bir nesne oluşturuyoruz
  $fdo = new formDogrula('coklu', 'post');

  // kurallar
  $fdo->kurallar(
  array('resim[]', 'Resimler', 'gerekli|min_uzunluk[5]|ile_biter[.jpg,.gif,.png]'),
  array('video[]', 'Videolar', 'gerekli|min_uzunluk[5]|ile_biter[.avi,.flv]')
  );

  // formu doğrulama işlemini yap ve sonucu ekrana yazdır
  if( $fdo->dogrulat() ) {
      echo 'form başarıyla doğrulandı';
  } else {
      echo 'form doğrulama başarısız!';
      // oluşan hataları ekrana yazdır
      $fdo->yazHatalar('<li>', '</li>');
  }
?>

Gördüğünüz gibi normal formları doğrularken yaptığımız işlemlerden neredeyse hiç farkı yok. Dikkat etmeniz gereken tek nokta, HTML formunda "name" değeri nasıl yazılıysa kural isimlerini de aynen o şekilde yazmamız gerektiğidir. Bu formu boş olarak göndermeye çalışırsak alttaki çıktıyı alırız:

Doğrulanmış olan form değerlerine nasıl erişeceğiz?

Yine formSon isimli metodu kullanarak istediğimiz gruptaki form alanlarına erişebiliriz. İstersek bütün grup değerlerine tek hamlede erişebilir, istersek de grup alanlarına tek tek erişebiliriz.

<?php
  require './formDogrula/eb.formDogrula.php';

  // yeni bir nesne oluşturuyoruz
  $fdo = new formDogrula('coklu', 'post');

  // kurallar
  $fdo->kurallar(
  array('resim[]', 'Resimler', 'gerekli|min_uzunluk[5]|ile_biter[.jpg,.gif,.png]'),
  array('video[]', 'Videolar', 'gerekli|min_uzunluk[5]|ile_biter[.avi,.flv]')
  );

  // formu doğrulama işlemini yap ve sonucu ekrana yazdır
  if( $fdo->dogrulat() ) {
      echo 'form başarıyla doğrulandı';
  } else {
      echo 'form doğrulama başarısız!';
      // oluşan hataları ekrana yazdır
      $fdo->yazHatalar('<li>', '</li>');
  }

  // "resim" grubundan gelen bütün değere bak
  $fdo->bak( $fdo->formSon('resim[]') );

  // "resim" grubundan gelen değerlere tek tek eriş
  echo 'resim 1: '. $fdo->formSon('resim[0]');
  echo '<br />';
  echo 'resim 2: '. $fdo->formSon('resim[1]');
  echo '<br />';
  echo 'resim 3: '. $fdo->formSon('resim[2]');  
?>

Bu yazdığımız kodlar, coklu_form.html dosyasındaki formu gerektiği gibi doldurup gönderirsek alttakine benzer bir çıktı verecektir: