Form_validation Kütüphanesi ve set_value Sorunu

Form_validation Kütüphanesi ve set_value Sorunu Form_validation kütüphanesi hemen hemen her projenin vazgeçilmezleri arasında yer alıyor. Formdan gelen verileri zahmetsizce doğrulayıp gerekirse filtreleme işlemlerini yapıyor.

Formlarla çalışırken kullandığımız bir diğer cankurtaran ise form helper, özellikle de set_value fonksiyonu. set_value fonksiyonu adından da anlaşılacağı üzere önceki sayfadan gelen POST verileriyle form alanlarını doldurmaya yarıyor. Bir örnekle açıklarsak daha anlaşılır olur sanırım. Diyelim ki sayfalarınızda yorum formu var. İsim, e-posta ve yorum alanlarının zorunlu olarak doldurulmasını istiyorsunuz. Fakat formda yer alan url alanını zorunlu tutmak istemiyorsunuz. Kullanıcı formu doldurup gönderiyor, fakat bilgilerden birini veya bir kaçını eksik veya hatalı doldurdu. set_value burada devreye girerek kullanıcının yazdığı verilerle form alanlarını tekrar doldurarak kullanıcıyı formdaki tüm alanları tekrar doldurma zahmetinden kurtarıyor. Kullanımı ise şu şekilde

set_value('input_adı','Varsayılan değer');

set_value hem Form_validation kütüphanesiyle, hem de Form_validation kütüphanesinin kullanılmadığı durumlarda kullanabiliyor. Form_validation kütüphanesini kullanmadığımız durumlarda set_value hiç bir problem olmaksızın görevini yerine getiriyor. Fakat ikisini bir arada kullanmaya kalktığımızda ufak bir eksikliklikle karşılaşıyoruz. Eminim bunu bir çok geliştirici farketmiyor.

Sorunlu set_value fonksiyonu

function set_value($field = '', $default = '')
    {
        if (FALSE === ($OBJ = & _get_validation_object()))
        {
            if (!isset($_POST[$field]))
            {
                return $default;
            }

            return form_prep($_POST[$field], $field);
        }

        return form_prep($OBJ->set_value($field, $default), $field);
    }

Sorun tam olarak Form_validation kuralı yazmadığımız form elemanlarında ortaya çıkıyor ve kullanıcı veri girişi yapmış olsa bile girdiği değeri 2. aşamada göremiyor. Yani yukarıda verdiğimiz örnekteki url alanında. Fonksiyonu çağırdığımızda önce Form_validation kullanılıyormuyuz ona bakıyor. Kullanmıyorsak doğrudan POST verilerini kullanarak işlemi gerçekleştiriyor. Kullanıyorsak doğrudan Form_validation kütüphanesindeki set_value metodu ile işlem yapıyor. Fakat o alan için kural yazmamışsak doğal olarak hiçbir veri bulamıyor.

function set_value($field = '', $default = '')
{
    if (!isset($_POST[$field]))
    {
        return $default;
    }

    if (FALSE === ($OBJ = & _get_validation_object()))
    {
        return form_prep($_POST[$field], $field);
    }

    return form_prep($OBJ->set_value($field, $_POST[$field]), $field);
}

Üstte yazdığım fonksiyon bu sorunu çözüyor. Hali hazırda application/helpers klasöründe MY_form_helper.php dosyanız yoksa oluşturup yukarıdaki fonksiyonu ekleyerek problemi giderebilirsiniz.

Bu yazı en son 03 Aralık 2011 tarihinde düzenlenmiştir ve güncelliğini yitirmiş olabilir.

  • Tahir Uyanık

    Merhaba Mustafa Bey;
    Bloğunuzu düzenli olarak takip etmeye çalışıyorum. Çok başarılı makaleler hazırlıyorsunuz.
    Paylaşımlarınız için teşekkür ederim.

    Yaşamakta olduğum bir sıkıntıyı sizinle paylaşmak ve çözüme kavuşturmama yardımcı olmanızı rica ediyorum.
    Codeigniter Google Grubunda sorunumu paylaştım. (https://groups.google.com/foru... fakat cevap veren olmadı.

    Yardımcı olursanız çok sevinirim.

    İyi çalışmalar.

blog comments powered by Disqus

© Mustafa Navruz 2011 0.0167 sn.

^ Başa Dön