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

PHP 網站開發必懂的 8 個實用技巧:從表單處理到時間操作

     編輯:PHP 相關知識

PHP 開發實戰技巧精選:提升效率的 8 個關鍵知識點

PHP 作為 Web 開發主流語言,擁有豐富的內建函數與特性。本文整理 8 個高頻使用且極具實用價值的技巧,涵蓋表單處理、資料驗證、超全域變數、時間日期等核心場景,助您寫出更簡潔、安全的程式碼。

技巧 1:陣列式命名處理多選框

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() 等操作。

技巧 2:安全建構 SQL IN 條件

根據欄位型別正確處理陣列轉 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 注入風險。

技巧 3:判斷表單是否已送出

避免直接檢查 $_POST 是否為空(可能有空值提交),改檢查特定提交按鈕:

<?php
// HTML: <button type="submit" name="action" value="submit">送出</button>
if (isset($_POST['action']) && $_POST['action'] === 'submit') {
    // 處理表單邏輯
} else {
    // 顯示預設表單
}

技巧 4:字串長度與 URL 導向

<?php
// 字串長度(注意:中文在 UTF-8 下每字 3 位元組)
$len = strlen($str);          // 位元組長度
$len = mb_strlen($str, 'UTF-8'); // 字元長度(需 mbstring 擴展)

// URL 導向回上一頁
header("Location: " . $_SERVER['HTTP_REFERER']);
exit; // 導向後務必結束腳本

技巧 5:善用 $GLOBALS 跨作用域存取

<?php
$a = 10;
$b = 20;

function add() {
    // 在函式內直接修改全域變數
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

add();
echo $b; // 輸出 30

雖然方便,但過度使用會降低程式碼可讀性,建議改用 依賴注入 或 返回值 傳遞資料。

技巧 6:統一使用超全域陣列接收資料

棄用已棄用的 $HTTP_POST_VARS、register_globals 等舊寫法:

<?php
// GET 請求
$id = $_GET['id'] ?? null;

// POST 請求
$username = $_POST['username'] ?? '';

// 檔案上傳
$avatar = $_FILES['avatar'] ?? null;

// 伺服器/環境資訊
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';

技巧 7:取得客戶端真實 IP

<?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 轉發標頭。

技巧 8:日期時間格式化大全

<?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所有輸入處理
客戶端 IPHTTP_X_FORWARDED_FOR 等日誌、風控、統計
日期時間格式化date(), DateTime顯示、儲存、計算

熟練掌握這 8 個技巧,能讓您在 PHP 開發中處理常見場景更得心應手,減少坑洞、提升程式碼品質。

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