Berbagi itu indah

Validasi Form CodeIgniter: Dari Awal Sampai Selesai

Sebagai pengembang aplikasi web, validasi form adalah bagian penting dari pekerjaan Anda, dan seharusnya tidak diremehkan karena dapat menyebabkan kelemahan keamanan pada aplikasi Anda. Anda harus mempertimbangkannya sebagai suatu keharusan jika Anda berusaha memberikan pengalaman pengguna akhir yang profesional.

Pada artikel ini, kita akan melalui perpustakaan validasi form bawaan dalam kerangka CodeIgniter.

Berikut adalah highlight dari artikel hari ini:

Validasi form dasar
Cascading dan prepping
Pesan kesalahan kustom
Validasi callback kustom
Konfigurasi validasi

Mulai dari Aturan Validasi Dasar

Pada bagian ini, kita akan memulai konsep validasi form dasar di CodeIgniter.

Sebagai bagian dari itu, kita perlu membuat file controller dan view. File controller memuat perpustakaan validasi dan menjalankan aturan validasi terhadap data form yang diajukan. File view menampung kode XHTML form, dan kita akan tetap sederhana untuk kebutuhan kita.

Mari kita lanjutkan dan membuat kedua file ini.

Buat file controller application/controllers/Validation.php dengan konten berikut.


load->helper(array('form', 'url'));
         
        // load form_validation library
        $this->load->library('form_validation');
    }
     
    public function basic()
    {
        // basic required field
        $this->form_validation->set_rules('text_field', 'Text Field One', 'required');
         
        // basic required field with minimum length
        $this->form_validation->set_rules('min_text_field', 'Text Field Two', 'required|min_length[8]');
         
        // basic required field with maximum length
        $this->form_validation->set_rules('max_text_field', 'Text Field Three', 'required|max_length[20]');
         
        // basic required field with exact length
        $this->form_validation->set_rules('exact_text_field', 'Text Field Four', 'required|exact_length[12]');
         
        // basic required field but alphabets only
        $this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha');
         
        // basic required field but alphanumeric only
        $this->form_validation->set_rules('alphanumeric_text_field', 'Text Field Six', 'required|alpha_numeric');
         
        // basic email field with email validation
        $this->form_validation->set_rules('valid_email_field', 'Email Field', 'required|valid_email');
         
        // password field with confirmation field matching
        $this->form_validation->set_rules('password_field', 'Password One', 'required');
        $this->form_validation->set_rules('password_confirmation_field', 'Password Confirmation Field', 'required|matches[password_field]');
         
        // basic required field with IPv4 validation
        $this->form_validation->set_rules('valid_ip_field', 'Valid IP Field', 'required|valid_ip[ipv4]');
         
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('validate_form');
        }
        else
        {
            // load success template...
            echo "It's all Good!";
        }
    }
     
    public function cascade()
    {
        // basic required field with cascaded rules
        $this->form_validation->set_rules('text_field', 'Text Field One', 'required|alpha|min_length[8]|max_length[20]');
          
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('validate_form');
        }
        else
        {
            // load success template...
            echo "It's all Good!";
        }
    }
     
    public function prep()
    {
        // basic required field with trim prepping applied
        $this->form_validation->set_rules('min_text_field', 'Text Field Two', 'trim|required|min_length[8]');
         
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('validate_form');
        }
        else
        {
            // load success template...
            echo "It's all Good!";
        }
    }
     
    public function custom_message()
    {
        // basic required field with trim prepping applied
        $this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha',
            array('required'=>'Please enter Text Field Five!','alpha'=>'Only alphabets please!'));
         
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('validate_form');
        }
        else
        {
            // load success template...
            echo "It's all Good!";
        }
    }
     
    public function custom_rule()
    {
        // basic required field with trim prepping applied
        $this->form_validation->set_rules('text_field', 'Text Field Five', 'callback_custom_validation');
         
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('validate_form');
        }
        else
        {
            // load success template...
            echo "It's all Good!";
        }
    }
     
    public function custom_validation($field_value) 
    {
        if ($field_value == '' || $field_value == 'demo')
        {
            $this->form_validation->set_message('custom_validation', "Come on, don't act like spammer!");
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }
     
    public function configuration()
    {
        // if you pass group id, only elements in that group will be validated
        // $this->form_validation->run('group_one')
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('validate_form');
        }
        else
        {
            // load success template...
            echo "It's all Good!";
        }
    }
}

Selanjutnya, buatlah view file application/views/validate_form.php seperti gambar di bawah ini.



    
    Form Validation Example
    
    
     
    
        

Form Validation Example

Text Field One (Required)
Text Field Two (Minimum length)
Text Field Three (Maximum length)
Text Field Four (Exact length)
Text Field Five (Alphabets only)
Text Field Six (Alphanumeric only)
Email Field
Password Field
Password Confirmation Field
IP Field

Dengan konfigurasi ini, Anda akan melihat form saat Anda menjalankan http://your-codeigniter-site/validation/basic di browser Anda. Cobalah untuk mengirimkannya tanpa mengisi salah satu field form, dan Anda akan melihat daftar pesan kesalahan! Jangan khawatir jika Anda tidak mengerti cara kerjanya sama sekali karena kita akan membahas setiap potongan kode secara rinci.

Cerita dimulai dengan metode __construct.


public function __construct() 
{
    parent::__construct();
     
    // load form and url helpers
    $this->load->helper(array('form', 'url'));
       
    // load form_validation library
    $this->load->library('form_validation');
}

Saya selalu memilih untuk memuat perpustakaan umum dan pembantu di constructor dari controller itu sendiri karena ini adalah kebiasaan yang bagus untuk menghindari duplikasi kode di tempat lain dalam metode controller. Itulah yang telah kita lakukan di atas—kita memuat form dan url pembantu sehingga kita dapat menggunakan metode utilitas yang disediakan oleh pembantu tersebut selama sisa aplikasi.

Selanjutnya, kita memuat perpustakaan validasi form sehingga memungkinkan kita untuk mengikat aturan validasi form pada elemen-elemen form, seperti yang akan kita lihat di bagian berikutnya.

Mari kita melalui kode dari metode basic. Apa yang dilakukan metode ini? Jika Anda memanggilnya dengan metode GET, itu akan menampilkan form-nya, dan jika dipanggil menggunakan metode POST, ini akan menerapkan aturan validasi pada data yang dikirimkan dan menampilkan pesan kesalahan, jika ada, beserta form-nya.

public function basic()
{
    // basic required field
    $this->form_validation->set_rules('text_field', 'Text Field One', 'required');
     
    // basic required field with minimum length
    $this->form_validation->set_rules('min_text_field', 'Text Field Two', 'required|min_length[8]');
     
    // basic required field with maximum length
    $this->form_validation->set_rules('max_text_field', 'Text Field Three', 'required|max_length[20]');
     
    // basic required field with exact length
    $this->form_validation->set_rules('exact_text_field', 'Text Field Four', 'required|exact_length[12]');
     
    // basic required field but alphabets only
    $this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha');
     
    // basic required field but alphanumeric only
    $this->form_validation->set_rules('alphanumeric_text_field', 'Text Field Six', 'required|alpha_numeric');
     
    // basic email field with email validation
    $this->form_validation->set_rules('valid_email_field', 'Email Field', 'required|valid_email');
     
    // password field with confirmation field matching
    $this->form_validation->set_rules('password_field', 'Password One', 'required');
    $this->form_validation->set_rules('password_confirmation_field', 'Password Confirmation Field', 'required|matches[password_field]');
     
    // basic required field with IPv4 validation
    $this->form_validation->set_rules('valid_ip_field', 'Valid IP Field', 'required|valid_ip[ipv4]');
     
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('validate_form');
    }
    else
    {
        // load success template...
        echo "It's all Good!";
    }
}

Karena kita sudah memasukkan perpustakaan validasi form di constructor, Anda dapat mengaksesnya dengan menggunakan konvensi $this->form_validation.

Metode set_rules digunakan untuk mengikat aturan validasi pada field form. Umumnya, dibutuhkan tiga argumen:

Argumen pertama adalah nama field form.
Argumen kedua adalah label yang digunakan untuk referensi field form saat menampilkan pesan kesalahan untuk field tersebut.
Argumen ketiga adalah peraturan yang ingin Anda terapkan pada field form. Perpustakaan validasi form dilengkapi dengan banyak aturan bawaan yang bisa Anda gunakan.

Mari kita melalui beberapa peraturan ini karena kita telah menggunakannya dalam metode dasar.

Salah satu aturan yang paling sering digunakan adalah aturan required, yang membuat field form wajib diisi.

// basic required field
$this->form_validation->set_rules('text_field', 'Text Field One', 'required');

Selanjutnya, jika Anda ingin membuat field form dengan panjang tertentu, Anda dapat menggunakan aturan min_length dan max_length.

// basic required field with minimum length
$this->form_validation->set_rules('min_text_field', 'Text Field Two', 'required|min_length[8]');
       
// basic required field with maximum length
$this->form_validation->set_rules('max_text_field', 'Text Field Three', 'required|max_length[20]');

Yang pertama memastikan bahwa field form min_text_field adalah field wajib dan pengguna harus memasukkan setidaknya delapan karakter di dalamnya. Yang kedua menempatkan batasan pada karakter maksimal yang bisa dimasukkan di field teks max_text_field, selain menjadikannya sebagai field wajib.

Anda mungkin telah memperhatikan bahwa kita telah menggunakan operator | untuk menerapkan beberapa peraturan sekaligus. Ini disebut cascading, dan kita akan kembali lagi nanti.

Di sisi lain, jika Anda ingin membuat field form dengan panjang yang tepat, Anda dapat menggunakan aturan exact_length.

// basic required field with exact length
$this->form_validation->set_rules('exact_text_field', 'Text Field Four', 'required|exact_length[12]');

Bagaimana jika Anda ingin memvalidasi field form ke abjad atau alfanumerik saja?


// basic required field but alphabets only
$this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha');
       
// basic required field but alphanumeric only
$this->form_validation->set_rules('alphanumeric_text_field', 'Text Field Six', 'required|alpha_numeric');

Kandidat berikutnya adalah validasi email.

// basic email field with email validation
$this->form_validation->set_rules('valid_email_field', 'Email Field', 'required|valid_email');

Selanjutnya, aturan matches memungkinkan Anda membandingkan nilai field form dengan nilai field form yang lain. Contoh terbaiknya adalah field password, yang harus sesuai dengan field konfirmasi password saat Anda mengirimkan form.

// password field with confirmation field matching rule
$this->form_validation->set_rules('password_field', 'Password One', 'required');
$this->form_validation->set_rules('password_confirmation_field', 'Password Confirmation Field', 'required|matches[password_field]');

Contoh terakhir dalam metode dasar kita adalah tentang memvalidasi alamat IP.

Aturan valid_ip memvalidasi alamat IP terhadap argumen pertama yang dikirimkan. Dalam contoh berikut, kita hanya mencari jenis alamat IP ipv4!

// basic required field with IPv4 validation
$this->form_validation->set_rules('valid_ip_field', 'Valid IP Field', 'required|valid_ip[ipv4]');

Jadi, sajauh itu validasi dasar yang diperhatikan di CodeIgniter.

Bagaimana Cascading dan Prepping Bekerja

Pada bagian ini, kita akan mengeksplorasi cascading dan prepping, yang memungkinkan Anda menggabungkan beberapa aturan validasi dalam satu kali jalan.

Sebenarnya, saya akan mengatakan bahwa kita telah benar-benar menggunakan cascading dalam contoh kita sebelumnya. Ingatlah bahwa operator pipa yang digunakan untuk menggabungkan beberapa peraturan—dan ya, aturan validasi yang disebut cascading.

Ambil kode dari metode cascade.


public function cascade()
{
    // basic required field with cascaded rules
    $this->form_validation->set_rules('text_field', 'Text Field One', 'required|alpha|min_length[8]|max_length[20]');
      
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('validate_form');
    }
    else
    {
        // load success template...
        echo "It's all Good!";
    }
}


Seperti ditunjukkan pada contoh di atas, kita telah menerapkan empat aturan validasi yang dipisahkan oleh operator | ke kotak teks text_field. Jadi itu harus melalui setiap aturan untuk validasi form agar berhasil dalam kasus ini!

Cobalah dan lihat bagaimana cara kerjanya!

Selanjutnya, ada prepping yang memungkinkan Anda menerapkan operasi tertentu pada data yang sedang dikirim. Lebih sering daripada tidak, Anda ingin menghapus spasi di depan dan di belakang pada data yang dikirim pengguna. Mungkin hal pertama yang terlintas dalam pikiran Anda dalam kasus ini adalah dengan menggunakan fungsi trim, dan kabar baiknya adalah Anda bisa menggunakannya!

Itulah sebenarnya yang dilakukan metode prep kita


public function prep()
{
    // basic required field with trim prepping applied
    $this->form_validation->set_rules('min_text_field', 'Text Field Two', 'trim|required|min_length[8]');
 
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('validate_form');
    }
    else
    {
        // load success template...
        echo "It's all Good!";
    }
}


Seperti yang Anda lihat, kita telah menggunakan trim kata-kata selain aturan validasi. Jadi datanya dipangkas dulu, dan kemudian akan melewati aturan validasi lainnya. Sebenarnya, Anda bisa menggunakan fungsi PHP yang mengambil satu argumen sesuai dokumentasi CodeIgniter.

Coba jalankan contoh kita dengan menambahkan beberapa spasi tambahan, dan lihat bagaimana kelanjutannya.

Kustomisasi Pesan Kesalahan

Jika Anda memiliki kesempatan untuk menjalankan contoh di atas, mungkin Anda telah memperhatikan bahwa pesan kesalahan yang ditampilkan kepada pengguna cukup sistematis dan dihasilkan oleh mesin. Mungkin Anda ingin lebih kreatif dan mengubahnya dalam kasus tertentu.

Mari kita lihat bagaimana Anda bisa mengubah pesan kesalahan untuk aturan validasi apapun. Tarik kode metode custom_message.


public function custom_message()
{
    // field with custom error message
    $this->form_validation->set_rules('alphabets_text_field', 'Text Field Five', 'required|alpha',
      array('required'=>'Please enter Text Field Five!','alpha'=>'Only alphabets please!'));
 
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('validate_form');
    }
    else
    {
        // load success template...
        echo "It's all Good!";
    }
}

Harap perhatikan argumen keempat yang diberikan pada metode set_rules. Ini berisi serangkaian pesan validasi kustom untuk setiap aturan validasi, dan kunci setiap item array adalah aturan validasi itu sendiri.

array(
    'required'=>'Please enter Text Field Five!',
    'alpha'=>'Only alphabets please!'
)

Cobalah, dan Anda harus melihat pesan kesalahan kustom kita! Cukup keren, ya?

Callback Validasi Kustom

Meskipun perpustakaan validasi bawaan menyediakan beberapa aturan validasi, selalu ada kebutuhan untuk membuat yang kustom dalam pekerjaan pengembangan sehari-hari Anda. Itulah yang akan kita bahas di bagian ini.

Untuk mendemonstrasikannya, kita akan membuat callback validasi kustom, dan nanti kita akan melihat bagaimana menggunakannya bersamaan dengan metode set_rules.

Untuk mulai dengannya, mari kita lihat sekilas metode custom_rule.

public function custom_rule()
{
    // field with custom validation callback passed
    $this->form_validation->set_rules('text_field', 'Text Field Five', 'callback_custom_validation');
 
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('validate_form');
    }
    else
    {
        // load success template...
        echo "It's all Good!";
    }
}

ni tidak berbeda dengan pemanggilan metode set_rules biasa kecuali bahwa kita telah menyediakan callback validasi kustom custom_validation bukannya aturan validasi inti. Yang penting untuk diperhatikan di sini adalah Anda perlu awalan calback validasi kustom dengan callback_ saat Anda mengirimkannya sebagai argumen.

Selanjutnya, mari kita terapkan callback validasi kustom.

public function custom_validation($field_value) 
{
    if ($field_value == '' || $field_value == 'demo')
    {
        $this->form_validation->set_message('custom_validation', "Come on, don't act like spammer!");
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

Bila callback validasi kustom Anda dipanggil, nilai yang dimasukkan oleh pengguna akan dikirimkan sebagai argumen pertama. Sehingga $field_value berisi nilai yang dimasukkan oleh pengguna, yang dengannya Anda dapat menerapkan logika validasi kustom Anda.

Pada contoh di atas, Anda melihat pesan kesalahan jika Anda memasukkan nilai kosong atau demo di field teks Text Field Five. Penting untuk diperhatikan bahwa ketika Anda menetapkan pesan kesalahan menggunakan metode set_message, argumen pertama adalah nama metode callback validasi kustom itu sendiri.

Dan itulah kisah callback validasi kustom.

Yang tidak kalah penting, adalah konfigurasi validasi yang patut mendapat perhatian saat kita bergerak menuju kesimpulan artikel ini.

Konfigurasi Validasi

Sebagai pengembang CodeIgniter, Anda seharusnya sudah terbiasa dengan direktori config, yang memungkinkan Anda untuk mengkonfigurasi berbagai aspek aplikasi CodeIgniter Anda.

Sebagai contoh, database.php memungkinkan Anda untuk menentukan pengaturan yang berhubungan dengan database, sementara autoload.php memungkinkan Anda menentukan komponen yang harus dimuat secara otomatis saat bootstrap sebuah aplikasi.

Dengan cara yang sama, Anda bisa membuat file form_validation.php di bawah direktori config dan menggunakan file tersebut untuk menentukan aturan validasi tingkat aplikasi yang dapat digunakan secara global. Jika terdengar asing bagi Anda, tidak ada cara yang lebih baik untuk memahaminya daripada benar-benar melihat contoh praktis.

Buat file application/config/form_validation.php dengan konten berikut.

 'text_field',
        'label' => 'Text Field One',
        'rules' => 'required'
    ),
    array(
        'field' => 'min_text_field',
        'label' => 'Text Field Two',
        'rules' => 'required|min_length[8]'
    ),
    array(
        'field' => 'max_text_field',
        'label' => 'Text Field Three',
        'rules' => 'required|max_length[20]'
    )
);

Sekarang, mari kita lihat seperti apa metode configuration kita.


public function configuration()
{
    // if you pass group id, only elements in that group will be validated
    // $this->form_validation->run('group_one')
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('validate_form');
    }
    else
    {
        // load success template...
        echo "It's all Good!";
    }
}

Coba jalankan http://your-codeigniter-site/validation/configuration dan kirimkan form kosong. Anda akan melihat pesan kesalahan untuk tiga field form! Tapi tunggu, dari mana asalnya, karena kita belum membuat aturan validasi apa pun dalam metode konfigurasi kita?

Pengguna dengan mata yang tajam akan memperhatikan bahwa secara otomatis diambil dari file konfigurasi validasi yang didefinisikan pada application/config/form_validation.php. Bukankah itu menakjubkan? Hal ini memungkinkan Anda untuk memusatkan aturan di satu tempat dan mengurangi duplikasi kode dalam metode action.

Sebenarnya, Anda bisa mengelompokkan peraturan dan menerapkan validasi ke field dari hanya kelompok tertentu saja. Mari kita lihat bagaimana melakukannya.

Ganti kode di application/config/form_validation.php dengan berikut ini.

 array(
        array(
            'field' => 'text_field',
            'label' => 'Text Field One',
            'rules' => 'required'
        )
    ),
    'group_two' => array(
        array(
            'field' => 'min_text_field',
            'label' => 'Text Field Two',
            'rules' => 'required|min_length[8]'
        ),
        array(
            'field' => 'max_text_field',
            'label' => 'Text Field Three',
            'rules' => 'required|max_length[20]'
        )
    )
);

Dalam metode configuration Anda, cari baris berikut:

if ($this->form_validation->run() == FALSE)

Dan ganti dengan:

if ($this->form_validation->run('group_one') == FALSE)

Sekarang, cobalah mengirimkan form kosong, dan Anda akan melihat kesalahan hanya untuk Text Field One. Itu karena kita telah mengirimkan group_one sebagai id grup, jadi hanya elemen dalam grup tersebut yang akan divalidasi.

Akhirnya, mari kita lihat jenis konfigurasi yang memungkinkan Anda menentukan aturan berdasarkan URL.

Ganti kode di application/config/form_validation.php dengan kode berikut.

$config = array(
    'validation/configuration' => array(
        array(
            'field' => 'max_text_field',
            'label' => 'Text Field Three',
            'rules' => 'required|max_length[20]'
        )
    )
);

Dalam konfigurasi jenis ini, Anda perlu menggunakan kombinasi dari nama controller dan nama metode yang dipisahkan oleh karakter /. Dengan cara ini, Anda bisa menentukan aturan untuk beberapa metode action sekaligus.

Sekarang, Anda melihat pesan kesalahan untuk Text Field Three jika Anda mencoba mengirimkan form kosong di http://your-codeigniter-site/validation/configuration.

Dan itu mengakhiri cerita tentang konfigurasi validasi dan artikel ini juga!

Kesimpulan

Pada artikel ini, kita benar-benar membahas validasi form di CodeIgniter.

Kita memulai perjalanan kita dengan aturan validasi dasar, dan kemudian kita beralih ke topik yang lebih lanjut seperti cascading, prepping, dan validasi konfigurasi.

Saya harap Anda menikmati artikel ini

Anda mungkin juga berminat
Loading...