我有一个由大量单选按钮和复选框组成的表单,我想知道将其值保存到数据库的最佳方法是什么。有几点需要考虑。
所有收音机/复选框都有不同的名称。我已经为每个收音机/复选框创建了一个新表格,共有30个新列。我被告知这种方式比在一个列中存储多个复选框值更好。
我正在开发一个基于MVC模型的系统,这是我在控制器文件中用来将radio / checkbox值发送到数据库的代码
if (isset($this->request->post['buss_type'])) {
$this->data['buss_type'] = $this->request->post['buss_type'];
} else {
$this->data['buss_type'] = '';
}
我想知道我是否被迫复制了我的30个收音机/复选框的前一个代码,或者是否有一种更简单的方法可以将所有收音机/复选框放在一起?
如果你因为我刚开始学习PHP而非常具体,我会非常感激。
编辑 DEMO ADDED点击“公司帐户”查看表单。
答案 0 :(得分:1)
这至少对Q.3有帮助
foreach(array('buss_type','anotherfield','anotherfield','...etc') as $index)
{
if (isset($this->request->post[$index])) { $this->data[$index] = $this->request->post[$index]; } else { $this->data[$index] = NULL; }
}
答案 1 :(得分:1)
听起来你需要一个查询构建器。以下是我的一个例子
$guide=array(
"active"=>"Active Properties",
"incomplete"=>"Incomplete Properties",
"default"=>"Default (Borders and Headers) ",
"links"=>"Link Color",
"background"=>"Background Color",
"navcolor"=>"Navigation Color");
$s="UPDATE dashboard_layout SET ";
$c="";
$vs="";
foreach($guide as $k=>$v){
$s.="`$k` = \"".mysql_real_escape_string($_POST[$k])."\"".($k=="navcolor"?"":",")." ";
$c.="`$k`".($k=="navcolor"?"":",");
$vs.='"'.mysql_real_escape_string($_POST[$k]).'"'.($k=="navcolor"?"":",");
}
$n="INSERT INTO dashboard_layout ($c,lender_id) VALUES ($vs,$company)";
$s.="WHERE lender_id='$company'";
$sql=($editmode?$s:$n);
$db->run($sql);
请记住,您仍然可以将foreach与对象一起使用。我建议使用指南
答案 2 :(得分:1)
如果您将所有复选框视为相同,则可以在html表单中将它们设为一个数组。
<input name="check[footype]" type="checkbox" value="1" />
<input name="check[bartype]" type="checkbox" value="baz" />
然后只需在服务器端循环。
foreach ($_POST['check'] as $key => $value) {
// repeated logic here
}
基本上,通过以这种方式命名表单中的输入,您使$_POST['check']
包含一个数组,其中包含您可以循环访问的所有检查值服务器端。
答案 3 :(得分:1)
添加到dqhendricks的回复,如果你自己构建查询而不是通过框架,这可能会对你有所帮助(我还没试过!):
$values = array();
foreach ($_POST['check'] as $key => $value ) {
// I advise you to use either PDO or mysqli but to simplify:
$values = "'" . mysql_real_escape_string($value) . "'";
}
// all values will be separated by a comma
$values_list = implode(',', $values);
$query = "insert into table_name values ($values_list)";