这是可能的,但不推荐,除非你非常小心。确保这种循环方法安全可能会花费与为所有表单字段进行所有输入一样多的时间,但您的解决方案将更加健壮和模块化。
您应该创建一个映射数组,其中包含有关验证和格式化某个值的指令,如下所示:
$validator = array(
'user_name' => array('mask' => "'%s'", 'escape' => true, 'boolean' => false),
'user_age' => array('mask' => "%d", 'escape' => false, 'boolean' => false),
'has_car' => array('mask' => "%d", 'escape' => false, 'boolean' => true)
);
然后你迭代这个验证器数组,并检查你发布的数据中是否存在键,并将指令应用于值,并将所有 SQL 集收集到一个单独的数组中:
$set = array();
foreach ($_POST as $key => $dirs)
{
if ($dirs['boolean'])
{
$val = isset($_POST[$key]) ? 1 : 0;
$set[] = sprintf("%s=".$dirs['mask'],$key,$val);
}
elseif (isset($_POST[$key]))
{
$val = $dirs['escape'] ? addslashes($_POST[$key]) : $_POST[$key];
$set[] = sprintf("%s=".$dirs['mask'],$key,$val);
}
}
在此之后,您可以通过内爆集合来创建查询:
$sql = "INSERT INTO table SET ".implode(",",$set);
我上面的方法可能不适合您的实际需求,但更多的是您可以用来在服务器端处理大型表单的概念。您可以定义更复杂的验证,并使其也处理数组,而不仅仅是像本例那样的复选框和文本字段。
始终保持警惕,您的表单是您宝贵数据的前门,如果您贪便宜,您会后悔的!