針對欄位超過 20 個的大型表單,採用陣列命名法 name="setting[key]" 搭配白名單驗證,動態建構 INSERT/UPDATE SQL,大幅簡化程式碼。
<input type="text" name="setting[a]">
<input type="text" name="setting[b]">
...
<input type="text" name="setting[z]">
$fields = ['a','b',...,'z']; // 白名單字典
$setting = $_POST['setting']; // 自動獲得關聯陣列
// INSERT 動態建構
$sqlk = $sqlv = '';
foreach ($setting as $k => $v) {
if (in_array($k, $fields)) {
$sqlk .= ','.$k;
$sqlv .= ",'$v'";
}
}
$sqlk = substr($sqlk, 1);
$sqlv = substr($sqlv, 1);
$sql = "INSERT INTO kele_table ($sqlk) VALUES ($sqlv)";
// UPDATE 動態建構
$sql = '';
foreach ($setting as $k => $v) {
if (in_array($k, $fields)) $sql .= ",$k='$v'";
}
$sql = substr($sql, 1);
$sql = "UPDATE kele_table SET $sql WHERE id=$id";
$fields 白名單,不動 SQL 邏輯is_numeric(),字串型 mysqli_real_escape_string()