問題:網頁上提交表單之後,PHP為什麼不能擷取提交的內容?然而在老版本的PHP上運行卻正常。
新版的PHP已經廢棄了原來的表單內容處理方式,即不再把提交的表單的內容直接複製到一個同名變數中。解決辦法有四個:
1. 修改php.ini,尋找 register_globals,將其值修改為 On。這樣就可以像原來一樣,例如,提交的表單中包括一個名為"username"的變數,那麼在php中就可以直接使用$username來訪問該變數。但是,除非你要使用一段舊的代碼而考慮到相容性問題,否則不建議使用該方法。
2. 使用 $HTTP_GET_VARS、$HTTP_POST_VARS數組來訪問,例如寫成$HTTP_POST_VARS["username"]的形式。不過該方法也不建議採用。
3. (推薦)使用 $_POST、$_GET等數組來訪問,例如寫成 $_POST["username"]的形式。建議採用這種方法。
4. (推薦)使用 import_request_variables 函數。該函數將提交內容匯入到變數中。例如 import_request_variables("gp", "rvar_");第一個參數可以選擇g,p,c,分別表示匯入 GET,POST,COOKIE 變數;第二個參數為匯入後的變數首碼。執行上面的語句後即可使用 $rvar_username 來訪問提交的 username 變數。使用import_request_variables("gp", "");可以相容以前的PHP程式。
PHP $_GET 和 $_POST變數是用來擷取表單中的資訊的,比如使用者輸入的資訊。
PHP表單操作
在我們處理HTML表單和PHP表單時,我們要記住的重要一點是:HTML頁面中的任何一個表單元素都可以自動的用於PHP指令碼:
表單舉例:
<html>
<body><form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form></body>
</html>
上述HTML頁麵包含了兩個輸入框[input field]和一個提交[submit]按鈕。當使用者將資訊填寫完畢並點擊提交按鈕時,表單的資料將被發送至“welcome.php”檔案。
“welcome.php”檔案如下所示:
<html>
<body>Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.</body>
</html>
上述指令碼將輸出下面這段結果:
Welcome John.
You are 28 years old.
PHP $_GET 和 $_POST變數將在下面作具體講解。
表單有效性驗證[Form Validation]
使用者輸入的資訊應該儘可能的通過用戶端指令碼程式(如:JavaScript)瀏覽器上驗證;通過瀏覽器進行資訊的有效性驗證可以提高效率並減少伺服器的下載壓力。
如果使用者輸入的資訊需要存進資料庫,那麼你必須考慮在伺服器端進行有效性驗證。在伺服器上驗證資訊有效性的最好方法就是把表單資訊發給當前頁進行驗證,而不是調到其他頁面進行驗證。通過上述方法,如果表單存在錯誤,使用者可以直接在當前頁擷取錯誤資訊。這使得我們更容易發現存在的錯誤資訊。
PHP $_GET變數是通過get方法從表單中擷取“值”的。
$_GET變數
$_GET變數是一個包含名稱[name]和值[value]的數組(這些名稱和值是通過HTTP GET方法發送的,且都可以利用)。
$_GET變數使用“method=get”來擷取表單資訊。通過GET方法發送的資訊是可見的(它將顯示在瀏覽器的地址欄裡),並且它有長度限制(資訊的總長度不能超過100個字元[character])。
案例
<form action="welcome.php" method="get">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
當使用者點擊“提交Submit”按鈕後,URL的方式顯示
“welcome.php”檔案可以使用“$_GET”變數來擷取表單資料(注意:表單欄[form field]內的名稱將會自動作為“$_GET”數組中的ID關鍵詞):
Welcome <?php echo $_GET["name"]; ?>.<br />You are <?php echo $_GET["age"]; ?> years old!
為什麼要使用“$_GET”?
要點:當使用“$_GET”變數時,所有的變數名和變數值都會顯示在URL地址欄內;所以,當你發送的資訊包含密碼或是其他一些敏感資訊時,就不可以再使用這種方法。因為所有的資訊會在URL地址欄內顯示,所以我們可以把它作為標籤放入收藏夾內。這在很多情況下非常有用。
注意:如果需要發送的變數值過大,HTTP GET方法便不適用。發送的資訊量不能超過100個字元。
$_REQUEST變數
PHP $_REQUEST變數包含$_GET, $_POST, and $_COOKIE的內容。
PHP $_REQUEST變數可以用來擷取通過“GET”和“POST”這兩種方法發送的表單資料。
案例
Welcome <?php echo $_REQUEST["name"]; ?>.<br />You are <?php echo $_REQUEST["age"]; ?> years old!
PHP $_POST變數的作用是:擷取method = “post”方法發送的表單變數。
$_POST變數
$_POST變數是一個包含名稱[name]何值[value]的數組(這些名稱和值是通過HTTP POST方法發送的,且都可以利用)
$_POST變數使用“method=POST”來擷取表單資訊。通過POST方法發送的資訊是不可見的,並且它沒有關於資訊長度的限制。
案例
<form action="welcome.php" method="post">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>
當使用者點擊“提交Submit”按鈕後,URL中不會包含任何錶單資料
“welcome.php”檔案可以使用“$_POST”變數來擷取表單資料(注意:表單欄[form field]內的名稱將會自動作為“$_POST”數組中的ID關鍵詞):
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old!
為什麼要使用$_POST?
通過HTTP POST發送的變數不會在URL中顯示出來
變數的大小沒有限制
然而,因為變數不能在URL中顯示出來,所以也不可能把這個頁面作為標籤儲存在收藏夾裡。
$_REQUEST變數
PHP $_REQUEST變數包含$_GET, $_POST, and $_COOKIE的內容
PHP $_REQUEST變數可以用來擷取通過“GET”和“POST”這兩種方法發送的表單資料。
案例
Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!