PHP - Xác thực biểu mẫu

Xin chào các bạn đang học PHP! Hôm nay, chúng ta sẽ cùng khám phá thế giới thú vị của xác thực biểu mẫu. Là người dạy máy tính ở khu phố của bạn, tôi ở đây để hướng dẫn bạn qua khía cạnh quan trọng này của phát triển web. tin tôi đi, thành thạo xác thực biểu mẫu giống như học骑 xe đạp - một khi bạn đã biết, bạn sẽ không bao giờ quên!

PHP - Form Validation

Tại sao xác thực biểu mẫu lại quan trọng

Trước khi chúng ta nhảy vào mã, hãy nói về lý do tại sao xác thực biểu mẫu lại quan trọng. Hãy tưởng tượng bạn đang điều hành một dịch vụ giao pizza trực tuyến. Nếu ai đó đặt 'ABC' pizza hoặc nhập '-5' làm số điện thoại, bạn sẽ rơi vào tình huống khó xử! Đó là lúc xác thực biểu mẫu đến để cứu nguy, đảm bảo rằng dữ liệu bạn nhận được là chính xác và có thể sử dụng.

Xác thực client-side vs server-side

Trong thế giới xác thực biểu mẫu, chúng ta có hai nhân vật chính: xác thực client-side và server-side. Hôm nay, chúng ta sẽ tập trung vào xác thực server-side bằng PHP, nhưng hãy cùng xem qua cả hai:

Xác thực client-side

Xác thực client-side xảy ra trên trình duyệt của người dùng trước khi dữ liệu được gửi đến máy chủ. Nó nhanh chóng và cung cấp phản hồi ngay lập tức, nhưng có thể bị vượt qua bởi người dùng thành thạo.

Xác thực server-side

Xác thực server-side xảy ra trên máy chủ sau khi biểu mẫu được gửi. Nó an toàn hơn và đáng tin cậy hơn, vì người dùng không thể can thiệp vào. Đây là điều chúng ta sẽ khám phá sâu hơn hôm nay.

Bắt đầu với xác thực biểu mẫu PHP

Hãy bắt đầu với một biểu mẫu đơn giản và xây dựng xác thực từng bước. Đây là biểu mẫu HTML cơ bản của chúng ta:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  Tên: <input type="text" name="name"><br>
  Tuổi: <input type="text" name="age"><br>
  <input type="submit" name="submit" value="Gửi">
</form>

Bây giờ, hãy thêm một chút phép màu PHP để xác thực biểu mẫu này!

Hàm xác thực

Trước khi chúng ta vào các xác thực cụ thể, hãy tạo một số hàm hỗ trợ:

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

Hàm test_input() này thực hiện ba việc quan trọng:

  1. trim() loại bỏ khoảng trắng ở cả hai bên của một chuỗi
  2. stripslashes() loại bỏ các backslash
  3. htmlspecialchars() chuyển đổi các ký tự đặc biệt thành các thực thể HTML

Các bước này giúp ngăn chặn việc chèn mã độc và đảm bảo dữ liệu của chúng ta sạch sẽ.

Biểu mẫu trống

Hãy bắt đầu với một kiểm tra cơ bản: biểu mẫu có trống không? Đây là cách chúng ta có thể làm:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Tên là bắt buộc";
  } else {
    $name = test_input($_POST["name"]);
  }

  if (empty($_POST["age"])) {
    $ageErr = "Tuổi là bắt buộc";
  } else {
    $age = test_input($_POST["age"]);
  }
}
?>

Trong đoạn mã này:

  • Chúng ta khởi tạo các biến để lưu trữ dữ liệu biểu mẫu và thông báo lỗi.
  • Chúng ta kiểm tra xem biểu mẫu có được gửi bằng POST hay không.
  • Đối với mỗi trường, chúng ta kiểm tra xem nó có trống không. Nếu có, chúng ta đặt một thông báo lỗi. Nếu không, chúng ta làm sạch đầu vào bằng hàm test_input().

Trường Tuổi không phải là số

Bây giờ, hãy thêm một kiểm tra cụ thể cho trường Tuổi để đảm bảo nó là một số:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // ... kiểm tra trước đó ...

  if (empty($_POST["age"])) {
    $ageErr = "Tuổi là bắt buộc";
  } else {
    $age = test_input($_POST["age"]);
    if (!is_numeric($age)) {
      $ageErr = "Tuổi phải là một số";
    }
  }
}

Ở đây, chúng ta đã thêm một kiểm tra额外 sử dụng is_numeric() để đảm bảo tuổi thực sự là một số. Nếu không, chúng ta đặt một thông báo lỗi phù hợp.

Tất cả trong một

Bây giờ, hãy xem đoạn mã xác thực biểu mẫu hoàn chỉnh của chúng ta như thế nào:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Tên là bắt buộc";
  } else {
    $name = test_input($_POST["name"]);
  }

  if (empty($_POST["age"])) {
    $ageErr = "Tuổi là bắt buộc";
  } else {
    $age = test_input($_POST["age"]);
    if (!is_numeric($age)) {
      $ageErr = "Tuổi phải là một số";
    }
  }
}
?>

<h2 Ví dụ xác thực biểu mẫu PHP</h2>
<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>
  Tuổi: <input type="text" name="age">
  <span class="error"><?php echo $ageErr;?></span>
  <br><br>
  <input type="submit" name="submit" value="Gửi">
</form>

<?php
echo "<h2>Dữ liệu của bạn:</h2>";
echo $name;
echo "<br>";
echo $age;
?>

Đoạn mã này:

  1. Định nghĩa các biến và hàm
  2. Xác thực biểu mẫu khi được gửi
  3. Hiển thị biểu mẫu với các thông báo lỗi nếu có
  4. Hiển thị dữ liệu đã xác thực

Bảng phương pháp xác thực

Dưới đây là bảng phương pháp xác thực phổ biến trong PHP:

Phương pháp Mô tả Ví dụ
empty() Kiểm tra xem một biến có trống không if (empty($var))
isset() Kiểm tra xem một biến có được đặt và không phải là NULL if (isset($var))
is_numeric() Kiểm tra xem một biến có là số hoặc chuỗi số không if (is_numeric($var))
strlen() Lấy độ dài của một chuỗi if (strlen($var) > 5)
preg_match() Thực hiện một khớp biểu thức chính quy if (preg_match("/pattern/", $var))
filter_var() Lọc một biến với một bộ lọc cụ thể if (filter_var($var, FILTER_VALIDATE_EMAIL))

Hãy nhớ, xác thực biểu mẫu là về việc đảm bảo tính toàn vẹn của dữ liệu và cải thiện trải nghiệm người dùng. Nó giống như một bảo vệ ở câu lạc bộ - bạn muốn để dữ liệu tốt vào và giữ dữ liệu xấu ra ngoài!

Khi chúng ta kết thúc, tôi hy vọng hướng dẫn này đã cung cấp cho bạn một nền tảng vững chắc trong việc xác thực biểu mẫu bằng PHP. Hãy nhớ, thực hành làm cho hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các biểu mẫu và kỹ thuật xác thực khác. Trước khi bạn biết, bạn sẽ xác thực biểu mẫu như một chuyên gia!

Chúc các bạn may mắn và các biểu mẫu của bạn luôn hợp lệ!

Credits: Image by storyset