-
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&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>
- 代碼不會執行,因為會被儲存為轉義代碼,就像這樣:
<script>location.href('http://www.hacked.com')</script>
現在這條代碼顯示在頁面上或 e-mail 中是安全的。
在使用者送出該表單時,我們還要做兩件事:
- (通過 PHP trim() 函數)去除使用者輸入資料中不必要的字元(多餘的空格、制表符、換行)
- (通過 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; } ?>