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

如何使用php向数据库发送多个复选框/无线电值?,php,post,checkbox,request,isset,Php,Post,Checkbox,Request,Isset,我有一个由许多单选按钮和复选框组成的表单,我想知道将它们的值保存到数据库中的最佳方法是什么。有几件事需要考虑 所有收音机/复选框都有不同的名称。我已经为每个收音机/复选框创建了一个新表,其中包含一列,总共30列。有人建议,这种方式比在一列中存储多个复选框值要好 我正在开发一个基于MVC模型的系统,这是我在控制器文件中的代码,用于将radio/checkbox值发送到数据库 if (isset($this->request->post['buss_type'])) { $thi

我有一个由许多单选按钮和复选框组成的表单,我想知道将它们的值保存到数据库中的最佳方法是什么。有几件事需要考虑

  • 所有收音机/复选框都有不同的名称。我已经为每个收音机/复选框创建了一个新表,其中包含一列,总共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


  • 编辑点击“公司账户”查看表格。

    这至少对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; }
    }
    

    这至少对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; }
    }
    

    听起来你需要一个查询生成器。这是我的一个例子

    $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用于对象。我建议使用指南

    听起来你需要一个查询生成器。这是我的一个例子

    $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用于对象。我建议您使用指南

    如果您对所有复选框都一视同仁,您只需在html表单中将它们设置为一个数组即可

    <input name="check[footype]" type="checkbox" value="1" />
    <input name="check[bartype]" type="checkbox" value="baz" />
    

    基本上,通过以这种方式命名表单中的输入,可以使
    $\u POST['check']
    包含一个数组,其中包含服务器端的所有检查值,您可以在其中进行循环。

    如果您对所有复选框都一视同仁,只需在html表单中将它们设置为一个数组即可

    <input name="check[footype]" type="checkbox" value="1" />
    <input name="check[bartype]" type="checkbox" value="baz" />
    

    基本上,通过以这种方式命名表单中的输入,您正在使
    $\u POST['check']
    包含一个数组,其中包含所有的检查值,您可以在服务器端进行循环。

    添加到dqhendricks回复中,如果您是自己而不是通过框架构建查询,这可能会对您有所帮助(尽管我没有尝试过!):


    除了dqhendricks的回复之外,如果您是自己构建查询,而不是通过框架构建查询,这可能会对您有所帮助(尽管我没有尝试过!)


    您几乎不应该在一列中存储多个值。一个例外是将二进制值组合为单个整数,即使这样也只适用于特定系统。您几乎不应该在一列中存储多个值。一个例外是将二进制值组合为单个整数,即使这样也只适用于特定系统。根据这个答案,您将不得不在任何字段发生更改时编辑数组和html。更不用说你的代码中会有一个很长很难看的数组。请看我的答案,了解不同的观点。创建阵列客户端。我关心的一件事是如何从数据中构建DB查询,即您是否必须在请求中使用name=“check[id]”并干扰不属于复选框集的列?我的方法是创建一个要使用的字段的白名单。是的,你是对的,要管理的复选框名称列表的两倍将被创建。非常感谢你的答案。这就是我要找的代码@dqhendricks我也喜欢你的建议,但之前有人推荐我,但我一直不知道如何准确地编写代码。同样,所有值都必须指向数据库中唯一的列,因此,例如,如果我选中了[something],那么如何命名该字段的表列?。我会在一分钟内添加一个表单的演示,这样你们就可以看一看了。谢谢。@codekmarv如果输入名为“check[somekey]”,当您执行我在下面写的循环时,$key将包含“somekey”,而$value将包含该输入的值。那么在这种情况下,数据库中存储somekey值的列的名称是什么?是检查[某个键]还是只是“某个键”?非常感谢您的帮助。有了这个答案,您将不得不在任何字段发生更改时编辑数组和html。更不用说你的代码中会有一个很长很难看的数组。请看我的答案,了解不同的观点。创建阵列客户端。我关心的一件事是如何从数据中构建DB查询,即您是否必须在请求中使用name=“check[id]”并干扰不属于复选框集的列?我的方法是创建一个要使用的字段的白名单。是的,你是对的,要管理的复选框名称列表的两倍将被创建。非常感谢你的答案。这就是我要找的代码@dqhendricks我也喜欢你的建议,但之前有人推荐我,但我一直不知道如何准确地编写代码。同样,所有值都必须指向数据库中唯一的列,因此,例如,如果我选中了[something],那么如何命名该字段的表列?。我会在一分钟内添加一个表单的演示,这样你们就可以看一看了。谢谢。@codekmarv如果输入名为“check[somekey]”,当您执行我在下面写的循环时,$key将包含“somekey”,而$value将包含该输入的值。那么在这种情况下,数据库中存储somekey值的列的名称是什么?是检查[某个键]还是只是“某个键”?非常感谢您的帮助。他是对的,您必须记住,来自用户的数据是不可信的。用户可以使用任何数组密钥在数组中滑动任何数据。他是对的,您必须记住,来自用户的数据是不可信的。用户可以用任何数组键在数组中插入任何数据。谢谢,但我不明白这对我有什么帮助。我想我太傻了:(谢谢,但我真的不明白这对我有什么帮助。我想我太傻了