Trong bài hướng dẫn tự học lập trình PHP này, bạn sẽ được hướng dẫn về cách làm sạch và xác thực dữ liệu đầu vào của người dùng.
Chúng ta sẽ sử dụng các bộ lọc có sẵn trong PHP – PHP Filters
Làm sạch và xác thực dữ liệu đầu vào của người dùng là một trong những nhiệm vụ phổ biến nhất trong khi lập trình web. Để làm cho nhiệm vụ này dễ dàng hơn, PHP cung cấp tiện ích mở rộng filters mà bạn có thể sử dụng để làm sạch hoặc xác thực dữ liệu như địa chỉ email, URL, địa chỉ IP, v.v.
Để xác thực dữ liệu bằng cách sử dụng Filter, bạn cần sử dụng hàm filter_var() của PHP. Cú pháp cơ bản của hàm này như sau:
filter_var(variable, filter, options)
Hàm này có ba tham số trong đó hai tham số filter và options là tùy chọn.
Tham số variable là giá trị được lọc, tham số thứ hai là ID của bộ lọc sẽ áp dụng và tham số thứ ba là mảng các tùy chọn liên quan đến bộ lọc.
Hãy cùng xem chức năng filter hoạt động như thế nào qua các ví dụ bên dưới đây.
1. Làm sạch một chuỗi với bộ lọc Filter
Ví dụ sau sẽ làm sạch một chuỗi bằng cách xóa tất cả các thẻ HTML khỏi nó:
<?php
// Comment của người dùng có chứa thẻ HTML
$comment = "<h1>Chào bạn, hôm nay có gì vui không?</h1>";
// Làm sạch và in ra chuỗi comment đã làm sạch
$sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING);
echo $sanitizedComment;
?>
Sau khi làm sạch với bộ lọc với ID bộ lọc là FILTER_SANITIZE_STRING chúng ta có kết quả đầu ra như sau:
Chào bạn, hôm nay có gì vui không?
2. Xác thực giá trị kiểu số nguyên
Ví dụ sau sẽ xác nhận xem giá trị có phải là số nguyên hợp lệ hay không:
<?php
// Cho một giá trị số
$int = 20;
// Xác thực xem biến $int có phải là số nguyên
if(filter_var($int, FILTER_VALIDATE_INT)){
echo "<b>$int</b> là số nguyên";
} else{
echo "<b>$int</b> không là số nguyên";
}
?>
Trong ví dụ trên, nếu biến $int gán giá trị 0, đoạn mã sẽ hiển thị thông báo “… không là số nguyên”. Để khắc phục sự cố này, bạn cần kiểm tra rõ ràng giá trị 0, như sau:
<?php
// Cho một giá trị số
$int = 0;
// Xác thực xem giá trị có phải số nguyên
if(filter_var($int, FILTER_VALIDATE_INT) === 0 || filter_var($int,
FILTER_VALIDATE_INT)){
echo "<b>$int</b> là số nguyên";
} else{
echo "<b>$int</b> không là số nguyên";
}
?>
3. Xác thực địa chỉ IP
Ví dụ sau sẽ xác thực xem giá trị có phải là địa chỉ IP hợp lệ hay không:
<?php
// Cho một địa chỉ IP
$ip = "172.16.254.1";
// Xác thực địa chỉ IP
if(filter_var($ip, FILTER_VALIDATE_IP)){
echo "<b>$ip</b> là địa chỉ IP hợp lệ";
} else {
echo "<b>$ip</b> không là địa chỉ IP hợp lệ";
}
?>
Bạn có thể tiếp tục áp dụng xác thực cho các địa chỉ IP IPV4 hoặc IPV6 bằng cách sử dụng các bộ lọc FILTER_FLAG_IPV4 hoặc FILTER_FLAG_IPV6 tương ứng. Dưới đây là một ví dụ:
<?php
// Cho một địa chỉ IP
$ip = "172.16.254.1";
// Xác thực địa chỉ IP
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
echo "<b>$ip</b> là địa chỉ IPV6 hợp lệ";
} else {
echo "The <b>$ip</b> không là địa chỉ IPV6 hợp lệ";
}
?>
>> Tham khảo ngay: Khóa học Lập trình PHP Fullstack chỉ trong 3 tháng.
4. Làm sạch và Xác thực URL
Ví dụ sau đây sẽ cho bạn thấy cách làm sạch và xác thực một url thông qua bộ lọc Fillter của PHP.
<?php
// Cho một URL
$url = "https:://laptrinhvienphp.com/";
// Xóa ký tự không hợp lệ khỏi URL
$urls = filter_var($url, FILTER_SANITIZE_URL);
// Xác thực URL
if(filter_var($urls, FILTER_VALIDATE_URL)){
echo "<b>$urls</b> là URL hợp lệ";
} else{
echo "<b>$urls</b> không là URL hợp lệ";
}
?>
Bạn cũng có thể kiểm tra xem URL có chứa chuỗi truy vấn hay không bằng cách sử dụng FILTER_FLAG_QUERY_REQUIRED, như trong ví dụ sau:
<?php
// Cho một URL
$url = "http://www.example.com?topic=filters";
// Xác thực URL có chứa chuỗi truy vấn hay không
if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED))
{
echo "<b>$url</b> chứa chuỗi truy vấn";
} else{
echo "<b>$url</b> không chứa chuỗi truy vấn";
}
?>
5. Cách Xác thực số nguyên trong một khoảng cho phép
Ví dụ sau sẽ xác thực giá trị được cung cấp có phải là số nguyên hay không, cũng như liệu nó có nằm trong phạm vi từ 0 đến 100 hay không.
<?php
// Cho một số nguyên
$int = 75;
// Xác thực giá trị trong khoảng từ 0 - 100
if(filter_var($int, FILTER_VALIDATE_INT, array("options" =>
array("min_range" => 0,"max_range" => 100)))){
echo "<b>$int</b> là số nguyên nằm trong khoảng 0 - 100";
} else{
echo "<b>$int</b> không là số nguyên nằm trong khoảng 0- 100";
}
?>
6. Cách xác thực địa chỉ Email hợp lệ sử dụng bộ lọc Filters
Ví dụ sau sử dụng hàm filter_var() với ID bộ lọc là FILTER_SANITIZE_EMAIL để loại bỏ tất cả các ký tự bất hợp pháp từ biến $email, sau đó xác thực xem có đúng là địa chỉ Email hợp lệ hay không với FILTER_VALIDATE_EMAIL:
<?php
$email = "hello@niithanoi.edu.vn";
// Loại bỏ ký tự không hợp lệ trong email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// Xác thực địa chỉ email
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email là email hợp lệ");
} else {
echo("$email không phải email hợp lệ");
}
?>
Tổng kết
Như vậy là bạn đã được hướng dẫn 6 cách làm sạch và xác thực dữ liệu đầu vào của người dùng với bộ lọc Filters do PHP cung cấp sẵn.
Để tìm hiểu kỹ hơn về các bộ lọc trong PHP. Bạn vui lòng tìm hiểu thêm tại đây.