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

PHP 表單處理基礎:$_GET、$_POST 超全域變數與資料接收流程

     編輯:PHP 入門

PHP 表單處理基礎

PHP 自動將 HTML 表單提交的資料轉換為超全域陣列 $_GET、$_POST、$_REQUEST,讓開發者能輕鬆存取用戶輸入。理解表單提交流程、方法差異、資料存取方式,是 PHP 開發入門關鍵。

表單提交流程

  1. 用戶在瀏覽器填寫表單、點擊送出
  2. 瀏覽器依 method 屬性構建 HTTP 請求:
    • GET:查詢字串附加於 URL ?key=val
    • POST:資料置於請求主體
  3. 伺服器接收請求,PHP 解析填入超全域陣列
  4. 腳本執行,開發者透過 $_GET/$_POST 存取資料
  5. 回應 HTML 給瀏覽器

基本範例

HTML 表單 (form.html)

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <title>簡單表單</title>
</head>
<body>
    <form action="welcome.php" method="post">
        <label>姓名: <input type="text" name="username"></label><br><br>
        <label>年齡: <input type="number" name="age" min="1"></label><br><br>
        <button type="submit">送出</button>
    </form>
</body>
</html>

PHP 處理 (welcome.php)

<?php
// 直接存取 $_POST 陣列
$username = $_POST['username'] ?? '訪客';
$age = (int)($_POST['age'] ?? 0);

echo "<h1>歡迎,$username!</h1>";
echo "<p>您的年齡是 $age 歲。</p>";
?>

$_GET vs $_POST 比較

特性$_GET$_POST
HTTP 方法GETPOST
資料位置URL 查詢字串請求主體
可見性網址列完整顯示不顯示於網址列
長度限制~2000 字元 (URL 限制)受 post_max_size (預設 8MB)
書籤/分享可直接複製 URL無法直接分享
快取瀏覽器/Proxy 可快取不快取
適用場景搜尋、分頁、唯讀查詢登入、註冊、修改資料、上傳
安全性敏感資料洩露風險高相對較安全(仍需防護)

$_REQUEST 合併存取

$_REQUEST 預設包含 $_GET、$_POST、$_COOKIE。不建議常規使用,因來源不明確,易導致參數覆蓋衝突。僅在極少數需同時支援 GET/POST 的舊代碼中使用。

<?php
// 不推薦
$name = $_REQUEST['name'] ?? '';

// 推薦:明確指定來源
$name = $_POST['name'] ?? $_GET['name'] ?? '';

表單驗證基本原則

  1. 伺服器端驗證必要:用戶端可繞過,伺服器是最後防線
  2. 用戶端驗證輔助:HTML5 required, pattern, type="email" 等提升體驗
  3. 資料保持:驗證失敗時回填用戶輸入 value=""
  4. 錯誤提示:欄位旁顯示具體錯誤訊息

自我提交表單模式

表單 action 指向自身,單一檔案處理顯示與驗證:

<?php
$name = $email = '';
$nameErr = $emailErr = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');
    $email = trim($_POST['email'] ?? '');
    
    if ($name === '') $nameErr = '姓名必填';
    if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) $emailErr = 'Email 必填且格式正確';
    
    if (!$nameErr && !$emailErr) {
        echo "<p style='color:green'>提交成功!歡迎 $name</p>";
        // 可選:PRG 重導向
    }
}
?>
<form method="post" action="">
    <label>姓名: <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>">
    <?php if ($nameErr) echo "<span style='color:red'>$nameErr</span>"; ?><br>
    <label>Email: <input type="email" name="email" value="<?php echo htmlspecialchars($email); ?>">
    <?php if ($emailErr) echo "<span style='color:red'>$emailErr</span>"; ?><br>
    <button type="submit">送出</button>
</form>

安全基礎:htmlspecialchars()

輸出用戶資料時必須編碼,防止 XSS:

<?php
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// 將 & " ' < > 轉為 HTML 實體

常見問題

問題原因解決
Undefined array key直接存取不存在的鍵使用 ?? 或 isset()
中文亂碼編碼不一致HTML meta charset=UTF-8、PHP 檔案 UTF-8、DB 連線 UTF-8
檔案上傳 $_POST 為空enctype 錯誤enctype="multipart/form-data"
核取方塊未勾選不在 $_POSTHTML 標準行為用 isset($_POST['chk']) 判斷

進階:多檔案上傳

<input type="file" name="photos[]" multiple>

<?php
foreach ($_FILES['photos']['tmp_name'] as $idx => $tmp) {
    if ($_FILES['photos']['error'][$idx] === UPLOAD_ERR_OK) {
        move_uploaded_file($tmp, "uploads/{$_FILES['photos']['name'][$idx]}");
    }
}
?>

掌握表單處理基礎,理解 GET/POST 差異、資料流向、安全原則,是 PHP 開發的核心技能。從簡單的自我提交表單開始,逐步建構驗證、安全、用戶體驗完整的表單系統。

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