Hướng dẫn validate form trên CodeIgniter

Việc validate form là việc không thể thiếu trong lập trình Web. Do đó CodeIgniter đã cung cấp cho chúng ta một thư viện validate form vô cùng mạnh mẽ. Trong bài này mình sẽ trình bày về cách validate form trên CodeIgniter.

Các công cụ cần thiết.

- Bản CodeIgniter theo mô hình HMVC Hướng dẫn cài đặt mô hình HMVC trên CodeIgniter
http://filehippo.com/download_notepad

Ta sẽ đi theo từng thành phần của thư viện này bằng ví dụ cụ thể.

1. Tạo một mô-đun validateForm trong thư mục modules trong hệ thống.

Trong thư mục controllers của mô-đun validateForm này, ta sẽ tạo 1 file là validateForm.php.

<?php
class ValidateForm extends CI_Controller{
	private $b_Check = false;
	
	public function __construct(){
		parent::__construct();
		#Tải thư viện  và helper của Form trên CodeIgniter
		$this->load->helper(array('form', 'url'));
		$this->load->library('form_validation');
		
		# Tải bộ thư viện ngôn ngữ tiếng việt.
		$this->lang->load('vi', 'vietnamese');
	}
	
	public function index(){
		$this->load->view('validateForm-template');
	}
	
	public function formValidate(){
		# Thiết lập lại các lời báo lỗi cho từng quy tắc được thiết lập ở dưới
		$this->form_validation->set_message('required', $this->lang->line('required'));
		$this->form_validation->set_message('valid_email', $this->lang->line('invalid-email'));
		$this->form_validation->set_message('matches', $this->lang->line('matches'));
		
		# Thiết lập các quy tắc cho từng trường trong form
		$this->form_validation->set_rules('username', 'lang:username', 'callback_username_check|trim|required|min_length[1]|max_length[12]|xss_clean');
		$this->form_validation->set_rules('password', 'lang:password', 'trim|required|matches[passconf]|md5');
		$this->form_validation->set_rules('passconf', 'lang:passconf', 'trim|required');
		$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
		
		#Kiểm tra điều kiện validate
		if($this->form_validation->run() == TRUE){
			$this->b_Check = true;
		}
		$data['b_Check']= $this->b_Check;
		$this->load->view('validateForm-template', $data);
		
	}
	
	# Lời gọi hàm callback giúp kiểm tra thêm điều kiện mà ta tự định nghĩa.
	public function username_check($str = ''){
		# Kiểm tra trường tên nhập vào phải khác từ 'damn'
		if($str && $str == 'damn'){
			$this->form_validation->set_message('username_check', 'Trường \'%s\' không được phép là từ \'test\'');
			return FALSE;
		}else{
			return TRUE;
		}
	}
}
?>

Giải thích cho các thành phần trên của thư viện validate form trên CodeIgniter.
$this->load->library('form_validation');. Lời gọi này là bắt buộc để sử dụng được thư viện validate form trên CodeIgniter.
$this->lang->load('vi', 'vietnamese');. Lời gọi này sẽ tải lên bộ thư viện ngôn ngữ mà ta định nghĩa sẵn. Mình sẽ nói về thư viện ở bài sau này.
$this->lang->line(..), đây là bộ thư viện ngôn ngữ do ta đã định nghĩa ở trên. - Hàm set_rules() trong thư viện validate form trên CodeIgniter giúp ta thiết lập các quy tắc cho một trường trong form, nó bao gồm các tham sổ như sau: * Tham số 1: Tên của trường, là giá trị ở trong thuộc tính name của trường đó.
lang:username, đây là cách gọi đến bộ thư viện ngôn ngữ với thành phần tương ứng mà ta đã định nghĩa trong bộ thư viện đó.
required: Bắt buộc phải nhập giá trị.
min_legth : Độ dài tối thiểu của trường, nếu nhỏ hơn thì hệ thống sẽ báo lỗi.
max_legth : Độ dài tối đa của trường, nếu lớn hơn thì hệ thống sẽ báo lỗi.
trim : Gọi đến hàm trim của PHP, để xóa bỏ các ký tự trắng ở đầu và cuối của giá trị nhập vào form. Mục đích an toàn của hệ thống.
xss_clean : Đẩy dữ liệu nhập vào qua bộ lọc XSS, nhằm loại bỏ các dữ liệu độc hại. Mục đích an toàn của hệ thống.
md5 : Chuyển đổi dữ liệu bằng phương thức MD5, thường dùng cho trường mật khẩu.
matches[attRef] : Kiểm tra xem giá trị của trường hiện tại có trùng với trường tham số - attRef hay không, thường dùng cho việc xác nhận mật khẩu.
callback_tên_hàm : Hàm callback giúp kiểm tra thêm điều kiện mà ta tự định nghĩa.

Trong thư mục views của mô-đun validateForm này, ta sẽ tạo 1 file là validateForm-template.php.

<!DOCTYPE html>
<html lang="en">
<head>
	<style type="text/css">
		#body{margin:10px auto; width: 800px; font-size: 90%; }
		form {width: 600px; margin: 40 auto;}
		form div{padding: 0 0 5px 0;}
		label {width: 120px; display: block; float: left; clear: left; font-weight: bold;}
		span.error p{width: auto; padding: 0 0 0 120px; font-style: italic; color: red; font-size: 90%;}
		span.success {color: green;}
		.form{ width: 150px;}
	</style>
	<meta charset="utf-8">
	<title>Title | Hướng dẫn validate form trên CodeIgniter</title>
</head>
<body>
	<div id="body">
		<h2>Hướng dẫn validate form trên CodeIgniter</h2>
		<form action="<?php echo base_url()."validate-form/form-validation/" ?>" method="post" id="form">
			<fieldset>
				<legend>Hướng dẫn validate form trên CodeIgniter</legend>
				<div><span class="success"><?php if(isset($b_Check) && $b_Check == true){echo "Gửi Form thành công !";}?></span></div>
				<div>
					<label for="username">Username</label>
					<input class="form" type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />
					<span class="error"><?php echo form_error('username'); ?></span>
				</div>
				<div>
					<label for="password">Password</label>
					<input class="form" name="password" type="password" value="<?php echo set_value('password'); ?>" size="50" />
					<span class="error"><?php echo form_error('password'); ?></span>
				</div>
				<div>
					<label for="passconf">Password Confirm</label>
					<input class="form" name="passconf" type="password" value="<?php echo set_value('passconf'); ?>" size="50" />
					<span class="error"><?php echo form_error('passconf'); ?></span>
				</div>
				<div>
					<label for="email">Email Address</label>
					<input class="form" type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
					<span class="error"><?php echo form_error('email'); ?></span>
				</div>
				<div><input type="submit" id="save" value="Save changes" /></div>
			</fieldset>
		</form>
	</div>
</body>
</html>

Giải thích cho các thành phần trên của thư viện validate form trên CodeIgniter.
set_value('tên_của_trường') sẽ lưu lại giá trị của trường mà ta nhập vào sau khi ta submit form. Giúp người dùng biết mình nhập đã nhập những gì.
form_error('tên_của_trường') sẽ đưa ra thông báo lỗi mà ta đã thiết lập ở bên controllers.

Hướng dẫn validate form trên CodeIgniter

2. Điều hướng lại các routes trong file routes.php

Ta mở file routes.php bằng notepad++ và copy nội dung sau vào.

	# validate form
	$route['validate-form'] 				= "validateForm/index";
	$route['validate-form/form-validation'] = "validateForm/formValidate";

3. Tạo bộ thư viện ngôn ngữ trong thư mục language

Ta truy cập vào thư mục C:\AppServ\www\ci-test\application\language, tạo một thư mục tên là vietnamese.
vi_lang.php ở trong thư mục vietnamese này. Rồi copy đoạn code sau vào file này.

<?php
    # Header
    $lang['username']   	=   "Tên user";
    $lang['password']		=   "Mật khẩu";
    $lang['passconf']		=   "Xác nhận Mật khẩu";
    $lang['matches']		=   "Trường '%s' không khớp với trường '%s'.";
    $lang['required']   	=   "Trường '%s' là bắt buộc.";
    $lang['invalid-email']  =   "Email này không hợp lệ.";

Hướng dẫn validate form trên CodeIgniter

4. Kiểm tra lại quá trình thực hiện

Để kiểm tra kết quả của việc validate form trên CodeIgniter có ổn hay không, ta mở trình duyệt lên.
localhost/ci-test/validate-form

Hướng dẫn validate form trên CodeIgniter

Để cụ thể hơn các bạn hãy download file đính kèm ở dưới và thực hành để làm quen với việc sử dụng validate form trên CodeIgniter.

File ví dụ đính kèm
huong-dan-validate-form-tren-codeigniter.zip

Chúc các bạn thành công :)

Tags: