Dưới đây là ví dụ đầy đủ minh họa cách xác thực các trường dữ liệu trong một biểu mẫu. Chúng ta sẽ kiểm tra các trường như: Tên, Email, Website, Số điện thoại, và các trường bắt buộc.

Bước 1: HTML form

html
<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>

<h2>Ví dụ PHP Form Validation</h2>
<p><span class="error">* bắt buộc.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
  Tên: <input type="text" name="name">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
  Email: <input type="text" name="email">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
  Website: <input type="text" name="website">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
  Số điện thoại: <input type="text" name="phone">
  <span class="error"><?php echo $phoneErr;?></span>
  <br><br>
  <input type="submit" name="submit" value="Gửi">  
</form>

</body>
</html>

Bước 2: Xử lý và xác thực dữ liệu bằng PHP

php
<?php
// Khởi tạo các biến lỗi và dữ liệu
$nameErr = $emailErr = $websiteErr = $phoneErr = "";
$name = $email = $website = $phone = "";

// Kiểm tra khi form được submit
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  
  // Kiểm tra tên
  if (empty($_POST["name"])) {
    $nameErr = "Tên là bắt buộc";
  } else {
    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) {
      $nameErr = "Chỉ cho phép chữ cái và khoảng trắng";
    }
  }
  
  // Kiểm tra email
  if (empty($_POST["email"])) {
    $emailErr = "Email là bắt buộc";
  } else {
    $email = test_input($_POST["email"]);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = "Địa chỉ email không hợp lệ";
    }
  }
    
  // Kiểm tra website
  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    if (!filter_var($website, FILTER_VALIDATE_URL)) {
      $websiteErr = "URL không hợp lệ";
    }
  }

  // Kiểm tra số điện thoại
  if (empty($_POST["phone"])) {
    $phoneErr = "Số điện thoại là bắt buộc";
  } else {
    $phone = test_input($_POST["phone"]);
    if (!preg_match("/^[0-9]{10}$/", $phone)) {
      $phoneErr = "Số điện thoại phải là 10 chữ số";
    }
  }
}

// Hàm làm sạch dữ liệu
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Giải thích mã PHP

  1. Kiểm tra trường bắt buộc: Sử dụng hàm empty() để kiểm tra xem các trường nhập liệu có bị bỏ trống hay không. Nếu trống, một thông báo lỗi sẽ hiển thị.
  2. Xác thực định dạng chuỗi: Sử dụng biểu thức chính quy (regular expressions) để xác thực tên chỉ chứa các chữ cái và khoảng trắng. Tương tự, dùng biểu thức chính quy để kiểm tra số điện thoại có đúng định dạng 10 chữ số hay không.
  3. Xác thực email: Sử dụng hàm filter_var() với bộ lọc FILTER_VALIDATE_EMAIL để kiểm tra xem email có đúng định dạng không.
  4. Xác thực URL: Sử dụng filter_var() với bộ lọc FILTER_VALIDATE_URL để kiểm tra URL hợp lệ.
  5. Hàm test_input(): Làm sạch dữ liệu đầu vào bằng cách loại bỏ các ký tự không cần thiết như khoảng trắng và ký tự đặc biệt để tránh tấn công XSS.

Bước 3: Hiển thị dữ liệu sau khi xác thực

Sau khi người dùng nhập đúng thông tin, bạn có thể hiển thị dữ liệu đã xác thực hoặc lưu trữ nó vào cơ sở dữ liệu.

php
if ($_SERVER["REQUEST_METHOD"] == "POST" && empty($nameErr) && empty($emailErr) && empty($websiteErr) && empty($phoneErr)) {
    echo "<h2>Thông tin đã nhập:</h2>";
    echo "Tên: $name<br>";
    echo "Email: $email<br>";
    echo "Website: $website<br>";
    echo "Số điện thoại: $phone<br>";
}

Kết luận

Xác thực biểu mẫu trong PHP là bước không thể thiếu để đảm bảo dữ liệu nhập vào từ người dùng là hợp lệ và an toàn. Bằng cách sử dụng các hàm tích hợp sẵn như filter_var() và biểu thức chính quy, chúng ta có thể kiểm tra tính hợp lệ của dữ liệu đầu vào như email, URL, số điện thoại và chuỗi ký tự. Ngoài ra, làm sạch dữ liệu đầu vào giúp ngăn ngừa các cuộc tấn công bảo mật như XSS.

Ví dụ đầy đủ trên cung cấp một cách dễ hiểu và hiệu quả để xử lý forms validation trong PHP. Bạn có thể mở rộng dựa trên nhu cầu của dự án bằng cách thêm nhiều trường hoặc kiểu dữ liệu cần xác thực hơn.