PHP - GET & POST

Vì PHP chủ yếu được sử dụng để phát triển ứng dụng web, dữ liệu được gửi từ trình duyệt khách chủ yếu sử dụng các phương thức yêu cầu HTTP kiểu GET và POST. Giao thức HTTP cũng định nghĩa các phương thức khác để gửi yêu cầu đến máy chủ. Chúng bao gồm PUT, DELETE, HEAD và OPTIONS (ngoài các phương thức GET và POST). Trong chương này, chúng ta sẽ tập trung vào cách PHP xử lý các phương thức GET và POST.

The GET Method

Phương thức GET gửi thông tin người dùng đã được mã hóa kèm theo yêu cầu trang. Trang và thông tin đã mã hóa được tách biệt bởi ký tự ? .

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 Vị trí: của trình duyệt.

  • Phương thức GET bị giới hạn 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ần 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 Word, đến máy chủ.

  • Dữ liệu được gửi bằng phương thức GET có thể được truy cập thông qua biến môi trường QUERY_STRING.

  • PHP cung cấp $_GET mảng liên kết để truy cập tất cả thông tin đã gửi bằng phương thức GET.

Hãy thử ví dụ sau bằng cách đặt mã nguồn vào tập tin test.php.

<?php
   if( $_GET["name"] || $_GET["age"] ) {
      echo "Welcome ". $_GET['name']. "<br />";
      echo "You are ". $_GET['age']. " years old.";
      
      exit();
   }
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "GET">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

Nó sẽ tạo ra kết quả sau −

Forms

The POST Method

Phương thức POST chuyển thông tin qua các tiêu đề HTTP. Thông tin được mã hóa như đã mô tả trong trường hợp phương thức GET và được đưa vào một tiêu đề gọi là 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.

  • Phương thức POST có thể được sử dụng để gửi dữ liệu 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, do đó độ 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 mình được bảo mật.

  • PHP cung cấp $_POST mảng liên kết để truy cập tất cả thông tin đã gửi bằng phương thức POST.

Hãy thử ví dụ sau bằng cách đặt mã nguồn vào tập tin test.php.

<?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']. "<br />";
      echo "You are ". $_POST['age']. " years old.";
      
      exit();
   }
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "POST">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

Nó sẽ tạo ra kết quả sau −

Forms

Difference between GET and POST

Sự khác biệt chính giữa phương thức GET và POST là trong khi các tham số yêu cầu được gắn vào URL thì chúng sẽ hiển thị trong URL của trình duyệt, dữ liệu POST được bao gồm trong thân tin nhắn và không được tiết lộ trong URL. Do đó, phương thức GET không nên được sử dụng để gửi dữ liệu nhạy cảm đến máy chủ.

Thứ hai, dữ liệu yêu cầu trong phương thức GET không được vượt quá 2048 ký tự và chỉ có thể bao gồm các ký tự ASCII, trong khi với phương thức POST, không có giới hạn nào đối với dữ liệu yêu cầu, dữ liệu có thể ở dạng nhị phân (kích thước tối đa mặc định của dữ liệu POST được xác định bởi cài đặt post_max_size trong tệp php.ini).

PHP cung cấp ba superglobals sau đây để lấy và xử lý các tham số yêu cầu −

  • $_GET − một mảng liên kết để truy cập tất cả thông tin đã gửi bằng phương thức GET.

  • $_POST − một mảng liên kết để truy cập tất cả thông tin đã gửi bằng phương thức POST.

  • $_REQUEST − một mảng liên kết có thể được sử dụng để nhận kết quả từ dữ liệu biểu mẫu được gửi với cả phương thức GET và POST.

$_GET Array

Bạn có thể truyền các tham số yêu cầu dưới dạng chuỗi truy vấn được gắn trực tiếp vào URL.

Lưu đoạn mã PHP sau vào thư mục gốc tài liệu ( htdocs ) với tên "hello.php" −

<?php
   echo "First name: " . $_REQUEST['first_name'] . " " . 
      "Last Name: " . $_REQUEST['last_name'] . "";
?>

Nhập http://localhost/hello.php?first_name=Amar&last_name=Sharma vào URL trong cửa sổ trình duyệt (đảm bảo rằng máy chủ PHP đang chạy).

Mảng $_GET được điền từ yêu cầu và đầu ra được hiển thị như bên dưới −

First name: Amar Last Name: Sharma

Bạn cũng có thể điền dữ liệu từ biểu mẫu HTML vào mảng $_GET nếu thuộc tính phương thức của nó là GET.

Sử dụng mẫu HTML sau để thu thập dữ liệu và gửi nó đến "hello.php". Dưới thư mục gốc của tài liệu, hãy lưu đoạn mã sau dưới dạng "hello.html" −

<form action="hello.php" method="get">
   First Name: <input type="text" name="first_name"/>  <br/>
   Last Name: <input type="text" name="last_name" />
   <input type="submit" value="Submit" />
</form>

Trong trình duyệt của bạn, nhập URL "http://localhost/hello.html" −

PHP Get Post

Bạn nên nhận được output tương tự trong cửa sổ trình duyệt.

$_POST Array

Cách dễ nhất để gửi dữ liệu đến máy chủ bằng yêu cầu POST là chỉ định thuộc tính phương thức của biểu mẫu HTML là POST. Giả sử rằng URL trong trình duyệt là "http://localhost/hello.php", method=POST được thiết lập trong một biểu mẫu HTML "hello.html" như trong ví dụ trước −

<form action="hello.php" method="post">
   First Name: <input type="text" name="first_name"/>  <br/>
   Last Name: <input type="text" name="last_name" />
   <input type="submit" value="Submit" />
</form> 

Tập tin "hello.php" (trong thư mục gốc tài liệu) lấy dữ liệu từ biểu mẫu trong mảng $_POST và trả về nó như là phản hồi HTTP đến trình duyệt.

<?php
   echo "First name: " . $_POST['first_name'] . " " . 
      "Last Name: " . $_POST['last_name'] . "";
?>

Mở "http://localhost/hello.html" trong trình duyệt của bạn. Dữ liệu đã nhập được máy chủ truy xuất và hiển thị lại cho khách hàng, như trong ví dụ trước.