萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP $_GET 超全域變數完整教學:表單資料、URL 參數、陣列接收 (Checkbox) 實戰

$_GET 兩大來源

  1. 表單 method="get":使用者輸入送出,資料附在 URL 後。
  2. URL 直接帶參數:page.php?id=123&name=abc,超連結、AJAX、API 皆適用。

實例一:文字輸入表單

HTML 表單 (index.html)

<form action="get.php" method="get">
  Name: <input type="text" name="username">
  <input type="submit" value="OK">
</form>

PHP 接收 (get.php)

<?php
// 輸入 www.111cn.net 送出
echo 'You are ' . htmlspecialchars($_GET['username']) . '.';
// 輸出:You are www.111cn.net.
?>

產生的 URL

get.php?username=www.111cn.net

實例二:超連結帶參數

<a href="a.php?value=my">連結</a>

<!-- a.php -->
<?php
echo 'value 的值是 ' . htmlspecialchars($_GET['value']) . '.<br>';
// 輸出:value 的值是 my.
?>

實例三:Checkbox 陣列接收

表單 (checkbox.html)

<form action="checkbox.php" method="get">
  <input type="checkbox" name="fruit[]" value="Apple"> Apple<br>
  <input type="checkbox" name="fruit[]" value="Orange"> Orange<br>
  <input type="checkbox" name="fruit[]" value="Mango"> Mango<br>
  <input type="submit" value="OK">
</form>

PHP 處理 (checkbox.php)

<?php
// 勾選 Orange、Mango 送出
echo count($_GET['fruit']) . '<br>'; // 2
foreach ($_GET['fruit'] as $val) {
    echo htmlspecialchars($val) . '<br>';
}
// 輸出:
// 2
// Orange
// Mango
?>

關鍵:name="fruit[] 中的 [] 讓 PHP 自動將多個同名欄位組成陣列。

重要限制與安全

項目說明
長度限制URL 總長度約 2048 字元 (瀏覽器/伺服器限制),$_GET 不適合大量資料。
可見性參數明文顯示於網址列、瀏覽器歷史、伺服器日誌,**不可傳遞密碼/敏感資訊**。
快取/書籤GET 請求可被快取、書籤、分享,適合搜尋、分頁、篩選等冪等操作。
XSS 防護輸出 $_GET 內容到 HTML **必須**用 htmlspecialchars()。
編碼瀏覽器自動 URL 編碼中文/特殊字元,PHP 自動解碼填入 $_GET。

進階:$_REQUEST 包含 $_GET

<?php
// $_REQUEST = $_GET + $_POST + $_COOKIE (順序受 variables_order 影響)
// 不建議直接使用,來源不明確,安全性較低
// 明確使用 $_GET、$_POST、$_COOKIE
?>

實務檢查清單

  • [ ] 表單 method="get" 只用於非敏感、可分享、冪等操作。
  • [ ] 所有輸出到 HTML 的 $_GET 值皆經過 htmlspecialchars()。
  • [ ] 陣列輸入 (checkbox/multi-select) 名稱加 []。
  • [ ] 參數驗證:isset($_GET['id'])、ctype_digit($_GET['id'])、範圍檢查。
  • [ ] 避免直接 extract($_GET) 污染變數空間。
copyright © 萬盛學電腦網 all rights reserved