首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 表單提交後取值全攻略:$_GET/$_POST/$_REQUEST 與 register_globals 遷移指南

     編輯:PHP 相關知識

PHP 表單提交後取值全攻略:$_GET/$_POST/$_REQUEST 與 register_globals 遷移指南

常見問題:新版 PHP 無法直接用 $variable 取得表單值

PHP 4.2 起 register_globals 預設關閉,不再自動將表單欄位註冊為同名全域變數。舊代碼若直接用 $username 會失效。

四種解決方案(推薦度由高到低)

  1. 使用超全域陣列 $_POST / $_GET(最佳實踐)
    $username = $_POST['username']; 或 $_GET['username']。明確、安全、可讀性高。
  2. 使用 import_request_variables() 批次匯入(相容舊碼)
    import_request_variables("gp", "rvar_"); → 產生 $rvar_username。
    import_request_variables("gp", ""); → 直接產生 $username(相容舊碼)。
    參數:g=GET、p=POST、c=COOKIE;第二參數為前綴。
  3. 使用 $HTTP_POST_VARS / $HTTP_GET_VARS(已棄用)
    長名稱陣列,PHP 5.0+ 棄用,不建議使用。
  4. 修改 php.ini 開啟 register_globals = On(極不推薦)
    嚴重安全風險(變數覆蓋、注入),僅為極舊專案臨時相容,生產環境嚴禁。

超全域陣列詳解

陣列來源可見性長度限制適用場景
$_GETURL 參數 / method="get"瀏覽器網址列可見約 2000 字元(瀏覽器/伺服器限制)搜尋、分頁、非敏感資料、可書籤
$_POSTmethod="post" 表單不可見(Request Body)無實質限制(受 post_max_size)登入、註冊、修改資料、上傳檔案、敏感資訊
$_REQUEST$_GET + $_POST + $_COOKIE混合混合不在乎來源的通用取值(略低安全性)

完整表單範例

form.html

<form action="welcome.php" method="post">
  Name: <input type="text" name="name" />
  Age:  <input type="text" name="age" />
  <input type="submit" />
</form>

welcome.php

<?php
echo "Welcome " . htmlspecialchars($_POST["name"]) . ".<br>";
echo "You are " . (int)$_POST["age"] . " years old.";
?>

表單驗證最佳實踐

  • 客戶端(JS)先驗證 → 減少伺服器負載、提升體驗。
  • 伺服器端(PHP)必須再驗證 → 防繞過、資料入庫前必做。
  • 錯誤訊息顯示在原表單頁,避免跳轉導致使用者資料遺失。
延伸專題:PHP 檔案操作、運算符、網絡編程、基礎語法、Office 文件、日期時間、OOP 入門、字串用法、MySQL 入門、常見資料庫操作匯總。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved