PHP - GET & POST



由於 PHP 主要用於 Web 應用程式開發,因此瀏覽器客戶端傳送的資料主要採用 GET 和 POST 型別的 HTTP 請求方法。HTTP 協議還定義了其他方法用於將請求傳送到伺服器。它們是 PUT、DELETE、HEAD 和 OPTIONS(除了 GET 和 POST 方法)。在本章中,我們將重點關注 PHP 如何處理 GET 和 POST 方法。

GET 方法

GET 方法傳送編碼的使用者資訊,附加到頁面請求中。頁面和編碼的資訊由字元分隔。

http://www.test.com/index.htm?name1=value1&name2=value2
  • GET 方法生成一個長字串,該字串顯示在伺服器日誌中,以及瀏覽器的 Location: 框中。

  • GET 方法僅限於傳送最多 1024 個字元。

  • 如果要傳送密碼或其他敏感資訊到伺服器,請勿使用 GET 方法。

  • GET 不能用於將二進位制資料(如影像或 Word 文件)傳送到伺服器。

  • 透過 GET 方法傳送的資料可以使用 QUERY_STRING 環境變數訪問。

  • PHP 提供$_GET關聯陣列,可以使用 GET 方法訪問所有傳送的資訊。

透過將原始碼放入 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>

它將產生以下結果 -

Forms

POST 方法

POST 方法透過 HTTP 標頭傳輸資訊。資訊按照 GET 方法中描述的方式進行編碼,並放入名為 QUERY_STRING 的標頭中。

  • POST 方法對要傳送的資料大小沒有限制。

  • POST 方法可用於傳送 ASCII 和二進位制資料。

  • 透過 POST 方法傳送的資料透過 HTTP 標頭,因此安全性取決於 HTTP 協議。透過使用安全 HTTP,您可以確保您的資訊安全。

  • PHP 提供$_POST關聯陣列,可以使用 POST 方法訪問所有傳送的資訊。

透過將原始碼放入 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>

它將產生以下結果 -

Forms

GET 和 POST 之間的區別

GET 和 POST 方法的主要區別在於,雖然附加到 URL 的請求引數在瀏覽器的 URL 中可見,但 POST 資料包含在訊息正文中,並且不會在 URL 中顯示。因此,不應使用 GET 方法將敏感資料傳送到伺服器。

其次,GET 方法中的請求資料不能超過 2048 個字元,並且只能包含 ASCII 字元,而 POST 方法對請求資料沒有限制,也可以是二進位制資料(POST 資料的預設最大大小由 php.ini 檔案中的 post_max_size 設定確定)。

PHP 提供以下三個超全域性變數來檢索和處理請求引數 -

  • $_GET - 一個關聯陣列,用於使用 GET 方法訪問所有傳送的資訊。

  • $_POST - 一個關聯陣列,用於使用 POST 方法訪問所有傳送的資訊。

  • $_REQUEST - 一個關聯陣列,可用於獲取透過 GET 和 POST 方法傳送的表單資料的的結果。

$_GET 陣列

您可以將請求引數以查詢字串的形式直接附加到 URL 中。

將以下 PHP 指令碼儲存在文件根目錄資料夾(htdocs)中,命名為“hello.php” -

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

在瀏覽器視窗中輸入https:///hello.php?first_name=Amar&last_name=Sharma作為 URL(確保 PHP 伺服器正在執行)。

$_GET 陣列將從請求中填充,輸出如下所示 -

First name: Amar Last Name: Sharma

如果 HTML 表單的 method 屬性為 GET,您也可以使用 HTML 表單資料填充 $_GET 陣列。

使用以下 HTML 表單收集資料並將其傳送到“hello.php”。在文件根目錄下,將以下指令碼儲存為“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>

在瀏覽器中,輸入 URL“https:///hello.html” -

PHP Get Post

您應該在瀏覽器視窗中獲得類似的輸出

$_POST 陣列

使用 POST 請求將資料傳送到伺服器的最簡單方法是將 HTML 表單的 method 屬性指定為 POST。假設瀏覽器中的 URL 為“https:///hello.php”,則在前面示例中的 HTML 表單“hello.html”中設定 method=POST:

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

“hello.php”指令碼(位於文件根目錄資料夾中)在 $_POST 陣列中檢索表單資料,並將其呈現為 HTTP 響應返回給瀏覽器:

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

在瀏覽器中開啟“https:///hello.html”。輸入的資料將由伺服器檢索,並呈現回客戶端,如前面的示例所示。

廣告