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

Trong bài này bạn sẽ được họ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.

 

Nguồn: freetuts.net

KHÓA HỌC ĐANG GIẢM GIÁ

FEDU - 20: Học lập trình Angular js/MySQL/PHP

(Giảng viên: Nguyễn Đức Việt)

XEM
FEDU - 18 – Lập trình Backend cho website bằng PHP/Mysql theo mô hình MVC với Codeigniter Framework 3x

(Giảng viên: Nguyễn Đức Việt)

XEM
UNICA - Xây dựng website hoàn chỉnh với Laravel PHP Framework

(Giảng viên: )

XEM
UNICA - Lập trình FULLSTACK với ANGULAR - PHP - MYSQL

(Giảng viên: )

XEM
KYNA - Lập trình Fullstack với Angular - PHP - MySQL

(Giảng viên: Nguyễn Đức Việt)

XEM