首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP GET 表單提交:為何 URL 參數無法在接收頁獲取?

     編輯:程式設計綜合問答

問題場景

在 PHP 開發中,使用 GET 方式提交表單時,若在 action 屬性中直接攜帶查詢參數(如 recv.php?name=csdn),並在表單中僅包含提交按鈕,開發者往往期望在接收頁通過 $name 直接獲取該參數。然而實測發現,recv.php 頁面無法獲取到 name 參數;而若改用 POST 方式,同樣寫法卻能正常獲取。

代碼示例

發送頁:send.php

<form method="get" action="recv.php?name=csdn">
<input type="submit" value="SUBMIT" />
</form>

接收頁:recv.php

echo $name;

核心原因分析

這是一個經典的 PHP 超全局變量理解誤區。PHP 中 不再預設註冊全局變量(自 PHP 4.2.0 起 register_globals 預設關閉),因此無法直接通過 $name 獲取查詢字符串參數。

正確做法是使用 $_GET 超全局陣列:

echo $_GET['name']; // 輸出:csdn

為何 POST 方式「看起來」能工作?

若在 POST 表單的 action 中帶參數(如 action="recv.php?name=csdn"),這些參數仍屬於 URL 查詢字符串,屬於 GET 參數,需用 $_GET['name'] 獲取;而表單體內的 <input name="name"> 才屬於 POST 數據,用 $_POST['name'] 獲取。兩者互不干擾,混用時需分開讀取。

最佳實踐建議

  • 統一使用 $_GET、$_POST、$_REQUEST 顯式獲取輸入數據。
  • 避免在 action URL 中硬編碼參數,改用隱藏表單欄位:
    <input type="hidden" name="name" value="csdn">
  • 開啟錯誤報告(error_reporting(E_ALL))以便發現未定義變量警告。

理解 HTTP 協議中 Query String 與 Request Body 的區別,以及 PHP 超全局變量的作用域,是避免此類坑的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved