萬盛學電腦網

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

PHP 表單元素值獲取完整指南:核取方塊、單選鈕、文字方塊、密碼、隱藏欄位、按鈕、文字區域

核心原則

所有表單元素的值均透過 name 屬性作為鍵,在 $_POST (或 $_GET) 陣列中取得。name 唯一性是正確接收資料的關鍵。

各元素類型處理範例

1. 核取方塊 - 多選陣列

HTML:

<input type="checkbox" name="interests[]" value="coding"> 程式設計
<input type="checkbox" name="interests[]" value="design"> 設計
<input type="checkbox" name="interests[]" value="music"> 音樂

PHP 處理:

<?php
if (!empty($_POST['interests'])) {
    echo "您選擇的興趣:";
    foreach ($_POST['interests'] as $interest) {
        echo htmlspecialchars($interest) . " ";
    }
} else {
    echo "未選擇任何項目";
}
?>

關鍵: name="interests[]" 讓 PHP 自動建立陣列,count() 可得選擇數量。

2. 文字方塊、密碼欄位、隱藏欄位、按鈕、文字區域 - 單值

HTML:

<form method="post">
  帳號: <input type="text" name="username" size="20"><br>
  密碼: <input type="password" name="password" size="20"><br>
  隱藏: <input type="hidden" name="csrf_token" value=""><br>
  備註: <textarea name="note" rows="4" cols="40"></textarea><br>
  <button type="submit" name="action" value="login">登入</button>
</form>

PHP 處理:

<?php
if (($_POST['action'] ?? '') === 'login') {
    $username = trim($_POST['username'] ?? '');
    $password = $_POST['password'] ?? ''; // 密碼不 trim,保留前後空白 (若為合法字元)
    $token    = $_POST['csrf_token'] ?? '';
    $note     = $_POST['note'] ?? '';
    
    // 驗證 CSRF Token
    if (!hash_equals($_SESSION['csrf_token'] ?? '', $token)) {
        die('CSRF 驗證失敗');
    }
    // 後續驗證邏輯...
}
?>

3. 單選鈕 - 互斥單選

HTML:

<form method="post">
  性別:
  <input type="radio" name="gender" value="male" checked> 男
  <input type="radio" name="gender" value="female"> 女
  <input type="radio" name="gender" value="other"> 其他
  <button type="submit" name="submit" value="send">送出</button>
</form>

PHP 處理:

<?php
if (($_POST['submit'] ?? '') === 'send') {
    $gender = $_POST['gender'] ?? 'unknown';
    echo "您的性別:$gender"; // 僅會收到被選中的那一個 value
}
?>

注意: 同組單選鈕 必須同名,未選中時 $_POST['gender'] 不會被設定 (而非空字串)。

安全與最佳實務

項目做法
輸出編碼所有輸出到 HTML 的使用者輸入必經 htmlspecialchars($val, ENT_QUOTES, 'UTF-8')
SQL 防注入使用 PDO/MySQLi 預處理語句,絕不直接拼接 SQL
檔案上傳$_FILES 陣列,驗證 MIME、副檔名、大小、隨機重命名、移至非公開目錄
CSRF 保護每張表單隱藏 csrf_token,Session 驗證,或使用 SameSite Cookie
輸入驗證白名單模式:型別、長度、格式、範圍、業務規則全檢查
錯誤回顯保留使用者輸入 (含密碼除外),標示錯誤欄位,友善提示

現代框架做法 (Laravel/Symfony/CodeIgniter)

  • Request 物件封裝:$request->input('name')、$request->all()、$request->validate([...])
  • 表單請求類別:驗證邏輯與控制器分離、自動重導錯誤訊息。
  • CSRF 內建中介層自動驗證。
copyright © 萬盛學電腦網 all rights reserved