Kiểm tra và xử lý lỗi dữ liệu trong form

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 18 tháng 5, 2025

Mục tiêu:

  • Hiểu cách kiểm tra dữ liệu người dùng nhập vào form, và thông báo lỗi nếu thiếu hoặc sai định dạng.

Bước 1: Tạo form HTML

<form method="POST" action="">
  Họ tên: <input type="text" name="name"><br>
  Email: <input type="text" name="email"><br>
  Tuổi: <input type="text" name="age"><br>
  <button type="submit">Gửi</button>
</form>

Bước 2: Xử lý và bắt lỗi với PHP

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

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // Bắt lỗi tên
  if (empty($_POST["name"])) {
    $nameErr = "Vui lòng nhập họ tên";
  } else {
    $name = htmlspecialchars($_POST["name"]);
  }

  // Bắt lỗi email
  if (empty($_POST["email"])) {
    $emailErr = "Vui lòng nhập email";
  } elseif (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
    $emailErr = "Email không hợp lệ";
  } else {
    $email = htmlspecialchars($_POST["email"]);
  }

  // Bắt lỗi tuổi
  if (empty($_POST["age"])) {
    $ageErr = "Vui lòng nhập tuổi";
  } elseif (!is_numeric($_POST["age"]) || $_POST["age"] <= 0) {
    $ageErr = "Tuổi phải là số dương";
  } else {
    $age = (int)$_POST["age"];
  }
}
?>

Bước 3: Hiển thị lại form kèm thông báo lỗi

Thêm PHP vào ngay sau mỗi trường:

<form method="POST" action="">
  Họ tên: <input type="text" name="name" value="<?php echo $name; ?>"><br>
  <span style="color:red"><?php echo $nameErr; ?></span><br>

  Email: <input type="text" name="email" value="<?php echo $email; ?>"><br>
  <span style="color:red"><?php echo $emailErr; ?></span><br>

  Tuổi: <input type="text" name="age" value="<?php echo $age; ?>"><br>
  <span style="color:red"><?php echo $ageErr; ?></span><br>

  <button type="submit">Gửi</button>
</form>

Bước 4: In kết quả nếu không có lỗi

Thêm vào dưới phần xử lý:

if ($_SERVER["REQUEST_METHOD"] == "POST" && !$nameErr && !$emailErr && !$ageErr) {
  echo "<h3 style='color:green'>Dữ liệu hợp lệ:</h3>";
  echo "Họ tên: $name<br>";
  echo "Email: $email<br>";
  echo "Tuổi: $age<br>";
}

Kết quả:

  • Nếu để trống hoặc nhập sai, sẽ có dòng báo lỗi màu đỏ.
  • Nếu nhập đúng, sẽ hiển thị kết quả đã nhập.

Ghi chú:

  • htmlspecialchars() dùng để chống XSS (mã độc từ người dùng).
  • filter_var(..., FILTER_VALIDATE_EMAIL) kiểm tra định dạng email chuẩn.
  • Có thể thêm các kiểm tra nâng cao như độ dài chuỗi, ký tự đặc biệt, v.v.

Demo

Tải xuống
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