Bài 9: Tìm Hiểu Library Form Validation
Trong bài này bạn sẽ được học:
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
- Sử dụng form validation kiểm tra dữ liệu
- 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()
$this->form_validation->set_rules('username', 'Username', 'required')
- required: Yêu cầu phải nhập liệu không được để trống
- matches: Yêu cầu password phải trùng khớp nhau
- min_length: Giới hạn bao nhiêu ký tự khi nhập vào
- max_length: Giới hạn bao nhiêu ký tự khi nhập vào
- numeric: Yêu cầu trong textbox phải nhập liệu là con số
- valid_email: Email nhập liệu bắt buộc phải đúng định dạng
- 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"); } } ?>
<?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>
<?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(); ?>
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."; ?>
$lang['required'] = " %s 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.