Validation Form sử dụng PHP

Trong bài này sẽ hướng dẫn Validation Form sử dụng PHP. Hiểu đơn giản là bắt lỗi người dùng nhập vào nếu sai sẽ xuất thông báo lỗi.

Có hai kiểu Validation có sẵn trong PHP:

  • Client-Side Validation: Validation được thực hiện trên trình duyệt web ở Client
  • Server-Side Validation: Validation được thực hiện ở phía Server

Ví dụ: ta có 1 form như sau:

    <h2>Ví dụ Form Validation sử dụng PHP</h2>
    <form method="post" action="<?php $_PHP_SELF ?>">
    <label>Họ tên:</label> <input type="text" name="name">
    <br><br>
    <label>E-mail:</label> <input type="text" name="email">
    <br><br>
    <label>Website:</label> <input type="text" name="website">
    <br><br>
    <label>Bình luận:</label> <textarea name="comment" rows="5" cols="40"></textarea>
    <br><br>
    <label>Giới tính:</label>
    <input type="radio" name="gender" value="Nam" checked>Nam
    <input type="radio" name="gender" value="Nữ">Nữ
    <br><br>
    <input type="submit" name="submit" value="Submit">
    </form>

Hiển thị thông tin người dùng sau khi nhấn submit form

    $name = $email = $gender = $comment = $website = "";
    if (isset($_POST["submit"])) {
        $name = test_input($_POST["name"]);
        $email = test_input($_POST["email"]);
        $website = test_input($_POST["website"]);
        $comment = test_input($_POST["comment"]);
        $gender = test_input($_POST["gender"]);
    }
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }

    if(isset($_POST["submit"])) {
        echo "

Thông tin của bạn:

"; echo "Họ tên: " . $name; echo "
"; echo "E-mail: " . $email; echo "
"; echo "Website: " . $website; echo "
"; echo "Bình luận: " . $comment; echo "
"; echo "Giới tính: " . $gender; exit(); } ?>
Xem ví dụ »

Các trường bắt buộc

Trường dữ liệu Qui tắc Validation
Họ tên Yêu cầu chữ cái và khoảng trắng
E-mail Yêu cầu @.
Website Nếu có, phải là một URL hợp lệ
Bình luận Không bắt buộc
Giới tính Chọn 1 trong 2, tuy nhiên đã đặt mặc định là nam nên không cần kiểm tra

Kiểm tra họ tên là bắt buộc và chỉ có thể là chữ cái và khoảng trắng

    if (empty($_POST["name"])) {
        $nameErr = "Bạn phải nhập họ tên";
    } else {
        $name = test_input($_POST["name"]);
        // kiểm tra tên chỉ có thể là chữ cái và khoảng trắng
        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $nameErr = "Họ tên chỉ có thể là chữ cái và khoảng trắng";
        }
    }

Kiểm tra E-mail là bắt buộc và có @ và '.'

    if (empty($_POST["email"])) {
        $emailErr = "Bạn phải nhập e-mail";
    } else {
        $email = test_input($_POST["email"]);
        // kiểm tra xem địa chỉ e-mail có đúng định dạng hay không
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Định dạng email không hợp lệ";
        }
    }

Kiểm tra Website có url hợp lệ hay không

    if (empty($_POST["website"])) {
        $website = "";
    } else {
        $website = test_input($_POST["website"]);
        // kiểm tra url hợp lệ hay không
        if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
            $websiteErr = "Url không hợp lệ";
        }
    }

Code hoàn thiện bây giờ:

    <!DOCTYPE HTML>
    <html>
    <head>
        <style>
            body {
                padding: 5px;
            }
            label {
                width: 15%;
                float: left;
            }
            input {
                padding: 3px;
            }
            .error {color: #FF0000;}
        </style>
    </head>
    <body>

    <?php
        // define variables and set to empty values
        $nameErr = $emailErr = $genderErr = $websiteErr = "";
        $name = $email = $gender = $comment = $website = "";

        if (isset($_POST["submit"])) {
            if (empty($_POST["name"])) {
                $nameErr = "Bạn phải nhập họ tên";
            } else {
                $name = test_input($_POST["name"]);
                // kiểm tra tên chỉ có thể là chữ cái và khoảng trắng
                if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
                    $nameErr = "Họ tên chỉ có thể là chữ cái và khoảng trắng";
                }
            }

            if (empty($_POST["email"])) {
                $emailErr = "Bạn phải nhập e-mail";
            } else {
                $email = test_input($_POST["email"]);
                // kiểm tra xem địa chỉ e-mail có đúng định dạng hay không
                if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                    $emailErr = "Định dạng email không hợp lệ";
                }
            }

            if (empty($_POST["website"])) {
                $website = "";
            } else {
                $website = test_input($_POST["website"]);
                // kiểm tra url hợp lệ hay không
                if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
                    $websiteErr = "Url không hợp lệ";
                }
            }

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

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

    <h2>PHP Form Validation Example</h2>
    <p><span class="error">* Các trường bắt buộc</span></p>
    <form method="post" action="<?php $_PHP_SELF ?>">
        <label>Họ tên:</label> <input type="text" name="name">
        <span class="error">* <?php echo $nameErr;?></span>
        <br><br>
        <label>E-mail:</label> <input type="text" name="email">
        <span class="error">* <?php echo $emailErr;?></span>
        <br><br>
        <label>Website:</label> <input type="text" name="website">
        <span class="error"><?php echo $websiteErr;?></span>
        <br><br>
        <label>Bình luận:</label> <textarea name="comment" rows="5" cols="40"></textarea>
        <br><br>
        <label>Giới tính:</label>
        <input type="radio" name="gender" checked value="Nam">Nam
        <input type="radio" name="gender" value="Nữ">Nữ
        <br><br>
        <input type="submit" name="submit" value="Submit">
    </form>

    <?php
    if(isset($_POST["submit"])) {
        echo "<h2>Thông tin của bạn:</h2>";
        echo "<strong>Họ tên: </strong>" . $name;
        echo "<br>";
        echo "<strong>E-mail: </strong>" . $email;
        echo "<br>";
        echo "<strong>Website: </strong>" . $website;
        echo "<br>";
        echo "<strong>Bình luận: </strong>" . $comment;
        echo "<br>";
        echo "<strong>Giới tính: </strong>" . $gender;
        exit();
    }
    ?>

    </body>
    </html>
Xem ví dụ »