PHP – Xử lý Form

PHP superglobals $_GET và $_POST được dùng để lưu trữ form-data.

PHP – HTML Form đơn giản

Ví dụ dưới hiển thị 1 form HTML đơn giản với hai trường input và nút gửi:

<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>

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

Để hiển thị dữ liệu đã gửi, chúng ta có thể đơn giản là echo tất cả các biến. File “Welcome.php” như sau:

<html>
<body>

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

</body>
</html>

Kết quả tương tự như sau:

Welcome John
Your email address is john.doe@example.com

Ví dụ tương tự cho method là 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 có code như sau:

<html>
<body>

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

</body>
</html>

Ở trên chỉ là ví dụ đơn giản về việc gửi dữ liệu đi. Ở bài sau chúng ta sẽ validate dữ liệu từ form để bảo vệ script của bạn khỏi mã độc hại.

GET với POST

Cả GET và POST đều tạo một mảng (ví dụ array( key => value, key2 => value2, key3 => value3, …)). Mảng này chứa các cặp key/value, trong đó các key là name của các trường nhập (input, textarea…) và các value là dữ liệu nhập vào từ người dùng.

Cả 2 đều là superglobals ($_GET, $_POST). Nghĩa là chúng có thể được truy cập từ bất kỳ phạm vi nào, bất kỳ function, class, hay file nào mà không cần làm bất kỳ điều gì khác.

$_GET là mảng được truyền tới script thông qua tham số của URL.

$_POST là mảng được truyền tới script thông qua phương thức HTTP POST.

Khi nào dùng GET

Data được gửi qua phương thức GET sẽ được hiển thị cho tất cả mọi người (tên biến và giá trị hiển thị trên url). GET cũng giới hạn số lượng dữ liệu gửi đi, khoảng 2000 ký tự. Vì các biến được hiển thị trên URL, bạn có thể sử dụng để đánh dấu số trang, điều này hữu ích trong một số trường hợp.

GET có thể dùng để gửi thông tin không nhạy cảm.

GET không bao giờ dùng để gửi password hay thông tin nhạy cảm khác.

Khi nào dùng POST

Data được gửi bằng phương thức POST sẽ được ẩn với mọi người (Cả key/value được nhúng bên trong HTTP request) và không giới hạn thông tin được gửi.

POST hỗ trợ các chức năng nâng cao như hỗ trợ kiểu nhị phân trong upload file lên server.

Tên biến không hiển thị trên URL nên không thể đánh dấu trang.