Giới thiệu về form trong HTML
Form là 1 đối tượng (hoặc cụ thể hơn là thẻ <form>
) trong HTML dùng để nhận dữ liệu từ người dùng, giúp gửi yêu cầu của người dùng đến trang xử lý trong trang web.
Thẻ <form>
trong HTML là một container chứa các thành phần nhập liệu, các thành phần trong form gọi là Form Field như:
- Text Field.
- Password Field.
- Check Box.
- Button.
- ...
Cú pháp:
<form name="..." action="..." method="..."> Các thành phần của form </form>
Các thuộc tính của form:
name
: tên của form.action
: chỉ định trang web sẽ nhận dữ liệu từ khi form có sự kiện click buttonsubmit
.method
: xác định phương thức truyền dữ liệu (POST, GET).
Tìm hiểu POST và GET trong PHP
POST, GET là phương thức truyền dữ liệu trong form từ trang này qua trang khác và khối lượng dữ liệu truyền đi của form bị giới hạn bởi chiều dài tối đa của một URL (chiều dài tối đa của một URL là 2048 bytes và giới hạn này cũng phụ thuộc vào trình duyệt web).
Để truyền được dữ liệu trong form từ trang này sang trang khác có những yêu cầu sau:
- Dữ liệu cần truyền phải nằm trong cặp thẻ
<form></form>
. - Dữ liệu cần truyền phải nhập vào các form field.
- Dữ liệu chỉ được truyền đi khi nhấn button submit.
Để demo trong quá trình trình bày tạo 2 file .php
là a.php
và b.php
trong thư mục C:\xampp\htdocs\DemoPostGet
.
Trong đó file a.php
sẽ có một form chứa các trường dữ liệu là username
và password
do người dùng nhập vào. File b.php
sẽ lấy các thông tin từ form bên trang a.php
truyền sang và hiển thị lên trình duyệt khi nhất button submit. Để nhận dữ liệu từ form truyền qua sử dụng biến toàn cục trong PHP.
- Nếu dùng phương thức POST:
$_POST[‘field_name’]
. - Nếu dùng phương thức GET:
$_GET[‘field_name’]
. - Nếu không xác định được phương thức truyền:
$_REQUEST[‘field_name’]
.
Giống nhau
Phương thức POST và GET đều là cơ chế truyền dữ liệu trong form từ trang này sang khác.
Khác nhau
Phương thức POST
Các dữ liệu của form được truyền ngầm và dữ liệu truyền đi không phụ thuộc vào URL.
Ưu điểm
- Bảo mật hơn phương thức GET.
- Không giới hạn dung lượng dữ liệu truyền đi.
Nhược điểm
Dữ liệu truyền đi không tường mình (cơ chế truyền ngầm định) do đó sẽ phát sinh lỗi tiềm ẩn.
Demo
File a.php
sử dụng phương thức POST:
<html> <head></head> <title>Demo Post and Get</title> <body> <form name="frmLogin" action="b.php" method="post"> <label>User Name: </label> <input type="text" name="txtUserName"/><br/> <label>Password: </label> <input type="password" name="txtPassword" /><br/> <input type="submit" value="Log in"/><br/> </form> </body> </html>
Kết quả khi chạy trên trình duyệt file a.php
File b.php
sử dụng biến toàn cục $_POST
để lấy dữ liệu từ form truyền sang.
<html> <head> </head> <body> <?php $username = $_POST['txtUserName']; $password = $_POST['txtPassword']; echo "<p>UserName : ".$username."</p>"; echo "<p>Password : ".$password."</p>"; ?> </body> </html>
Nhập UserName
và Password
.
Nhấn submit
sẽ thấy dữ liệu được truyền ngầm định mà không hiện lên ở URL.
Phương thức GET
Các dữ liệu đường truyền đi được hiển thị lên URL của trình duyệt và dữ liệu truyền đi phụ thuộc vào độ dài đối đa của URL.
Ưu điểm
- Người dùng có thể bookmark lại địa chỉ URL.
- Người dùng có thể giả lập lại phương thức GET để truyền dữ liệu mà không cần thông qua form (sử dụng query string).
Nhược điểm
- Không thích hợp truyền dữ liệu có tính bảo mật như password (do dữ liệu có thể xuất hiện rõ ràng trên trình duyệt web).
- Dung lượng dữ liệu truyền đi có giới hạn (phụ thuộc vào độ dài tối đa của URL).
Demo
File a sử dụng phương thức GET
<html> <head></head> <title>Demo Post and Get</title> <body> <form name="frmLogin" action="b.php" method="get"> <label>User Name: </label> <input type="text" name="txtUserName"/><br/> <label>Password: </label> <input type="password" name="txtPassword" /><br/> <input type="submit" value="Log in"/> <br/> </form> </body> </html>
File b.php
sử dụng biến toàn cục $_GET
để lấy dữ liệu từ form truyền sang.
<html> <head> </head> <body> <?php $username = $_GET['txtUserName']; $password = $_GET['txtPassword']; echo "<p>UserName : ".$username."</p>"; echo "<p>Password : ".$password."</p>"; ?> </body> </html>
Chạy file a.php
sau đó nhập nội dung như trường hợp sử dụng phương thức POST sẽ thấy kết quả là các dữ liệu được truyền đi được hiển thị lên URL của trình duyệt. Lưu ý là dữ liệu truyền đi là có giới hạn phụ thuộc vào độ dài của URL (tối đa 2048 bytes).
Download source code.