1. 程式人生 > >PHP表單(get,post)提交方式

PHP表單(get,post)提交方式

  • PHP 表單處理

PHP 超全域性變數 $_GET 和 $_POST 用於收集表單資料(form-data)。

    • $_GET 是通過 URL 引數傳遞到當前指令碼的變數陣列。
    • $_POST 是通過 HTTP POST 傳遞到當前指令碼的變數陣列。

有一點很重要的事情值得注意,當處理 HTML 表單時,PHP 能把來自 HTML 頁面中的表單元素自動變成可供 PHP 指令碼使用。

  • $_GET 變數

預定義的 $_GET 變數用於收集來自 method="get" 的表單中的值。

從帶有 GET 方法的表單傳送的資訊,對任何人都是可見的(會顯示在瀏覽器的位址列),並且對傳送資訊的量也有限制。

例:form.html 檔案程式碼

複製程式碼
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>

<form action="welcome.php" method="get">
名字: <input type="text" name="fname">
年齡: <input type="text" name="age">
<input type="submit"
value="提交"> </form> </body> </html>
複製程式碼

當用戶點選 "Submit" 按鈕時,傳送到伺服器的 URL 如下所示: http://www.runoob.com/welcome.php?fname=Runoob&amp;age=3 

"welcome.php" 檔案現在可以通過 $_GET 變數來收集表單資料了(請注意,表單域的名稱自動成為 $_GET 陣列中的鍵):

歡迎 <?php echo $_GET["fname"]; ?>!<br>
你的年齡是 <?php echo $_GET["age"]; 
?> 歲。
  • 何時使用 method="get"?

    在 HTML 表單中使用 method="get" 時,所有的變數名和值都會顯示在 URL 中。

    註釋:所以在傳送密碼或其他敏感資訊時,不應該使用這個方法!不安全

    然而,正因為變數顯示在 URL 中,因此可以在收藏夾中收藏該頁面。在某些情況下,這是很有用的。

    註釋:HTTP GET 方法不適合大型的變數值。它的值是不能超過 2000 個字元的。

  • $_POST 變數

預定義的 $_POST 變數用於收集來自 method="post" 的表單中的值。

從帶有 POST 方法的表單傳送的資訊,對任何人都是不可見的(不會顯示在瀏覽器的位址列),並且對傳送資訊的量也沒有限制。

註釋:然而,預設情況下,POST 方法的傳送資訊的量最大值為 8 MB(可通過設定 php.ini 檔案中的 post_max_size 進行更改)。

例:form.html 檔案程式碼

複製程式碼
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>

<form action="welcome.php" method="post">
名字: <input type="text" name="fname">
年齡: <input type="text" name="age">
<input type="submit" value="提交">
</form>

</body>
</html>
複製程式碼

當用戶點選 "提交" 按鈕時,URL 類似如下所示: http://www.runoob.com/welcome.php 

"welcome.php" 檔案現在可以通過 $_POST 變數來收集表單資料了(請注意,表單域的名稱會自動成為 $_POST 陣列中的鍵):

歡迎 <?php echo $_POST["fname"]; ?>!<br>
你的年齡是 <?php echo $_POST["age"]; ?>  歲。
  • 何時使用 POST?

通過 POST 方法從表單傳送的資訊對其他人是不可見的(安全)(所有名稱/值會被嵌入 HTTP 請求的主體中),並且對所傳送資訊的數量也無限制

此外 POST 支援高階功能,比如在向伺服器上傳檔案時進行 multi-part 二進位制輸入。

不過,由於變量未顯示在 URL 中,也就無法將頁面新增到書籤

大多數開發者偏愛 POST 來發送表單資料。

  • 通過 PHP 驗證表單資料

我們要做的第一件事是通過 PHP 的 htmlspecialchars() 函式傳遞所有變數。

在我們使用 htmlspecialchars() 函式後,如果使用者試圖在文字欄位中提交以下內容:

<script>location.href('http://www.hacked.com')</script>

- 程式碼不會執行,因為會被儲存為轉義程式碼,就像這樣:

&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;

現在這條程式碼顯示在頁面上或 e-mail 中是安全的。

在使用者提交該表單時,我們還要做兩件事:

  1. (通過 PHP trim() 函式)去除使用者輸入資料中不必要的字元(多餘的空格、製表符、換行)
  2. (通過 PHP stripslashes() 函式)刪除使用者輸入資料中的反斜槓(\)

接下來我們建立一個檢查函式(相比一遍遍地寫程式碼,這樣效率更好)。

我們把函式命名為 test_input()。

現在,我們能夠通過 test_input() 函式檢查每個 $_POST 變數,指令碼是這樣的:

  • 複製程式碼
    <?php
    // 定義變數並設定為空值
    $name = $email = $gender = $comment = $website = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $name = test_input($_POST["name"]);
      $email = test_input($_POST["email"]);
      $website = test_input($_POST["website"]);
      $comment = test_input($_POST["comment"]);
      $gender = test_input($_POST["gender"]);
    }
    
    function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
    ?>
    複製程式碼