CODEIGNITER 3X
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 9: Tìm Hiểu Library Form Validation

Trong bài này bạn sẽ được học:

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
  1. Sử dụng form validation kiểm tra dữ liệu
  2. Xuất các thông báo lỗi ra ngoài view

Lưu ý:
Tôi sử dụng Codeigniter version 2.1.4.
Tên folder của tôi là citest cho bài viết này.


Kết thúc bài học trước, chúng ta đã cùng nhau tìm hiểu xong khái niệm cơ bản về form helper , ở bài này sẽ đi sâu vào vấn đề thực tế hơn trong việc kiểm soát dữ liệu người dùng nhập vào textbox, tạo ra những tập luật để kiểm duyệt dữ liệu, ví dụ dữ liệu này bắt buộc phải là con số, email này phải đúng định dạng…vv giống như các bài trước để có thể thao tác với bất kỳ library nào trong CI, bắt buộc các bạn phải load libs của nó ra.

Load library form validation

Cho tới bài viết này, chắc hẵn các bạn đều đã biết rõ cách load một library cũng như cú pháp gọi tên từng phương thức để sử dụng, cho nên tôi sẽ không nhắc lại nửa, nếu chẳng may các bạn quên thì có thể xem lại bài Session.

$this->load->library('form_validation')
$this->form_validation->ten_phuong_thuc()
Để có thể nắm bắt vấn đề tốt hơn khi thao tác với form validation tôi sẽ liệt kê một số phương thức hay dùng. thứ nhất là phương thức dùng để tạo ra những cái luật đó là set_rules, tại đây chúng ta phải truyền vào 3 giá trị, tên của textbox, tên khi xuất ra thông báo lỗi, và giá trị quan trọng nhất chính là tập luật mà các bạn muốn đưa ra, ngoài ra có thể đưa ra nhiều tập luật bằng cách sử dụng dấu |.
$this->form_validation->set_rules('username', 'Username', 'required')

  1. required: Yêu cầu phải nhập liệu không được để trống
  2. matches: Yêu cầu password phải trùng khớp nhau
  3. min_length: Giới hạn bao nhiêu ký tự khi nhập vào
  4. max_length: Giới hạn bao nhiêu ký tự khi nhập vào
  5. numeric: Yêu cầu trong textbox phải nhập liệu là con số
  6. valid_email: Email nhập liệu bắt buộc phải đúng định dạng
  7. xss_clean: Xóa XSS của input, bảo mật

Ngoài ra trong user guide của CI còn rất nhiều tập luật khác, các bạn tự tìm hiểu nhé, tôi chỉ liệt kê một số tập luật thường dùng trong thực tế mà thôi, ngoài ra còn một phương thức rất là quan trọng nếu thiếu phương thức này thì xem như các tập luật phía trên bị vô hiệu hóa, vì phương thức run() có nhiệm vụ kiểm tra các tập luật trên có hợp lệ hay không, nếu không hợp lệ nó sẽ trả về kết quả là FALSE, tức là nó sẽ kiểm tra phương thức set_rules nếu một trong tất cả số set_rules mà bạn khai báo bị lỗi thì nó sẽ trả về FALSE đồng thời trả về một cái view nào đó, đồng thời xuất câu thông báo lỗi ra bằng phương thức validation_errors(), phần lý thuyết khô cằn đã trôi qua, để các bạn dễ hình dung hơn chúng ta sẽ bắt đầu với một ví dụ nhỏ.

Kiểm tra nhập liệu với form validation

Tôi sẽ dùng lại controller & view của bài form helper, và trong ví dụ này chúng ta sẽ kiêm tra 3 textbox gồm fullname, password & email.
- Controller:

<?php
class Form extends CI_Controller{
      public function __construct(){
          parent::__construct();
          $this->load->helper(array('url', 'form'));
      }
 
