動態網站開發涉及表單處理、資料庫操作、狀態管理等核心技術。本文整理實務常用片段與最佳實踐,涵蓋核取方塊陣列處理、SQL IN 條件建構、表單提交判斷、超全域變數、URL 轉向、IP/時間取得等高頻需求。
[] 形成陣列<input type="checkbox" name="checkbox[]" value="<?= $row['id'] ?>">
if (!empty($_POST['checkbox'])) {
$expr = implode(',', $_POST['checkbox']); // 1,2,3
$sql = "SELECT * FROM tbl WHERE field IN ($expr)";
}
if (!empty($_POST['checkbox'])) {
$expr = "'" . implode("','", $_POST['checkbox']) . "'"; // 'a','b'
$sql = "SELECT * FROM tbl WHERE field IN ($expr)";
}
// ⚠ 實務請用預處理語句動態綁定參數,避免 SQL 注入
// 方式一:檢查提交按鈕名稱
if (isset($_POST['submit_btn'])) { /* 處理表單 */ }
// 方式二:檢查 REQUEST_METHOD
if ($_SERVER['REQUEST_METHOD'] === 'POST') { /* 處理表單 */ }
// 方式三:隱藏欄位標記
<input type="hidden" name="action" value="submit">
if (($_POST['action'] ?? '') === 'submit') { /* 處理表單 */ }
// 位元組長度
$byteLen = strlen($str);
// 字元長度(需 mbstring,中文每字 1 長度)
$charLen = mb_strlen($str, 'UTF-8');
// 回上一頁
header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;
// 指定頁面
header('Location: success.php');
exit;
// ⚠ header 前不可有任何輸出(含 BOM、空白、echo)
$GLOBALS<?php
$a = 1; $b = 2;
function Sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b; // 3
?>
$_GET / $_POST<form method="get"> → $_GET['field']
<form method="post"> → $_POST['field']
// 通用:$_REQUEST(含 GET/POST/COOKIE),但優先序較難控制,建議顯式指定
function getClientIp(): string {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'unknown';
// 可能為多 IP,取第一個
return explode(',', $ip)[0];
}
echo getClientIp();
echo date('Y-m-d H:i:s'); // 2024-12-31 23:59:59
echo date('Y年m月d日'); // 2024年12月31日
echo date('Y-n-j'); // 2024-12-31 (不補零)
echo date('c'); // ISO 8601: 2024-12-31T23:59:59+08:00
// 設定時區
date_default_timezone_set('Asia/Taipei');
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 查詢單筆
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$id]);
$user = $stmt->fetch();
// 查詢多筆
$stmt = $pdo->query('SELECT * FROM articles ORDER BY created_at DESC');
$articles = $stmt->fetchAll();
// 新增
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
$stmt->execute([$name, $email]);
$newId = $pdo->lastInsertId();
session_start();
// 寫入
$_SESSION['user_id'] = 123;
// 讀取
$userId = $_SESSION['user_id'] ?? null;
// 刪除單一
unset($_SESSION['user_id']);
// 銷毀整個 Session
session_destroy();
熟練掌握上述片段並遵循安全原則(預處理語句、輸出逸脫、CSRF 保護),能大幅提升 PHP 動態網站開發效率與品質。建議將常用工具函式封裝為 Helper 類別或 functions.php 統一管理。