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

PHP 表單處理完整實例:從 HTML 構建到 $_POST 數據接收與驗證

     編輯:PHP 相關知識

PHP 表單提交與處理全流程實戰

表單是 Web 交互核心。本文通過一個完整的註冊表單示例,涵蓋 HTML 構建、各類輸入控件用法、POST 數據接收、服務端驗證、安全防護,幫助初学者建立標準化表單處理流程。

一、HTML 表單構建 (register.html)

<form action="register.php" method="post" accept-charset="UTF-8">
  <table>
    <tr>
      <td>用戶名:</td>
      <td><input type="text" name="username" value="" maxlength="20" required /></td>
    </tr>
    <tr>
      <td>密碼:</td>
      <td><input type="password" name="password" maxlength="20" required /></td>
    </tr>
    <tr>
      <td>年齡段:</td>
      <td>
        <select name="age">
          <option value=">16">16 歲以下</option>
          <option value="16-30" selected>16-30 歲</option>
          <option value="31-50">31-50 歲</option>
          <option value="51-80">51-80 歲</option>
        </select>
      </td>
    </tr>
    <tr>
      <td valign="top">自我介紹:</td>
      <td><textarea name="intro" rows="3" cols="50" placeholder="請輸入自我介紹"></textarea></td>
    </tr>
    <tr>
      <td>喜歡運動:</td>
      <td>
        <label><input type="radio" name="sport" value="tennis" checked> 網球</label>
        <label><input type="radio" name="sport" value="football"> 足球</label>
        <label><input type="radio" name="sport" value="basketball"> 籃球</label>
      </td>
    </tr>
    <tr>
      <td>擅長語言:</td>
      <td>
        <label><input type="checkbox" name="lang[]" value="php"> PHP</label>
        <label><input type="checkbox" name="lang[]" value="java"> Java</label>
        <label><input type="checkbox" name="lang[]" value="python"> Python</label>
        <label><input type="checkbox" name="lang[]" value="go"> Go</label>
      </td>
    </tr>
    <tr>
      <td>開發工具:</td>
      <td>
        <select name="ide[]" multiple size="4">
          <option value="vscode" selected>VS Code</option>
          <option value="phpstorm">PhpStorm</option>
          <option value="sublime">Sublime Text</option>
          <option value="other">其他</option>
        </select>
      </td>
    </tr>
    <tr>
      <td></td>
      <td><input type="hidden" name="source" value="register_form" />
          <button type="submit" name="btn_submit">提交註冊</button>
      </td>
    </tr>
  </table>
</form>

關鍵點說明

  • method="post":數據不顯示在 URL,適合敏感信息
  • name="lang[]":方括號讓 PHP 自動解析為數組
  • multiple:允許 <select> 多選
  • required:HTML5 瀏覽器端非空校驗(僅輔助)
  • hidden:傳遞不可见標識(如來源、CSRF Token)

二、PHP 後端處理 (register.php)

<?php
// 1. 判斷是否為表單提交
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['btn_submit'])) {
    die('非法請求');
}

// 2. 基礎清理函數
function clean($v) {
    return is_array($v) ? array_map('clean', $v) : trim(htmlspecialchars($v, ENT_QUOTES, 'UTF-8'));
}
$_POST = clean($_POST);

// 3. 必填字段驗證
$required = ['username', 'password'];
foreach ($required as $field) {
    if (empty($_POST[$field])) {
        die("字段 {$field} 不能為空");
    }
}

// 4. 業務規則驗證
if (strlen($_POST['username']) < 2 || strlen($_POST['username']) > 20) {
    die('用戶名長度 2-20 位');
}
if (strlen($_POST['password']) < 8) {
    die('密碼至少 8 位');
}

// 5. 處理數組類型字段
$languages = $_POST['lang'] ?? [];
$ides      = $_POST['ide'] ?? [];

// 6. 處理換行符 (textarea)
$intro = nl2br($_POST['intro'] ?? '');

// 7. 輸出結果 (實際項目這裡寫入數據庫、發送郵件等)
echo "<h3>提交成功,數據如下:</h3>";
echo "用戶名: {$_POST['username']}<br>";
echo "年齡段: {$_POST['age']}<br>";
echo "運動: {$_POST['sport']}<br>";
echo "語言: " . implode(', ', $languages) . "<br>";
echo "工具: " . implode(', ', $ides) . "<br>";
echo "介紹: {$intro}<br>";
echo "來源: {$_POST['source']}<br>";
?>

三、安全增強清單

風險對策
XSS 跨站腳本輸出時 htmlspecialchars();輸入端 strip_tags() 或 HTMLPurifier
CSRF 跨站請求偽造表單隱藏域加入 <input type="hidden" name="_token" value="">,驗證 token
SQL 注入使用 PDO 預處理語句 $stmt->execute([$username, $hash])
密碼明文存儲password_hash($pwd, PASSWORD_DEFAULT) 存儲,password_verify() 驗證
重復提交PRG 模式:處理後 header('Location: success.php') 重定向

四、PRG 模式防重復提交

<?php
// register.php 處理邏輯結尾
if ($insertSuccess) {
    $_SESSION['flash_message'] = '註冊成功!';
    header('Location: register_success.php');
    exit;
}
?>

成功頁面 register_success.php 讀取並刪除 $_SESSION['flash_message'] 顯示。

五、總結

規範的表單處理流程:HTML 構建 → 瀏覽器基礎校驗 → POST 提交 → 服務端清理/驗證 → 業務邏輯 → PRG 重定向 → 成功頁。掌握這套流程,能避開 90% 的表單相關安全與體驗問題。

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