$ _POST được sử dụng để thu thập các giá trị từ một biểu mẫu có phương thức = "post". Biến $ _POST là một mảng các tên và giá trị biến được gửi bởi phương thức HTTP POST. Khi tìm hiểu về phương thức $_POST trong PHP, chúng ta sẽ thấy được, nó sử dụng để thu thập các giá trị từ một biểu mẫu có phương thức = "post". Thông tin được gửi từ biểu mẫu có phương thức post không hiển thị với người khác và không có giới hạn về lượng thông tin cần gửi.
Có hai cách mà trình duyệt khách có thể gửi thông tin đến máy chủ web.
Phương thức GET
Phương thức POST
Trước khi trình duyệt gửi thông tin, trình duyệt sẽ mã hóa thông tin bằng cách sử dụng lược đồ được gọi là mã hóa URL. Trong lược đồ này, các cặp tên/giá trị được nối với các dấu bằng và các cặp khác nhau được phân tách bằng dấu &.
name1=value1&name2=value2&name3=value3
Dấu cách được xóa và được thay thế bằng ký tự + và bất kỳ ký tự không phải số nào khác được thay thế bằng giá trị thập lục phân. Sau khi thông tin được mã hóa, nó sẽ được gửi đến máy chủ.
+ Phương thức GET
Phương thức GET gửi thông tin người dùng được mã hóa được thêm vào yêu cầu trang. Trang và thông tin được mã hóa được phân cách bởi dấu (?).
http://www.test.com/index.htm?name1=value1&name2=value2
Phương thức GET tạo ra một chuỗi dài xuất hiện trong nhật ký máy chủ của bạn, trong hộp Location: của trình duyệt. Phương thức GET bị hạn chế chỉ gửi tối đa 1024 ký tự.
Không bao giờ sử dụng phương thức GET nếu bạn có mật khẩu hoặc thông tin nhạy cảm khác được gửi đến máy chủ.
GET không thể được sử dụng để gửi dữ liệu nhị phân, như hình ảnh hoặc tài liệu từ, đến máy chủ. Dữ liệu được gửi bằng phương thức GET có thể được truy cập bằng biến môi trường QUERY_STRING. PHP cung cấp mảng kết hợp $ _GET để truy cập tất cả các thông tin được gửi bằng phương thức GET.
Hãy thử ví dụ sau bằng cách đặt mã nguồn trong tập lệnh test.php.
if( $_GET["name"] || $_GET["age"] ) {
echo "Welcome ". $_GET['name']. "
";
echo "You are ". $_GET['age']. " years old.";
exit();
}
?>
Name:
Age:
Nó sẽ tạo ra kết quả sau:
+ Phương thức POST
Phương thức POST chuyển thông tin qua các tiêu đề HTTP. Thông tin được mã hóa như được mô tả trong trường hợp phương thức GET và được đưa vào tiêu đề có tên QUERY_STRING. Phương thức POST không có bất kỳ hạn chế nào về kích thước dữ liệu được gửi đi.
Phương thức POST có thể được sử dụng để gửi ASCII cũng như dữ liệu nhị phân.
Dữ liệu được gửi bằng phương thức POST đi qua tiêu đề HTTP để bảo mật phụ thuộc vào giao thức HTTP. Bằng cách sử dụng HTTP bảo mật, bạn có thể đảm bảo rằng thông tin của bạn được bảo mật.
PHP cung cấp mảng kết hợp $ _POST để truy cập tất cả các thông tin được gửi bằng phương thức POST.
Hãy thử ví dụ sau bằng cách đặt mã nguồn trong tập lệnh test.php.
if( $_POST["name"] || $_POST["age"] ) {
if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) {
die ("invalid name and name should be alpha");
}
echo "Welcome ". $_POST['name']. "
";
echo "You are ". $_POST['age']. " years old.";
exit();
}
?>
Name:
Age:
Nó sẽ tạo ra kết quả sau:
+ Biến $ _REQUEST
Biến PHP $ _REQUEST chứa nội dung của cả $ _GET, $ _POST và $ _COOKIE. Chúng tôi sẽ thảo luận về biến $ _COOKIE khi chúng tôi sẽ giải thích về cookie.
Biến PHP $ _REQUEST có thể được sử dụng để lấy kết quả từ dữ liệu biểu mẫu được gửi với cả hai phương thức GET và POST.
Hãy thử ví dụ sau bằng cách đặt mã nguồn trong tập lệnh test.php.
if( $_REQUEST["name"] || $_REQUEST["age"] ) {
echo "Welcome ". $_REQUEST['name']. "
";
echo "You are ". $_REQUEST['age']. " years old.";
exit();
}
?>
Name:
Age:
Ở đây $ _PHP_SELF biến chứa tên của kịch bản tự mà nó đang được gọi.
Nó sẽ tạo ra kết quả sau:
Cả GET và POST tạo một mảng (ví dụ mảng (key => value, key2 => value2, key3 => value3, ...)). Mảng này chứa các cặp khó/giá trị, trong đó các khóa là tên của các điều khiển biểu mẫu và các giá trị là dữ liệu đầu vào từ người dùng.
Cả GET và POST đều được coi là $ _GET và $ _POST. Đây là superglobals, có nghĩa là chúng luôn có thể truy cập, 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 tệp nào mà không phải làm bất cứ điều 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 kịch bản lệnh hiện tại thông qua phương thức HTTP POST.
Khi nào sử dụng GET?
Thông tin được gửi từ một biểu mẫu có phương thức GET hiển thị cho tất cả mọi người (tất cả các tên và giá trị biến được hiển thị trong URL). GET cũng có giới hạn về 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, bạn có thể đánh dấu trang. Điều này có thể hữu ích trong một số trường hợp.
Khi nào sử dụng POST?
Thông tin được gửi từ một biểu mẫu có phương thức POST là ẩn với người khác (tất cả các tên / giá trị được nhúng bên trong phần thân của yêu cầu HTTP) và không có giới hạn về lượng thông tin cần gửi.
Hơn nữa POST hỗ trợ chức năng nâng cao như hỗ trợ cho đầu vào nhị phân nhiều phần trong khi tải tệp lên máy chủ. Tuy nhiên, vì các biến không được hiển thị trong URL, bạn không thể đánh dấu trang đó.
Qua bài viết này các bạn đã không chỉ được tìm hiểu về phương thức $_POST trong PHP mà còn tìm hiểu được về phương thức GET. Hãy tiếp tục theo dõi những bài tập tiếp theo của chúng tôi về lập trình PHP.
Một số kiến thức về PHP khác bạn nên đọc: