PHP 作為 Web 開發主流語言,擁有豐富的內建函數與特性。本文整理 8 個高頻使用且極具實用價值的技巧,涵蓋表單處理、資料驗證、超全域變數、時間日期等核心場景,助您寫出更簡潔、安全的程式碼。
HTML 表單中同名多選框(checkbox)若要接收為陣列,需在 name 屬性加上 []:
<input type="checkbox" name="colors[]" value="red"> 紅色
<input type="checkbox" name="colors[]" value="blue"> 藍色
<input type="checkbox" name="colors[]" value="green"> 綠色
PHP 接收時 $_POST['colors'] 即為陣列,直接可用於 in_array()、implode() 等操作。
根據欄位型別正確處理陣列轉 SQL 字串:
<?php
// 數值型欄位:直接用逗號連接
$ids = [1, 5, 9];
$sql = "SELECT * FROM products WHERE id IN (" . implode(',', $ids) . ")";
// 字串型欄位:需加單引號並防注入
$names = ['apple', 'banana'];
$quoted = array_map(function($v) { return "'" . mysqli_real_escape_string($conn, $v) . "'"; }, $names);
$sql = "SELECT * FROM products WHERE name IN (" . implode(',', $quoted) . ")";
最佳實務:實際專案請優先使用 Prepared Statements(預處理語句),完全避免 SQL 注入風險。
避免直接檢查 $_POST 是否為空(可能有空值提交),改檢查特定提交按鈕:
<?php
// HTML: <button type="submit" name="action" value="submit">送出</button>
if (isset($_POST['action']) && $_POST['action'] === 'submit') {
// 處理表單邏輯
} else {
// 顯示預設表單
}
<?php
// 字串長度(注意:中文在 UTF-8 下每字 3 位元組)
$len = strlen($str); // 位元組長度
$len = mb_strlen($str, 'UTF-8'); // 字元長度(需 mbstring 擴展)
// URL 導向回上一頁
header("Location: " . $_SERVER['HTTP_REFERER']);
exit; // 導向後務必結束腳本
<?php
$a = 10;
$b = 20;
function add() {
// 在函式內直接修改全域變數
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
add();
echo $b; // 輸出 30
雖然方便,但過度使用會降低程式碼可讀性,建議改用 依賴注入 或 返回值 傳遞資料。
棄用已棄用的 $HTTP_POST_VARS、register_globals 等舊寫法:
<?php
// GET 請求
$id = $_GET['id'] ?? null;
// POST 請求
$username = $_POST['username'] ?? '';
// 檔案上傳
$avatar = $_FILES['avatar'] ?? null;
// 伺服器/環境資訊
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
<?php
function getClientIp(): string {
$headers = [
'HTTP_X_FORWARDED_FOR',
'HTTP_X_REAL_IP',
'HTTP_CLIENT_IP',
'REMOTE_ADDR'
];
foreach ($headers as $header) {
if (!empty($_SERVER[$header])) {
// 可能有多個 IP,取第一個
$ips = explode(',', $_SERVER[$header]);
return trim($ips[0]);
}
}
return 'unknown';
}
注意:代理/負載平衡環境下需正確設定 Web Server 轉發標頭。
<?php
// 常用格式
echo date('Y-m-d H:i:s'); // 2024-01-15 14:30:45
echo date('Y年m月d日'); // 2024年01月15日
echo date('Y-n-j'); // 2024-1-15 (不補零)
// 時間戳轉換
$timestamp = strtotime('2024-01-15 14:30:00');
echo date('Y-m-d', $timestamp);
// 更強大的 DateTime 物件(PHP 5.2+)
$dt = new DateTime('now', new DateTimeZone('Asia/Taipei'));
echo $dt->format('Y-m-d H:i:s');
| 技巧 | 關鍵函數/語法 | 適用場景 |
|---|---|---|
| 多選框處理 | name="xxx[]", implode() | 表單多選提交 |
| SQL IN 安全建構 | array_map + escape / Prepared Statement | 動態條件查詢 |
| 表單送出判斷 | isset($_POST['btn']) | 表單驗證流程 |
| 字串/URL 處理 | mb_strlen, header Location | 內容驗證、導向 |
| 跨作用域變數 | $GLOBALS | 簡單腳本快速修改 |
| 資料接收規範 | $_GET/$_POST/$_FILES/$_SERVER | 所有輸入處理 |
| 客戶端 IP | HTTP_X_FORWARDED_FOR 等 | 日誌、風控、統計 |
| 日期時間格式化 | date(), DateTime | 顯示、儲存、計算 |
熟練掌握這 8 個技巧,能讓您在 PHP 開發中處理常見場景更得心應手,減少坑洞、提升程式碼品質。