表單(<form>)是網頁收集用戶輸入並提交給伺服器的核心機制。兩個必要屬性:
action:提交目標 URL(如 info.php)。method:提交方式 —— get(預設,參數附在 URL)或 post(參數在請求主體)。<!-- test.html -->
<form action="info.php" method="get">
用戶名:<input type="text" name="username" value=""><br>
密碼:<input type="password" name="password" value=""><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
三個超全域陣列:
$_GET:僅獲取 GET 請求參數。$_POST:僅獲取 POST 請求主體資料。$_REQUEST:合併 GET、POST、COOKIE(不推薦,來源不明確,安全風險)。<?php
// info.php
$username = $_GET['username'] ?? '';
$password = $_GET['password'] ?? '';
echo "您輸入的用戶名為:{$username},密碼為:{$password}";
?>
| 維度 | GET | POST |
|---|---|---|
| 參數可見性 | URL 顯示(如 ?username=foo) | 請求主體,URL 不顯示 |
| 資料長度 | 受限於瀏覽器/伺服器 URL 長度(IE 約 2083 字元) | 理論無上限,受 post_max_size、memory_limit 限制 |
| 編碼支援 | 僅 ASCII(需 URL 編碼) | 支援完整字符集(含檔案上傳 multipart/form-data) |
| 快取/書籤 | 可被快取、收藏、分享 | 不會被快取/收藏 |
| 安全性 | 敏感資料(密碼)暴露於歷史/日誌 | 相對安全,但仍需 HTTPS |
| 冪等性 | 適合冪等操作(查詢、分頁) | 適合非冪等操作(新增、修改、刪除) |
| 瀏覽器重新整理 | 無提示直接重送 | 多數瀏覽器彈窗確認「重新提交表單」 |
W3C 建議: 僅當表單操作是冪等(多次提交副作用相同)時用 GET。
csrf_token,伺服器驗證。filter_input()、htmlspecialchars()、預處理語句(PDO)。enctype="multipart/form-data",驗證 MIME、副檔名、大小、儲存路徑非網頁目錄。$_GET 或 $_POST。<!-- 多選框、同名輸入框 -->
<input type="checkbox" name="colors[]" value="red">
<input type="checkbox" name="colors[]" value="green">
<input type="checkbox" name="colors[]" value="blue">
<?php
$colors = $_POST['colors'] ?? []; // 自動為陣列
foreach ($colors as $c) { echo htmlspecialchars($c) . ' '; }
?>
理解 GET/POST 的語義差異、安全性、快取行為,是 Web 開發基石。遵循「查詢用 GET,狀態變更用 POST」原則,配合 HTTPS、CSRF Token、輸入驗證,即可構建健壯的表單處理流程。