     public function index(){
         $this->load->view("form");
     }
}
?>
- View
<?php
$user=array(
    "name" => "username",
    "size" => "25",
);
$pass=array(
    "name" => "pass",
    "size" => "25",
);
$email=array(
    "name" => "email",
    "size" => "25",
);
$gender1=array(
    "name" => "gender",
    "value" => "m",
    "checked" => TRUE,
);
$gender2=array(
    "name" => "gender",
    "value" => "f",
);
$opt=array(
    "1" => "Viet Nam",
    "2" => "Cambodia",
    "3" => "Malaysia",
);
$note=array(
    "name" => "note",
    "cols" => "40",
    "rows" => "5",
);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>freetuts.net</title>
</head>
  
<body>
 <?php
    echo form_open(base_url()."index.php/form/index");
    echo form_fieldset("Member Register");
    echo form_label("Fullname: ").form_input($user)."<br />";
    echo form_label("Password: ").form_password($pass)."<br />";
    echo form_label("Email: ").form_input($email)."<br />";
    echo form_label("Gender: ").form_radio($gender1)."Male".form_radio($gender2)."Female<br />";
    echo form_label("Country: ").form_dropdown("Country: ", $opt, 1)."<br />";
    echo form_label("Note: ").form_textarea($note)."<br />";
    echo form_label(" ").form_submit("ok",  "Register");
    echo form_fieldset_close();
    echo form_close();
 ?>
</body>
</html>
Công việc bây giờ của chúng ta là dùng form validation để check lỗi nhập liệu, nếu người dùng đã nhấn nút submit thì chúng ta sẽ tiến hành yêu cầu họ phải thao tác theo đúng các tập luật mà chúng ta đưa ra như sau, do ví dụ này chỉ có một action nên việc đầu tiên tôi sẽ load form validation ra,một khi đã load xong library thì chúng ta hoàn toàn có thể sử dụng được toàn bộ các phương thức của nó, phương thức đầu tiên chúng ta sử dụng sẽ là phương thức set_rules(),tên của textbox đầu tiên là fullname và giá trị xuất ra thông báo lỗi sẽ là Full Name, tôi muốn người dùng bắt buộc phải nhập tên vào textbox, vì thế tôi sẽ dùng tập luật required, và tôi không muốn cho họ nhập vào một cái tên quá dài , tôi ép họ phải nhập không được ít hơn 6 ký tự , tôi có phương thức min_length[6], nhớ nếu sử dụng hơn một tập luật thì phải dùng dấu | khai báo tập luật thứ hai, và để kiểm tra xem email có đúng định dạng không tôi sẽ dùng phương thức valid_email, sau khi khai báo tập luật xong chúng ta tiến hành dùng phương thức run() kiểm tra xem các set_rules có hợp lệ hay không, nếu một trong 3 cái yêu cầu trên bị lỗi thì ngay lập tức nó sẽ trả về là FALSE, và tất nhiên chúng ta sẽ đi load lại cái view của form, ngay tại cái view chúng ta sẽ tiến hành xuất ra thông báo lỗi bằng phương thức validation_errors.
<?php
class Form extends CI_Controller{
      public function __construct(){
          parent::__construct();
          $this->load->helper(array('url', 'form'));
      }
 
     public function index(){
         $this->load->library('form_validation');
         $this->form_validation->set_rules('username', 'Full Name', 'required|min_length[6]');
         $this->form_validation->set_rules('pass', 'Pass Word', 'required');
         $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
          
        if($this->form_validation->run() == FALSE){
            $this->load->view("form");
        }
          
     }
}
?>
<?php
    echo validation_errors();
    echo form_open(base_url()."index.php/form/index");
    echo form_fieldset("Member Register");
    echo form_label("Fullname: ").form_input($user)."<br />";
    echo form_label("Password: ").form_password($pass)."<br />";
    echo form_label("Email: ").form_input($email)."<br />";
    echo form_label("Gender: ").form_radio($gender1)."Male".form_radio($gender2)."Female<br />";
    echo form_label("Country: ").form_dropdown("Country: ", $opt, 1)."<br />";
    echo form_label("Note: ").form_textarea($note)."<br />";
    echo form_label(" ").form_submit("ok",  "Register");
    echo form_fieldset_close();
    echo form_close();
 ?>
Toi chạy link localhost/citest/index.php/form để kiểm tra, nếu tôi không nhập bất cứ thứ gì vào textbox mà tôi nhấn nút submit thì ngay lâp tức trình duyệt sẽ trả về kết quả sau.

The Full Name field is required.
The Password field is required.
The Email field is required.


Tức là yêu cầu phải nhập liệu, và nếu như ngay textbox fullname tôi nhập ít hơn 6 ký tự và email tôi điền loạn xà ngầu thì thông báo lỗi sẽ trả về như sau.

The Full Name field must be at least 6 characters in length.
The Email field must contain a valid email address


Việc kiểm tra nhập liệu với form validation thật là dễ dàng phải không các bạn, còn một vấn đề đặt ra ở đây là, nếu tôi muốn việt hóa các câu thông báo lỗi khi xuất ra thì có được không, hoàn toàn có thể nhé.

Việt hóa language form validation

Nói việt hóa cho nó sang chứ thật ra là sửa code trong phần system của nó, rất là đơn giản, ngay tại folder system các bạn tìm đến folder language mở nó ra thấy ngay file form_validation_lang.php, mở file này ra bên trong nó có đoạn code như sau, để ý cái %s nó chính là cái tên bạn đặt khi nó xuất ra thông báo lỗi.

<?php
 
$lang['required']       = "The %s field is required.";
$lang['isset']          = "The %s field must have a value.";
$lang['valid_email']        = "The %s field must contain a valid email address.";
$lang['valid_emails']       = "The %s field must contain all valid email addresses.";
$lang['valid_url']      = "The %s field must contain a valid URL.";
$lang['valid_ip']       = "The %s field must contain a valid IP.";
$lang['min_length']     = "The %s field must be at least %s characters in length.";
$lang['max_length']     = "The %s field can not exceed %s characters in length.";
$lang['exact_length']       = "The %s field must be exactly %s characters in length.";
$lang['alpha']          = "The %s field may only contain alphabetical characters.";
$lang['alpha_numeric']      = "The %s field may only contain alpha-numeric characters.";
$lang['alpha_dash']     = "The %s field may only contain alpha-numeric characters, underscores, and dashes.";
$lang['numeric']        = "The %s field must contain only numbers.";
$lang['is_numeric']     = "The %s field must contain only numeric characters.";
$lang['integer']        = "The %s field must contain an integer.";
$lang['regex_match']        = "The %s field is not in the correct format.";
$lang['matches']        = "The %s field does not match the %s field.";
$lang['is_unique']      = "The %s field must contain a unique value.";
$lang['is_natural']     = "The %s field must contain only positive numbers.";
$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero.";
$lang['decimal']        = "The %s field must contain a decimal number.";
$lang['less_than']      = "The %s field must contain a number less than %s.";
$lang['greater_than']       = "The %s field must contain a number greater than %s.";
?>
Tôi thử việt hóa phần bắt buộc nhập liệu tức là phương thức required đấy các bạn, nhớ là không được bỏ dấu nhé các bạn, viết không dấu, còn về phần viết có dấu tự các bạn tìm hiểu thêm :), tôi f5 lại trình duyệt và thấy kết quả trả về như sau.
$lang['required']       = " %s yeu cau khong duoc bo trong.";
Full Name yeu cau khong duoc bo trong.
Password yeu cau khong duoc bo trong.
Email yeu cau khong duoc bo trong


Xem như tôi vừa hoàn thành việt hóa câu thông báo lỗi xuất ra từ form validation, các câu lỗi còn lại các bạn tự việt hóa theo văn phong của mình, chúc các bạn thành công.

Kết:

Bài viết này chỉ tập trung hướng dẫn các bạn các thao tác căn bản nhất khi làm việc với form validation, ở các bài viết khác tôi sẽ hướng dẫn các bạn một số phương thức nâng cao hơn, cũng như tạo ra một form login check lỗi nhập liệu và check lỗi trùng tên truy cập, thao tác với database & session, chào tạm biệt và quyết thắng.

 

Cùng chuyên mục:

Chia sẻ theme web blog mobile đơn giản (Theme FMB1)

Chia sẻ theme web blog mobile đơn giản (Theme FMB1)

