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

PHP 實現 Select、Radio、Checkbox 默認選中狀態的最佳實踐

     編輯:PHP 相關知識

表單回顯、編輯頁面中,需根據數據庫值讓 ``、`` 自動選中對應項。核心邏輯:輸出時對比值,相等則輸出 `selected`/`checked` 屬性。本文提供標準寫法、數組批量處理技巧、XSS 防護要點。

Select 下拉框

<?php
// 假設 $row['wuyeleixing'] = 3 (來自數據庫)
$options = [
    1  => '住宅',
    2  => '辦公室',
    3  => '營業房',
    4  => '廠房',
    5  => '倉庫',
    // ...
];
?>
<select name="wuyeleixing">
    <?php foreach ($options as $value => $label): ?>
        <option value="<?= htmlspecialchars($value) ?>"
            <?= ($row['wuyeleixing'] == $value) ? 'selected' : '' ?>
        >
            <?= htmlspecialchars($label) ?>
        </option>
    <?php endforeach; ?>
</select>

關鍵點:

  • 用嚴格比較 `==`(字符串/整數自動轉換)或 `===`(嚴格類型),視數據類型而定。
  • 輸出值與標籤均用 htmlspecialchars() 防 XSS。
  • 選項多時建議將數組定義在配置文件/模型常量中,避免硬編碼分散。

Radio 單選框

<?php
// $row['dishu'] = 2
$radios = [
    3 => '空白',
    1 => '出讓',
    2 => '劃撥',
    4 => '集體',
];
?>
<?php foreach ($radios as $value => $label): ?>
    <label>
        <input type="radio" name="dishu" value="<?= htmlspecialchars($value) ?>"
            <?= ($row['dishu'] == $value) ? 'checked' : '' ?>
        >
        <?= htmlspecialchars($label) ?>
    </label>
<?php endforeach; ?>

注意:同組 Radio name 必須一致,`checked` 無值屬性,有即生效。

Checkbox 復選框(單個/多組)

單個獨立 Checkbox

<?php
// $row['fujia_jiaju'] = 1 (或 true/'on')
$checked = !empty($row['fujia_jiaju']) ? 'checked' : '';
?>
<label>
    <input type="checkbox" name="fujia_jiaju" value="jiaju" <?= $checked ?>>
    家具
</label>

多組 Checkbox 批量輸出(推薦)

<?php
// 數據庫存儲:逗號分隔 'jiaju,chuju' 或 JSON 數組
$selected = explode(',', $row['fujia'] ?? ''); // ['jiaju', 'chuju']

$checkboxGroups = [
    'jiaju' => '家具',
    'chuju' => '廚具',
    'woju'  => '臥具',
    'TV'    => '電視機',
];
?>
<?php foreach ($checkboxGroups as $value => $label): ?>
    <label>
        <input type="checkbox" name="fujia[]" value="<?= htmlspecialchars($value) ?>"
            <?= in_array($value, $selected) ? 'checked' : '' ?>
        >
        <?= htmlspecialchars($label) ?>
    </label>
<?php endforeach; ?>

提交處理:`name="fujia[]"` 使 PHP 接收到數組 $_POST['fujia'] = ['jiaju', 'TV'],存儲時可 implode(',', $_POST['fujia']) 或 json_encode。

通用輔助函數(提取到工具類)

<?php
function form_selected($current, $target, $attr = 'selected') {
    return ($current == $target) ? $attr : '';
}

function form_checked($current, $target) {
    return ($current == $target) ? 'checked' : '';
}

// 使用
<option value="1" <?= form_selected($row['type'], 1) ?>>類型一</option>
<input type="radio" name="sex" value="1" <?= form_checked($row['sex'], 1) ?>>
<input type="checkbox" name="tag[]" value="news" <?= form_checked(in_array('news', $tags), true) ?>>
?>

安全與可用性清單

  • ✅ 所有動態輸出值/標籤經 htmlspecialchars() 轉義。
  • ✅ Radio/Checkbox 包裹在 `
  • ✅ Checkbox 組用 `name="field[]"` 接收數組,避免同名覆蓋。
  • ✅ 提供「全選/反選」JS 增強(可選)。
  • ⚠️ 數據庫字段類型統一:TINYINT(1)/ENUM/SET/JSON,避免字符串比較歧義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved