Thứ Sáu, 9 tháng 5, 2025

16.Form Validation - Kiểm tra tính hợp lệ của Form trong PHP phần 2

Đây sẽ là phần tương đối dài. Như phần trước chúng ta đã đề cập qua: Kiểm tra tính hợp lệ thật ra là một công việc rất "đau đầu nhức óc". Trong bài "cưỡi ngựa xem hoa" trước chúng ta chỉ mới lướt qua khái niệm cũng với những "thí nghiệm" không hoàn chỉnh mà thôi.

Quay lại với Form đơn giản mà chúng ta thử chạy trong ví dụ bài trước:


<html>

<head>

</head>


<body>  


<?php

// định nghĩa biến và gán giá trị rỗng

$ten = $email = $gioitinh = $ghichu = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {


  $ten = test_input($_POST["ten"]);

  $email = test_input($_POST["email"]);

  $website = test_input($_POST["website"]);

  $ghichu = test_input($_POST["ghichu"]);

  $gioitinh = test_input($_POST["gioitinh"]);


}


function test_input($data) {

  $data = trim($data);

  $data = stripslashes($data);

  $data = htmlspecialchars($data);

  return $data;


}


?>


<h2>Ví Dụ PHP Form Validation </h2>


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  


  Tên: <input type="text" name="ten">

  <br><br>


  E-mail: <input type="text" name="email">

  <br><br>


  Website: <input type="text" name="website">

  <br><br>


  Ghi Chú: <textarea name="ghichu" rows="5" cols="40"></textarea>

  <br><br>


  Giới tính:

  <input type="radio" name="gioitinh" value="nữ">Nữ

  <input type="radio" name="gioitinh" value="nam">Nam

  <br><br>


  <input type="submit" name="submit" value="Submit">  


</form>


<?php


echo "<h2>Bạn đã điền thông tin:</h2>";


echo $ten;

echo "<br>";

echo $email;

echo "<br>";

echo $website;

echo "<br>";

echo $ghichu;

echo "<br>";

echo $gioitinh;


?>


</body>


</html>


 


Form mà chúng ta đang làm việc bao gồm nhiều trường nhập liệu khác nhau: các trường văn bản bắt buộc và tùy chọn, các nút radio, cùng một nút gửi (submit).

Tuy nhiên như bài trước bạn chạy thử, nó chưa hề Validation gì cả, nếu bạn nhập "lung tung", không theo qui tắc nào thì Form vẫn hoạt động "bình thường"!


Những phần tử đơn giản như Text Field:


 Tên: <input type="text" name="ten">


Hay Radio Button


Giới tính:

  <input type="radio" name="gioitinh" value="nữ">Nữ

  <input type="radio" name="gioitinh" value="nam">Nam


Không có gì quá khó, chúng ta sẽ coi như mặc định "đã hiểu". Cái chúng ta quan tâm là Form. Chúng ta sẽ "nhòm ngó" code để tìm hiểu "sơ sơ" ý nghĩa:


$_SERVER["PHP_SELF"] là một biến (super global variable) trả về tên file của PHP Script đang được thực thi hiện tại, ví dụ hiểu đơn giản là test.php của chúng ta.

Do đó, $_SERVER["PHP_SELF"] sẽ gửi dữ liệu từ Form đã được gửi đi về chính trang đó (ví dụ nằm luôn ăn vạ trên chính trang test.php), thay vì chuyển hướng sang một trang khác. Nhờ cách này, người dùng sẽ nhận được các thông báo lỗi ngay trên cùng một trang với Form nhập liệu.


Hàm htmlspecialchars() chuyển đổi các ký tự đặc biệt thành các thực thể HTML. Điều này có nghĩa là nó sẽ thay thế các ký tự HTML như '<' và '>' bằng '&lt;' và '&gt;'. Việc này giúp ngăn chặn kẻ tấn công khai thác mã nguồn bằng cách chèn mã HTML hoặc Javascript vào các biểu mẫu (thông qua các cuộc tấn công Cross-site Scripting).


Tới đây thì có một Cảnh báo!

Biến $_SERVER["PHP_SELF"] có thể bị các tin tặc lợi dụng!


Chúng ta không đi sâu vào chi tiết, chỉ tạm hiểu rằng nếu biến PHP_SELF được sử dụng trên trang web của bạn, người dùng có thể nhập thêm ký tự dấu gạch chéo '/', sau đó chèn các lệnh Cross Site Scripting (XSS) để thực thi mã độc. Để tránh điều đó, chúng ta sử dụng hàm htmlspecialchars().


Quay lại với việc Validation. Chúng ta sẽ muốn


FieldQui tắc Validation         
TênBắt buộc. + Chỉ được phép chứa các ký tự chữ cái và khoảng trắng.
E-mailBắt buộc. + Phải chứa một địa chỉ email hợp lệ (có chứa ký tự @ và dấu chấm .)
WebsiteTùy chọn. Nếu có, giá trị này phải chứa một URL hợp lệ.
Ghi chúTùy chọn. Trường nhập liệu đa dòng (textarea)
Giới tínhBắt buộc. Phải chọn một trong hai

Mọi thông báo lỗi khi một trường nào đó không theo đúng qui tắc sẽ được gán vào một biến tương ứng và sẽ được in lên màn hình. Chúng ta sẽ thêm các biến đó dưới phần khai báo biến.

$tenerr = $emailerr = $gioitinherr = $ghichuerr= $websiteerr = "";
Chúng ta cũng làm nổi bật thông báo thành màu đỏ:

<style>
     .error {color: #FF0000;}
</style>

Trước hết là "Bắt buộc". Chúng ta cần kiểm tra trường nhập liệu đó có RỖNG hay không. Nếu rỗng thì hiện lên thông báo.

Chúng ta sẽ "vào việc" với trường Tên. Code sẽ rất dễ hiểu:

 if (empty($_POST["ten"])) {
     $tenerr= "Bạn phải nhập họ tên";
 }
 else
 {
     $ten = test_input($_POST["ten"]);
 }

Sau đó chúng ta thêm phần in thông báo bên cạnh Text Field:

<span class="error">* <?php echo $tenerr;?></span>

Giờ đây "bộ mặt" của code sẽ như sau:


<html>

<head>
<style>
     .error {color: #FF0000;}
</style>
</head>

<body>  



<?php

// define variables and set to empty values

$ten = $email = $gioitinh = $ghichu = $website = "";
$tenerr = $emailerr = $gioitinherr = $ghichuerr= $websiteerr = "";


if ($_SERVER["REQUEST_METHOD"] == "POST") {

 if (empty($_POST["ten"])) {
     $tenerr = "Bạn phải nhập họ tên";
 }
 else
 {
     $ten = test_input($_POST["ten"]);
 }
 
  $email = test_input($_POST["email"]);

  $website = test_input($_POST["website"]);

  $ghichu = test_input($_POST["ghichu"]);

  $gioitinh = test_input($_POST["gioitinh"]);

}



function test_input($data) {

  $data = trim($data);

  $data = stripslashes($data);

  $data = htmlspecialchars($data);

  return $data;

}

?>



<h2>Ví Dụ PHP Form Validation </h2>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  

  Tên: <input type="text" name="ten"> <span class="error">* <?php echo $tenerr;?></span>

  <br><br>

  E-mail: <input type="text" name="email">

  <br><br>

  Website: <input type="text" name="website">

  <br><br>

  Ghi Chú: <textarea name="ghichu" rows="5" cols="40"></textarea>

  <br><br>

  Giới tính:

  <input type="radio" name="gioitinh" value="nữ">Nữ

  <input type="radio" name="gioitinh" value="nam">Nam

  <br><br>

  <input type="submit" name="submit" value="Submit">  

</form>



<?php

echo "<h2>Bạn đã điền thông tin:</h2>";

echo $ten;

echo "<br>";

echo $email;

echo "<br>";

echo $website;

echo "<br>";

echo $ghichu;

echo "<br>";

echo $gioitinh;

?>



</body>

</html>

Chạy thử:




Với mọi "Bắt buộc" khác, chúng ta sẽ làm tương tự.

Chúng ta tạm dừng ở đây, sẽ bàn tiếp trong phần sau.










Không có nhận xét nào:

Đăng nhận xét