Freetuts Mobile Blog được code trên nền tảng PHP và MySQL, sử dụng Codeigniter Framework.

Bài 19: Rewrite URL trong Codeigniter

Bài 19: Rewrite URL trong Codeigniter

Sau một khoảng thời gian không đụng tới Codeigniter thì hôm nay lại có dịp…

Tìm hiểu quy trình load model trong codeigniter

Tìm hiểu quy trình load model trong codeigniter

Việc load model rất quen thuộc với những bạn sử dụng framwork codeigniter nhưng đôi…

Tự tạo thư viện load widget trong codeigniter

Tự tạo thư viện load widget trong codeigniter

Như các bạn biết mặc định hệ thống của Codeigniter hoạt động theo mô hình…

Hướng dẫn custom bộ core codeigniter

Hướng dẫn custom bộ core codeigniter

Có khi nào bạn đặt câu hỏi có nên sửa các file nằm trong bộ…

Bài 18: Tìm Hiểu Library Shopping Cart trong Codeigniter

Bài 18: Tìm Hiểu Library Shopping Cart trong Codeigniter

Chào mừng các bạn đã quay trở lại freetuts.net. Như vậy ở bài trước chúng…

Bài 17: Xây dựng crud add - update - edit user

Bài 17: Xây dựng crud add - update - edit user

Crud là một thuật ngữ không hề xa lạ với dân lập trình, nó là…

Bài 16: Kỹ thuật master layout trong codeigniter

Bài 16: Kỹ thuật master layout trong codeigniter

Đây là một vấn đề mở rộng mà CI không đề cập trong user guide,…

Bài 15: Tìm Hiểu Helper Language Trong Codeigniter

Bài 15: Tìm Hiểu Helper Language Trong Codeigniter

Trong bài viết này , chúng ta chỉ tìm hiểu ở khái niệm cơ bản…

Bài 14: Tìm Hiểu Helper Text Trong Codeigniter

Bài 14: Tìm Hiểu Helper Text Trong Codeigniter

Nhìn tiêu đề, hẳn các bạn đã đoán ra hôm nay chúng ta sẽ tìm…

Bài 13: Tìm Hiểu Helper Date Trong Codeigniter

Bài 13: Tìm Hiểu Helper Date Trong Codeigniter

Hôm nay chúng ta sẽ tiếp tục tìm hiểu sâu hơn về các helper mà…

Bài 12: Đóng dấu watermark image trong codeigniter

Bài 12: Đóng dấu watermark image trong codeigniter

Đầu tiên xin gửi lời cảm ơn các bạn đã quan tâm và theo dõi…

Bài 11: Tìm Hiểu Library Image Trong Codeigniter

Bài 11: Tìm Hiểu Library Image Trong Codeigniter

Kết thúc bài trước, chúng ta đã hoàn thành khá xuất sắc phần upload hình…

Bài 10: Tìm hiểu library upload trong codeigniter

Bài 10: Tìm hiểu library upload trong codeigniter

Chào mừng các bạn đã quay trở lại freetuts.net, đã lâu rồi tôi không viết…

Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Trong Codeigniter Framework nó chia ra 2 khái niệm đó là helper & library, vậy…

Bài 7: Load Library Pagination Trong Codeigniter

Bài 7: Load Library Pagination Trong Codeigniter

Đây là một library cũng khá là phổ biến, hay được sử dụng trong quá…

Bài 6: Load Library Database Trong Codeigniter

Bài 6: Load Library Database Trong Codeigniter

Tôi sẽ không giới thiệu về library này mà sẽ xoáy sâu vào các thao…

Bài 5: Load Library Session Trong Codeigniter

Bài 5: Load Library Session Trong Codeigniter

Đây là một thư viện khá là quan trọng , trong framework CI (Codeigniter) .…

Bài 4: Load Model Trong Codeigniter

Bài 4: Load Model Trong Codeigniter

Trong Codeigniter để kết nối với Database chúng ta phải cấu hình thông tin cho…

Bài 3: Load View Trong Codeigniter

Bài 3: Load View Trong Codeigniter

Trong Codeigniter tất cả các Views đều được đặt trong thư mục application/views. Các bạn…

Top