Bài 28: Hướng dẫn Validate Form trong PHP

Ở bài trước tất cả chúng ta đã tạo form để nhận dữ liệu của người dùng. Nhưng như mình đã nói. Dữ liệu của người dùng có thể “Không sạch”.

Vì vậy, trong Lập trình website hay bất kì lập trình vận dụng nào khác. Tất cả chúng ta phải xác thực & làm sạch dữ liệu hay thường được gọi là validate form.

Trong hướng dẫn này, bạn sẽ khám phá cách validate form trong PHP.

Hướng dẫn Validate Form trong PHP

Hướng dẫn Làm sạch & Xác thực dữ liệu (Validate) trong PHP

Bạn đã thấy trong các bài hướng dẫn trước, công cuộc bắt & hiển thị dữ liệu của form đã gửi khá dễ dàng.

Trong hướng dẫn này, bạn sẽ khám phá cách triển khai một form liên hệ dễ dàng trên website của mình cho phép người dùng gửi đánh giá & bình luận của họ qua tin nhắn hộp thư online.

Tất cả chúng ta sẽ sử dụng cùng hàm PHP mail() để gửi tin nhắn hộp thư online.

Tất cả chúng ta cũng sẽ triển khai một số chức năng bảo mật căn bản như Làm sạch & Xác thực dữ liệu đầu vào của người dùng để chắc nịch rằng người dùng chẳng thể chèn dữ liệu độc hại (chẳng hạn như tiêm injection) có thể làm tổn hại đến bảo mật website hoặc có thể phá vỡ website.

Sau đây là tập lệnh toàn bộ trong một của các bạn, nó thực hiện những việc sau:

  • Nó sẽ yêu cầu người dùng nhập đánh giá ​​của mình về website.
  • Cốt truyện tương đương hiển thị form liên hệ & giải quyết dữ liệu form liên hệ đã gửi.
  • Cốt truyện làm sạch & xác thực dữ liệu đầu vào của người dùng. Nếu bất kỳ trường bắt buộc nào (được đánh dấu *) bị thiếu hoặc xác thực không thành công do nhập sai, tập lệnh sẽ hiển thị lại form với nhắc nhở lỗi cho trường tương ứng.
  • Cốt truyện ghi nhớ các trường mà người dùng đã điền & điền trước các trường đó khi biểu mẫu được hiển thị lại do lỗi xác thực.
  • Nếu dữ liệu được gửi bởi người dùng có thể chấp thuận được & mọi thứ đều ổn, nó sẽ gửi tin nhắn hộp thư online đến quản trị viên website & hiện thông báo thành công cho người dùng.
Xem Thêm  Biến Python - tên biến trong python

Tạo file có tên là contact.php & lưu trong thư mục gốc dự án của các bạn:

<?php
// Functions to filter user inputs
function filterName($field){
    // Làm sạch tên người dùng
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    // Xác thực tên người dùng
    if(filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Zs]+$/")))){
        return $field;
    } else{
        return FALSE;
    }
}    
function filterEmail($field){
    // Làm sạch Thư điện tử
    $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL);
    
    // Xác thực Thư điện tử
    if(filter_var($field, FILTER_VALIDATE_EMAIL)){
        return $field;
    } else{
        return FALSE;
    }
}
function filterString($field){
    // Làm sạch bài viết
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    if(!empty($field)){
        return $field;
    } else{
        return FALSE;
    }
}
 
// Khai báo biến & khởi tạo các giá trị trống
$nameErr = $emailErr = $messageErr = "";
$name = $tin nhắn hộp thư online = $subject = $message = "";
 
// Giải quyết dữ liệu biểu mẫu khi biểu mẫu được gửi
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Xác thực tên người dùng
    if(empty($_POST["name"])){
        $nameErr = "Nhập tên của bạn.";
    } else{
        $name = filterName($_POST["name"]);
        if($name == FALSE){
            $nameErr = "Nhập tên hợp lệ.";
        }
    }
    
    // Xác thực Thư điện tử
    if(empty($_POST["email"])){
        $emailErr = "Nhập địa chỉ Email.";     
    } else{
        $tin nhắn hộp thư online = filterEmail($_POST["email"]);
        if($tin nhắn hộp thư online == FALSE){
            $emailErr = "Nhập email hợp lệ.";
        }
    }
    
    // Xác thực tiêu đề
    if(empty($_POST["subject"])){
        $subject = "";
    } else{
        $subject = filterString($_POST["subject"]);
    }
    
    // Xác thực bài viết
    if(empty($_POST["message"])){
        $messageErr = "Điền nhận xét.";     
    } else{
        $message = filterString($_POST["message"]);
        if($message == FALSE){
            $messageErr = "Điền nhận xét hợp lệ.";
        }
    }
    
    // Test input errors before sending tin nhắn hộp thư online
    if(empty($nameErr) && empty($emailErr) && empty($messageErr)){
        // Địa chỉ Thư điện tử người nhận
        $to = 'webmaster@example.com';
        
        // Tạo tiêu đề Thư điện tử
        $headers = 'From: '. $tin nhắn hộp thư online . "rn" .
        'Reply-To: '. $tin nhắn hộp thư online . "rn" .
        'Ҳ-Mailer: PHP/' . phpversion();
        
        // Gửi Thư điện tử
        if(mail($to, $subject, $message, $headers)){
            echo '<ᴘ class="success">Đánh giá của các bạn gửi thành công!</ᴘvàgt;';
        } else{
            echo '<ᴘ class="error">Chẳng thể gửi. Vui lòng thử lại sau!</ᴘvàgt;';
        }
    }
}
?>
<!DOCTYPE htmlvàgt;
<html lang="en">
<headvàgt;
    <meta charset="UTF-8">
    <titlevàgt;Contact Form</titlevàgt;
    <style type="text/css">
        .error{ color: red; }
        .success{ color: green; }
    </stylevàgt;
</headvàgt;
<bodyvàgt;
    <h2vàgt;Contact Usvàlt;/h2vàgt;
    <ᴘvàgt;Please fill in this form and send us.</ᴘvàgt;
    <form action="contact.php" method="post">
        <ᴘvàgt;
            <label for="inputName">Name:<supvàgt;*</supvàgt;</labelvàgt;
            <input type="text" name="name" id="inputName" value="<?php echo $name; ?>">
            <span class="error"><?php echo $nameErr; ?></spanvàgt;
        </ᴘvàgt;
        <ᴘvàgt;
            <label for="inputEmail">Thư điện tử:<supvàgt;*</supvàgt;</labelvàgt;
            <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>">
            <span class="error"><?php echo $emailErr; ?></spanvàgt;
        </ᴘvàgt;
        <ᴘvàgt;
            <label for="inputSubject">Subject:</labelvàgt;
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </ᴘvàgt;
        <ᴘvàgt;
            <label for="inputComment">Message:<supvàgt;*</supvàgt;</labelvàgt;
            <textarea name="message" id="inputComment" rows="5" cols="30"><?php echo $message; ?></textareavàgt;
            <span class="error"><?php echo $messageErr; ?></spanvàgt;
        </ᴘvàgt;
        <input type="submit" value="Send">
        <input type="reset" value="Reset">
    </formvàgt;
</bodyvàgt;
</htmlvàgt;

Giải thích code Validate Form trong PHP

Bạn có thấy, đây là đoạn mã Validate form dễ dàng nhất. Tất cả chúng ta sẽ đi vào giải thích rõ ràng và cụ thể:

  • filterName() function (line no-03) công nhận giá trị đầu vào là tên người dùng. Tên hợp lệ chỉ có thể chứa các ký tự chữ cái (a-z, ?-Ż).
  • filterEmail() function (line no-14) công nhận giá trị đầu vào như địa chỉ tin nhắn hộp thư online.
  • filterString() function (line no-25) chỉ làm sạch giá trị đầu vào bằng cách loại bỏ thẻ HTML & các ký tự đặc biệt.
  • Tính chất action="contact.php" (line no-111) bên trong thẻ <formvàgt; chỉ định rằng tệp contact.php sẽ được thực thi khi người dùng nhấn nút gửi.
  • Mã PHP bên trong giá trị tính chất của thẻ <inputvàgt; & textarea, chẳng hạn:
    <?php echo $name; ?> Hiển thị giá trị được điền sẵn khi biểu mẫu được hiển thị lại xảy ra lỗi xác thực.
  • Mã PHP bên trong class .error, chẳng hạn <span class=”error”><?php echo $nameErr; ?></spanvàgt; Hiển thị lỗi theo trường tương ứng.
Xem Thêm  SQL KHÔNG TỒN TẠI: Tìm các bản ghi chưa được so khớp - sql nơi không tồn tại

Phần còn trong mã Validate form trong PHP tất cả chúng ta đã khám phá trong các chương trước. Để tham khảo thêm về vệ sinh & xác thực các bộ lọc, vui lòng xem đọc thêm PHP Fillter tại home page của PHP tại đây

Xem qua: Code hướng dẫn Validate form bằng PHP

Viết một bình luận