如何使用PHP向数据库发送多个复选框/无线电值?

时间:2012-03-15 21:57:10

标签: php post checkbox request isset

我有一个由大量单选按钮和复选框组成的表单,我想知道将其值保存到数据库的最佳方法是什么。有几点需要考虑。

  1. 所有收音机/复选框都有不同的名称。我已经为每个收音机/复选框创建了一个新表格,共有30个新列。我被告知这种方式比在一个列中存储多个复选框值更好。

  2. 我正在开发一个基于MVC模型的系统,这是我在控制器文件中用来将radio / checkbox值发送到数据库的代码

    if (isset($this->request->post['buss_type'])) {
        $this->data['buss_type'] = $this->request->post['buss_type'];
    } else {
        $this->data['buss_type'] = '';
    }
    
  3. 我想知道我是否被迫复制了我的30个收音机/复选框的前一个代码,或者是否有一种更简单的方法可以将所有收音机/复选框放在一起?

  4. 如果你因为我刚开始学习PHP而非常具体,我会非常感激。

  5. 编辑 DEMO ADDED点击“公司帐户”查看表单。

4 个答案:

答案 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)";