Trong bài viết "Xác thực biểu mẫu (form) trong PHP" chúng ta đã tìm hiểu cách xác thực dữ liệu người dùng nhập vào biểu mẫu. Trong bài viết này chúng ta cũng đã sử dụng bộ lọc để kiểm tra sự hợp lệ của email và địa chỉ website. Nếu bạn bỏ lỡ bài viết này thì có thể xem ở đây:
Ở bài viết này chúng ta sẽ tìm hiểu kỹ hơn về bộ lọc PHP. Có hai thuật ngữ bạn nên chú ý trong bài viết này:
Xác thực dữ liệu = Xác định xem dữ liệu có hợp lệ không.
Lọc dữ liệu = Loại bỏ bất kỳ ký tự không hợp lệ khỏi dữ liệu.
Các bộ lọc PHP được sử dụng để xác thực và lọc dữ liệu đầu vào từ bên ngoài.
Bộ lọc PHP mở rộng có nhiều chức năng cần thiết để kiểm tra đầu vào của người dùng và được thiết kế để giúp xác thực dữ liệu dễ dàng và nhanh chóng hơn.
Hàm filter_list()
được sử dụng để in ra danh sách các bộ lọc mở rộng mà PHP cung cấp:
<table>
<tr>
<td>Filter Name</td>
<td>Filter ID</td>
</tr>
<?php
foreach (filter_list() as $id =>$filter) {
echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
}
?>
</table>
Nhiều ứng dụng web nhận dữ liệu đầu vào từ bên ngoài. Dữ liệu đầu vào từ bên ngoài có thể là:
Bạn nên xác thực dữ liệu từ bên ngoài!
Dữ liệu được gửi không hợp lệ có thể dẫn đến các vấn đề bảo mật và phá vỡ trang web của bạn!
Bằng cách sử dụng các bộ lọc PHP, bạn có thể chắc chắn rằng ứng dụng của bạn có được đầu vào chính xác!
Ví dụ sau sử dụng hàm filter_var()
để xóa tất cả các thẻ HTML khỏi chuỗi:
<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
Đây là kết quả mà bạn sẽ nhận được:
Hello World!
Ví dụ sau sử dụng hàm filter_var()
để kiểm tra xem biến $int
có phải là số nguyên không.
Nếu $int
là một số nguyên, đầu ra của mã bên dưới sẽ là: "Integer is valid". Nếu $ int không phải là số nguyên, đầu ra sẽ là: "Integer is not valid":
<?php
$int = 100;
if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
Đây là kết quả mà bạn sẽ nhận được:
Integer is valid
Trong ví dụ trên, nếu $int
được gán thành 0, hàm trên sẽ trả về "Integer is not valid". Để giải quyết vấn đề này, hãy sử dụng mã dưới đây:
<?php
$int = 0;
if (filter_var($int, FILTER_VALIDATE_INT) === 0 ||
!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
Đây là kết quả:
Integer is valid
Ví dụ sau sử dụng hàm filter_var()
để kiểm tra xem biến $ip
có phải là địa chỉ IP hợp lệ không:
<?php
$ip = "127.0.0.1";
if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
echo("$ip is a valid IP address");
} else {
echo("$ip is not a valid IP address");
}
?>
Đây là kết quả:
127.0.0.1 is a valid IP address
Ví dụ sau sử dụng hàm filter_var()
để xóa tất cả các ký tự không hợp lệ khỏi biến $email
, sau đó kiểm tra xem đó có phải là địa chỉ email hợp lệ không:
<?php
$email = "john.doe@example.com";
// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// Validate e-mail
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
?>
Đây là kết quả:
john.doe@example.com is a valid email address
Ví dụ sau sử dụng hàm filter_var()
để xóa tất cả các ký tự không hợp lệ khỏi URL, sau đó kiểm tra xem $url
có phải là URL hợp lệ không:
<?php
$url = "https://tech.comdy.vn";
// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
echo("$url is a valid URL");
} else {
echo("$url is not a valid URL");
}
?>
Đây là kết quả:
https://tech.comdy.vn is a valid URL
Ví dụ sau sử dụng hàm filter_var()
để kiểm tra xem một biến kiểu integer có nằm trong phạm vi từ 1 đến 200 không:
<?php
$int = 122;
$min = 1;
$max = 200;
if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {
echo("Variable value is not within the legal range");
} else {
echo("Variable value is within the legal range");
}
?>
Đây là kết quả:
Variable value is within the legal range
Ví dụ sau sử dụng hàm filter_var()
hàm để kiểm tra xem biến $ip
có phải là địa chỉ IPv6 hợp lệ không:
<?php
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
echo("$ip is a valid IPv6 address");
} else {
echo("$ip is not a valid IPv6 address");
}
?>
Đây là kết quả:
2001:0db8:85a3:08d3:1319:8a2e:0370:7334 is a valid IPv6 address
Ví dụ sau sử dụnghàm filter_var()
để kiểm tra xem biến $ url có phải là URL có chuỗi truy vấn không:
<?php
$url = "https://tech.comdy.vn?page=2";
if (!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) {
echo("$url is a valid URL with a query string");
} else {
echo("$url is not a valid URL with a query string");
}
?>
Đây là kết quả:
https://tech.comdy.vn?page=2 is a valid URL with a query string
Ví dụ sau sử dụng hàm filter_var()
để lọc một chuỗi. Nó sẽ xóa tất cả các thẻ HTML và tất cả các ký tự ASCII có giá trị > 127 khỏi chuỗi:
<?php
$str = "<h1>Hello WorldÆØÅ!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
echo $newstr;
?>
Đây là kết quả:
Hello World!
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.
Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.
MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.
Hướng dẫn này sẽ giúp bạn tìm hiểu cách thêm dữ liệu vào MySQL sử dụng MySQLi và PDO trong PHP.