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

PHP MySQL 表單資料寫入資料庫完整實作教學

     編輯:PHP 相關知識

前言

本教學示範如何建立一個完整的 HTML 表單,透過 PHP 接收使用者輸入、驗證資料、安全寫入 MySQL 資料庫。涵蓋資料驗證、SQL 注入防護、錯誤處理等實務技巧。

資料庫準備

CREATE TABLE `users` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `city` VARCHAR(50) NOT NULL,
  `created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

完整程式碼:表單與處理邏輯整合

<?php
// 設定資料庫連線參數
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = 'admin';
$dbName = 'test';

// 初始化變數
$errors = [];
$success = false;
$name = $city = '';

// 表單送出處理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 1. 取得並清理輸入
    $name = trim($_POST['user_name'] ?? '');
    $city = trim($_POST['city'] ?? '');

    // 2. 伺服器端驗證
    if ($name === '') {
        $errors[] = '請填寫使用者名稱';
    } elseif (mb_strlen($name) > 50) {
        $errors[] = '名稱長度不可超過 50 字元';
    }

    if ($city === '') {
        $errors[] = '請選擇城市';
    }

    // 3. 通過驗證才寫入資料庫
    if (empty($errors)) {
        try {
            // 使用 PDO 預備語句防止 SQL 注入
            $pdo = new PDO(
                "mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4",
                $dbUser,
                $dbPass,
                [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
            );

            $sql = "INSERT INTO users (name, city) VALUES (:name, :city)";
            $stmt = $pdo->prepare($sql);
            $stmt->execute([
                ':name' => $name,
                ':city' => $city
            ]);

            $success = true;
            // 重置表單
            $name = $city = '';
        } catch (PDOException $e) {
            $errors[] = '資料寫入失敗:' . $e->getMessage();
        }
    }
}
?>
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <meta charset="UTF-8">
    <title>使用者資料新增</title>
    <style>
        .error { color: #dc3545; margin: 10px 0; }
        .success { color: #28a745; margin: 10px 0; }
        form { max-width: 400px; margin: 20px auto; }
        .form-group { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input, select { width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; }
        button { background: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; }
        button:hover { background: #0056b3; }
    </style>
</head>
<body>
    <h2 style="text-align:center;">提交使用者資訊</h2>

    <?php if (!empty($errors)): ?>
        <div class="error">
            <ul><?php foreach ($errors as $err): ?><li><?= htmlspecialchars($err) ?></li><?php endforeach; ?></ul>
        </div>
    <?php endif; ?>

    <?php if ($success): ?>
        <div class="success">資料新增成功!</div>
    <?php endif; ?>

    <form method="post" action="">
        <div class="form-group">
            <label for="user_name">使用者名稱:</label>
            <input type="text" id="user_name" name="user_name" value="<?= htmlspecialchars($name) ?>" required>
        </div>

        <div class="form-group">
            <label for="city">來自城市:</label>
            <select id="city" name="city" required>
                <option value="">-- 請選擇 --</option>
                <option value="beijing" <?= $city==='beijing'?'selected':'' ?>>北京</option>
                <option value="london" <?= $city==='london'?'selected':'' ?>>倫敦</option>
                <option value="newyork" <?= $city==='newyork'?'selected':'' ?>>紐約</option>
                <option value="paris" <?= $city==='paris'?'selected':'' ?>>巴黎</option>
                <option value="rome" <?= $city==='rome'?'selected':'' ?>>羅馬</option>
            </select>
        </div>

        <button type="submit">提交</button>
    </form>
</body>
</html>

關鍵安全性說明

  1. 預備語句:使用 PDO::prepare() 與參數綁定,徹底防止 SQL 注入
  2. 輸入驗證:前後端雙重驗證,伺服器端為最後防線
  3. 輸出編碼:htmlspecialchars() 防止 XSS 攻擊
  4. 錯誤處理:Try-catch 捕獲例外,避免敏感資訊洩露給使用者
  5. CSRF 防護:實務專案應加入 CSRF Token 驗證 (本範例為簡化教學省略)

進階擴充建議

  • 加入 AJAX 非同步提交,提升使用者體驗
  • 實作分頁查詢與資料列表顯示
  • 加入編輯/刪除功能,完成 CRUD 循環
  • 使用驗證函式庫 (如 Respect\Validation) 簡化驗證邏輯

總結

這個範例展示了從表單設計、資料驗證、安全寫入到使用者回饋的完整流程。掌握這些基礎概念,是建立安全可靠 PHP 應用程式的關鍵。

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