Xử lý form trong PHP

Các biến siêu toàn cục $_GET$_POST trong PHP được sử dụng để thu thập dữ liệu biểu mẫu (form).

Xử lý form trong PHP

Ví dụ dưới đây hiển thị một biểu mẫu HTML đơn giản với hai trường đầu vào (NameE-mail) và nút gửi (Submit):

<html>

<body>

    <form action="welcome.php" method="post">
        Name:
        <input type="text" name="name">
        <br> E-mail:
        <input type="text" name="email">
        <br>
        <input type="submit">
    </form>

</body>

</html>

Đây là kết quả:

Form đơn giản trong HTML

Khi người dùng điền vào biểu mẫu ở trên và nhấp vào nút gửi, dữ liệu biểu mẫu được gửi đến file PHP có tên là "welcome.php" để xử lý. Dữ liệu biểu mẫu được gửi bằng phương thức HTTP POST.

Để hiển thị dữ liệu đã gửi, bạn chỉ cần duyệt qua tất cả các trường đầu vào (thuộc tính name của thẻ input) bằng cách sử dụng biến siêu toàn cục $_POST. File "welcome.php" trông sẽ như thế này:

<html>

<body>

    Welcome <?php echo $_POST["name"]; ?>
    <br> Your email address is: <?php echo $_POST["email"]; ?>

</body>

</html>

Đầu ra có thể là một cái gì đó như thế này:

Welcome Trung Nguyen
Your email address is trung.nguyen@example.com

Kết quả tương tự cũng có thể đạt được bằng phương pháp HTTP GET:

<html>

<body>

    <form action="welcome_get.php" method="get">
        Name:
        <input type="text" name="name">
        <br> E-mail:
        <input type="text" name="email">
        <br>
        <input type="submit">
    </form>

</body>

</html>

File "welcome_get.php" trông sẽ như thế này:

<html>

<body>

    Welcome <?php echo $_GET["name"]; ?>
    <br> Your email address is: <?php echo $_GET["email"]; ?>

</body>

</html>

Mã ở trên khá đơn giản. Tuy nhiên, một điều quan trọng còn thiếu là xác thực dữ liệu đầu vào do người dùng nhập. Bạn cần xác thực dữ liệu biểu mẫu để bảo vệ tập lệnh của bạn khỏi mã độc.

Hãy đảm bảo tính BẢO MẬT khi xử lý các biểu mẫu PHP!

Trang này không chứa bất kỳ xác thực biểu mẫu nào, nó chỉ hiển thị cách bạn có thể gửi và truy xuất dữ liệu biểu mẫu.

Tuy nhiên, các trang tiếp theo sẽ chỉ ra cách xử lý các biểu mẫu PHP với tính bảo mật! Xác thực hợp lệ dữ liệu biểu mẫu là rất quan trọng để bảo vệ biểu mẫu của bạn khỏi tin tặc và kẻ gửi thư rác!

GET với POST

Cả GET và POST đều tạo một mảng (ví dụ: mảng (key1 => value1, key2 => value2, key3 => value3, ...)). Mảng này chứa các cặp khóa / giá trị, trong đó các khóa là tên của các trường đầu vào của biểu mẫu (thuộc tính name của các thẻ input như ở ví dụ trên) và giá trị là dữ liệu đầu vào từ người dùng.

Cả GET và POST đều được coi là các $_GET$_POST. Đây là các biến siêu toàn cục, có nghĩa là chúng luôn có thể truy cập được, bất kể phạm vi - và bạn có thể truy cập chúng từ bất kỳ hàm, lớp hoặc file nào mà không phải làm gì đặc biệt.

$_GET là một mảng các biến được truyền cho tập lệnh hiện tại thông qua các tham số URL.

$_POST là một mảng các biến được truyền cho tập lệnh hiện tại thông qua phương thức HTTP POST.

Khi nào nên sử dụng GET?

Thông tin được gửi từ một biểu mẫu với phương thức GET được hiển thị cho mọi người (tất cả tên và giá trị biến được hiển thị trong URL).

GET cũng có giới hạn về số lượng thông tin cần gửi. Giới hạn là khoảng 2000 ký tự. Tuy nhiên, vì các biến được hiển thị trong URL, nên nó có thể được sử dụng để đánh dấu trang. Điều này có thể hữu ích trong một số trường hợp.

GET có thể được sử dụng để gửi các dữ liệu không nhạy cảm.

Lưu ý: KHÔNG BAO GIỜ sử dụng GET để gửi mật khẩu hoặc các thông tin nhạy cảm khác!

Khi nào nên sử dụng POST?

Thông tin được gửi từ một biểu mẫu bằng phương thức POST là vô hình đối với người khác (tất cả tên / giá trị được nhúng trong phần thân của yêu cầu HTTP) và không có giới hạn về số lượng thông tin cần gửi.

Ngoài ra, POST hỗ trợ chức năng nâng cao như hỗ trợ đầu vào nhị phân nhiều phần (multi-part binary input) trong khi tải file lên máy chủ.

Tuy nhiên, vì các biến không được hiển thị trong URL, nên không thể sử dụng để đánh dấu trang.

Các nhà phát triển thích POST để gửi dữ liệu biểu mẫu.

Ở chương tiếp theo, hãy xem cách chúng tôi có thể xử lý các biểu mẫu PHP một cách an toàn!



Bài viết liên quan:

Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.