2015年5月14日 星期四

PHP 的 $_GET, $_POST, 與 $_REQUEST 測試

最常用的 HTTP 方法是 GET 與 POST, 當我們提交表單時, 後端伺服器上的 PHP 程式可以分別用 $_GET["param"] 與 $_POST["param"] 來取得前端傳來的參數 param, 如果不知道前端會用哪一種方法, 則可用 $_REQUEST["param"], 不管前端用 GET 還是 POST, $_REQUEST 都可以擷取到參數.

下面以三個範例來測試 $_GET, $POST, 與 $_REQUEST. 首先寫一個含有表單元素的網頁 http_get_form.htm :

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>PHP Test</title>
</head>
<body>
  <form method="get" action="http_test.php" name="form1">
    <input type="text" name="name" value="">
    <input type="submit" value="確定" name="ok"> 
  </form>
</body>
</html>

在此網頁中, 表單採用 GET 方法傳送元素, 表單內只含有一個名稱為 name 的輸入元素, 當按下確定後會將此表單向後端程式 http_test.php 提交, 其內容如下 :

<?php
header('Content-Type: text/html;charset=UTF-8');
$request=$_REQUEST["name"];
$post=$_POST["name"];
$get=$_GET["name"];
echo "<br>";
echo "REQUEST=".$request."<br>";
echo "POST=".$post."<br>";
echo "GET=".$get;
?>

此程式中分別用 $_GET, $POST, 與 $_REQUEST 取得前端傳出來的 name 參數, 然後向前端輸出, 如下面範例 1 所示 :

測試範例 1http://mybidrobot.allalla.com/phptest/http_get_form.htm [看原始碼]

後端程式 http_test.php 輸出結果如下 :

REQUEST=get_form
POST=
GET=get_form

可見以 GET 方法提交時, 必須用 $_GET 或 $_RQUEST 讀取, 不能用 $_POST.

如果我們將 GET 改為 POST, 如下 http_post_form.htm :

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>PHP Test</title>
</head>
<body>
  <form method="post" action="http_test.php" name="form1">
    <input type="text" name="name" value="">
    <input type="submit" value="確定" name="ok"> 
  </form>
</body>
</html>

同樣向 http_test.php 提交, 如下範例 2 所示 :

測試範例 2 : http://mybidrobot.allalla.com/phptest/http_post_form.htm [看原始碼]

結果如下 :

REQUEST=post_form
POST=post_form
GET=

可見用 POST 方法提交只能用 $_POST 或 $_REQUEST 取得參數, 不能用 $_GET.

還有一種 GET 方法是使用超連結發出 Request, 不是使用表單的, 如下 http_get_url.htm 所示 :

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>PHP Test</title>
</head>
<body>
  <a href="http_test.php?name=uuu">http_test.php?name=uuu</a>
</body>
</html

如下面範例 3 :

測試範例 3 : http://mybidrobot.allalla.com/phptest/http_get_url.htm [看原始碼]

結果與範例 1 相同, 只能用 $_GET 或 $_REQUEST 才能取的參數 :

REQUEST=uuu
POST=
GET=uuu

經過這三個測試, 可知不管是 GET 與 POST 方法, 一律用 $_REQUEST 就沒問題了.


沒有留言 :