Các dữ liệu người dùng nhập vào biểu mẫu ở những bài trước đều là tùy chọn, có thể có hoặc có thể không. Và hôm nay ta sẽ học các trường biểu mẫu bắt buộc người dùng phải nhập vào. Ví dụ như bắt buộc nhập họ tên, số điện thoại,…

1. Các trường bắt buộc trong PHP

Như các quy tắc ở trang trước, chúng ta gần như đã biết trường nào là bắt buộc phải nhập vào. Nhưng tuy nhiên mình muốn lưu ý ở đây là trường bắt buộc do ta tạo ra và ta có thể cho bất cứ gì là bắt buộc. Ví dụ như việc comment góp ý có thể không bắt buộc nhưng chúng ta có thể xây dựng bắt buộc, hay việc nhập số điện thoại là bắt buộc ta cũng có thể cho nó là không bắt buộc. Vì vậy mà tùy vào từng bài hay từng dự án của chúng ta mà ta sẽ xây dựng khác nhau. Ở đây mình sẽ nói những trường bắt buộc hay gặp. Các trường này sẽ không được để trống và phải điền vào form HTML.

Trường bắt buộc
Name(tên) Chỉ được chứa chữ cái hoặc khoảng trắng
Email Phải là email hợp lệ có chứa @
Phone number(số điện thoại) Chỉ là số
Website(trang web) Phải chứa một URL hợp lệ
Comment(nhận xét) Nhiều dòng
Gender(giới tính) Yêu cầu chọn một

Để làm được, chúng ta sẽ thêm một số biến mới, là biến lỗi như: $nameErr, $emailErr,… Các biến lỗi này giúp ta lưu thông báo lỗi cho người dùng ở các trường bắt buộc.

Ví dụ:

<?php
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
  }

  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>

Ở đây mỗi biến $_POST ta sẽ thêm một câu lệnh if else tương ứng. Nó sẽ kiểm tra xem biến này có trống hay không. Nếu nó để trống thì sẽ xuất hiện lỗi và câu lệnh thông báo lỗi sẽ được in ra. Nếu đã được điền đầy đủ thì dữ liệu được gửi qua câu lệnh test_input().

2. Hiển thị thông báo lỗi trong PHP

Sau khi đã nhập trường bắt buộc, ta sẽ đi sâu vào vào việc dữ liệu người dùng nhập vào. Ví dụ như ở đây tên chỉ chữ cái và khoảng trắng, email phải có @,… Nếu người dùng gửi dữ liệu sai với những điều kiện này, ta sẽ có thông báo lỗi và yêu cầu người dùng nhập lại(cũng tương tự như việc bắt buộc nhập).

Ví dụ:

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

Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail:
<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>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">

</form>

Mình sẽ nói kỹ hơn về việc nhập đúng ký tự ở phần dưới nhé!

3. Xác thực dữ liệu đầu vào trong PHP – PHP Validate

3.1. Validate chuỗi rỗng

Với kiểu này ta sẽ xác thực người dùng có nhập thông tin hay không. Nếu đã nhập rồi thì ta sẽ cho phép người dùng gửi dữ liệu, còn nếu chưa ta sẽ báo lỗi cho người dùng để họ nhập lại.

Ví dụ: ở các ví dụ của phần này ta sẽ lấy luôn form đã làm ở trên để làm ví dụ luôn nhé. Ta sẽ thêm code PHP như sau:

<?php
if(isset($_POST['text'])) {
    $name = $_POST ["name"];
    if (empty($name)) 
    {  
        echo "Trường này là bắt buộc.";           
    }
    else 
    {
        echo $name; 
    }
}
?>

3.2. Validate chuỗi

Kiểu này sẽ chỉ cho ta nhập bảng chữ cái hoặc khoảng trắng.

Vẫn là form ví dụ trên ta sẽ thay code PHP như sau:

if (!preg_match ("/^[a-zA-z]*$/",$name)) 
    {  
        echo "Chỉ cho phép nhập chữ cái và khoảng trắng.";           
    }
    else 
    {
        echo $name; 
    }

3.3. Validate số điện thoại

Trường hợp này sẽ chỉ cho ta nhập số.

Ví dụ:

$number = $_POST ["number"];
    if (!preg_match ("/^[0-9]*$/",$number)) 
    {  
        echo "Vui lòng nhập số.";           
    }
    else 
    {
        echo $number; 
    }

3.4. Validate email

Kiểu này sẽ kiểm tra cho ta email có hợp lệ không – ở đây sẽ phải chứa @

Ví dụ:

$email = $_POST ["email"];
    $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$^";  
    if (!preg_match ($pattern, $email) )
    {  
        echo "Vui lòng địa chỉ Email.";           
    }
    else 
    {
        echo $email; 
    }

3.5. Validate URL

Kiểm tra nếu có URL phải là thanh URL hợp lệ

Ví dụ:

$webUrl = $_POST ["webUrl"];
    $patternUrl = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
    if (!preg_match($patternUrl, $webUrl)) 
    {  
        echo "Yêu cầu nhập chính xác đường dẫn.";           
    }
    else 
    {
        echo $webUrl; 
    }

3.6. Validate kiểm tra độ dài

Ở đây ta sẽ kiểm tra độ dài dữ liệu người dùng nhập vào. Ví dụ như số điện thoại cần tối thiểu 10 ký tự, hay họ tên cần tối thiểu 6 ký tự,… Ta sẽ dùng hàm strlen để đếm ký tự nhập vào sau đó so sánh với số ký tự điều kiện. Ta dùng if…else thông báo lỗi và in ra kết quả.

Ví dụ:

$name = $_POST ["name"];
    $length  =  strlen($name); 
    if ($length < 6) 
    {  
        echo "Tên cần tối thiểu 6 ký tự.";           
    }
    else 
    {
        echo $name; 
    }