-----
Phần 85.
Filter và validate trong PHP
Đây là clip số 96:
Filter và validate được sử dụng để kiểm tra dữ liệu trước
khi thao tác với nó.
- Validate: xác nhận, kiểm tra xem dữ liệu có đáp ứng các
yêu cầu đã đặt ra hay không?
- Filter: dùng để lọc các dữ liệu đưa vào không phù hợp với
yêu cầu và trả về một kết quả đúng với yêu cầu.
Sử dụng hàm filter_var($variable, $filter, $options) để kiểm
tra biến $variable với các điều kiện đưa vào, biến $filter thường mang các giá
trị:
- FILTER_VALIDATE_BOOLEAN
- FILTER_VALIDATE_EMAIL
- FILTER_VALIDATE_FLOAT
- FILTER_VALIDATE_IP
- FILTER_VALIDATE_URL
Ví dụ,
$x = 'a.gmail.com';
if(filter_var($x,
FILTER_VALIDATE_EMAIL)){
echo 'là email';
}else {
echo 'không là email';
}
Ví dụ, kiểm tra là số nguyên, và có giá trị nằm trong một
miền giá trị.
<?php
$x = 11;
$int_options = array('options'
=> array('min_range' => 4, 'max_range' => 10));
if(filter_var($x,
FILTER_VALIDATE_INT, $int_options)){
echo 'thỏa điều kiện';
}else {
echo 'không thỏa điều
kiện';
}
?>
Để tự định nghĩa và gọi hàm trong PHP filter, sử dụng cú
pháp sau:
filter_var($variable, $FILTER_CALLBACK, array(‘options’
=> ‘myFunc’));
Trong đó, myFunc là hàm tự định nghĩa.
Ví dụ, chức năng filter,
<?php
$variable = 'Nguyen Van
Teo';
function
convertString($string) {
$string = str_replace('
', '_', $string);
return $string;
}
echo
filter_var($variable, FILTER_CALLBACK, array('options' => 'convertString'));
?>
Ví dụ, chức năng validate,
<?php
$number = 3;
function
checkNumber($number) {
$flag = false;
if($number % 2 == 0) {
$flag = true;
}
return $flag;
}
if (filter_var($number,
FILTER_CALLBACK, array('options' => 'checkNumber'))) {
echo 'là số chẵn';
}else {
echo 'là số lẻ';
}
?>
Đây là clip số 97:
Sử dụng hàm filter_var($variable, FILTER_VALIDATE_REGEXP,
$options) kết hợp với biểu thức chính quy.
Ví dụ, kiểm tra số điện thoại,
<?php
$value = '084-05-12.345678';
$options = array(
'options'
=> array('regexp' => '#^084-[0-9]{2}-[0-9]{2}\.[0-9]{6}$#')
);
if (filter_var($value,
FILTER_VALIDATE_REGEXP, $options)) {
echo $value.' thỏa
mãn';
}else {
echo $value.' chưa thỏa
mãn';
}
?>
Đoạn mã kiểm tra phần mở rộng của một tập tin,
<?php
$value = 'teo.png';
$options = array(
'options'
=> array('regexp' => '#\.(jpg|png|gif)$#')
);
if (filter_var($value,
FILTER_VALIDATE_REGEXP, $options)) {
echo $value.' thỏa
mãn';
}else {
echo $value.' chưa thỏa
mãn';
}
?>
Đoạn mã sau dùng để kiểm tra giá trị nhập vào chỉ chứa chữ
và số,
<?php
$value = 'teopng';
$options = array(
'options'
=> array('regexp' => '#^[a-zA-Z0-9]+$#')
);
if (filter_var($value,
FILTER_VALIDATE_REGEXP, $options)) {
echo $value.' thỏa
mãn';
}else {
echo $value.' chưa thỏa
mãn';
}
?>
Sử dụng hàm filter_var_array() để kiểm tra, lọc cùng lúc
nhiều giá trị, ví dụ,
<?php
$data = array(
'name' => 'nguyen van teo',
'age' => '13',
'email'
=> 'nvt@gmail.com'
);
$filters = array(
'name'
=> array(
'filter' =>
FILTER_CALLBACK,
'options' => 'ucwords'
),
'age'
=> array(
'filter' => FILTER_VALIDATE_INT,
'options' =>
array('min_range' => 1, 'max_range' => 100)
),
'email'
=> array(
'filter' => FILTER_VALIDATE_EMAIL
),
);
$result =
filter_var_array($data, $filters);
echo '<pre>';
print_r($result);
echo '</pre>';
?>
Hàm filter_input(input_type, variable, filter, options) được
sử dụng để kiểm tra các giá trị từ FORM. Chức năng này cũng có thể lấy được dữ
liệu từ các trường hợp khác như $_GET, $_POST, $_COOKIE, $_ENV, $_SERVER.
- input_type: kiểu lấy dữ liệu (INPUT_GET, INPUT_POST,
INPUT_COOKIE,…)
- variable: tên của phần tử muốn lấy dữ liệu
- filter: kiểu filter
- options: mảng tham số.
Ví dụ,
[index.php]
<!doctype html>
<html lang="en">
<head>
<meta
charset="utf-8">
<meta
name="viewport" content="width=device-width,
initial-scale=1">
<title>Filter</title>
</head>
<body>
<form action="filter.php" method="post"
name="mainForm">
<input
type="text" name="email">
<input
type="submit" value="Submit">
</form>
</body>
</html>
[filter.php]
<?php
echo
'<pre>';
print_r($_POST);
echo
'</pre>';
if(!filter_input(INPUT_POST,
'email', FILTER_VALIDATE_EMAIL)) {
echo
'Email không hợp lệ';
}else {
echo
'Email hợp lệ';
}
?>
Hàm filter_input_array() cho phép validate và filter cùng
lúc trên nhiều giá trị.
Ví dụ,
[index.php]
<form action="filter.php" method="post"
name="mainForm">
Email:<input
type="text" name="email">
Age:<input
type="text" name="age">
Name:<input
type="text" name="name">
<input
type="submit" value="Submit">
</form>
[filter.php]
<?php
$filters =
array(
'name'
=> array(
'filter' => FILTER_CALLBACK,
'options' => 'ucwords'
),
'age' => array(
'filter' => FILTER_VALIDATE_INT,
'options' => array('min_range' => 1, 'max_range' => 100)
),
'email' => array(
'filter' => FILTER_VALIDATE_EMAIL
),
);
$result =
filter_input_array(INPUT_POST, $filters);
echo
'<pre>';
print_r($result);
echo
'</pre>';
?>
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm: