--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn Filter và validate trong PHP. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Filter và validate trong PHP. Hiển thị tất cả bài đăng

Ngu ngơ học làm web (85) - Filter và validate trong PHP

Tiếp theo của: Ngu ngơ học làm web (84) - Bài tập upload tập tin
-----

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: