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

PHP 驗證核取方塊有效性的完整實作

     編輯:PHP 綜合知識

核取方塊提交行為

HTML 核取方塊 <input type="checkbox"> 有特殊行為:勾選時才會隨表單提交,未勾選則完全不出現在 $_POST 中。因此驗證邏輯需分兩階段:

  1. 檢查 isset($_POST['name']) 判斷是否被勾選
  2. 若勾選,再驗證 $_POST['name'] 值是否符合預期

基本驗證範例

<?php
$expectedValue = 'yes';
$subscribed = false;

if (isset($_POST['subscribe'])) {
    // 使用者勾選了核取方塊
    if ($_POST['subscribe'] === $expectedValue) {
        $subscribed = true;
    } else {
        // 值被竄改(非預期值)
        error_log('核取方塊值無效: ' . $_POST['subscribe']);
        $subscribed = false;
    }
} else {
    // 使用者未勾選
    $subscribed = false;
}

if ($subscribed) {
    echo '驗證通過,訂閱成功';
    // 執行訂閱邏輯...
} else {
    echo '驗證失敗:請勾選同意條款';
}

進階:多選核取方塊陣列驗證

<!-- HTML: 多選興趣 -->
<input type="checkbox" name="interests[]" value="tech"> 科技
<input type="checkbox" name="interests[]" value="sports"> 運動
<input type="checkbox" name="interests[]" value="music"> 音樂

<?php
$allowed = ['tech', 'sports', 'music'];
$selected = $_POST['interests'] ?? [];

// 過濾非法值
$valid = array_intersect($selected, $allowed);

if (empty($valid)) {
    echo '請至少選擇一項興趣';
} else {
    echo '已選擇: ' . implode(', ', $valid);
    // 儲存 $valid...
}

安全性最佳實踐

  • 嚴格比對:使用 === 避免型別轉換繞過(如 '1' == true)
  • 白名單驗證:只接受預期值,拒絕其它輸入
  • CSRF 保護:表單加入一次性 Token,防止跨站請求偽造
  • 前後端一致:JS 前端驗證僅為 UX,後端必須再驗證一次

常見錯誤與修正

錯誤寫法問題正確寫法
if ($_POST['chk'])未勾選時觸發 Undefined indexif (isset($_POST['chk']))
if ($_POST['chk'] == 'on')瀏覽器預設值為 'on',但可被修改明確指定 value="yes" 並比對
empty($_POST['chk'])無法區分「未勾選」與「勾選但值為空」先 isset 再驗證值
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved