提交包含大量复选框的表单

时间:2013-02-05 19:34:16

标签: php html

提交包含大量复选框的表单的最佳方法是什么 no_of_checkboxes非常大(超过200) 我需要以最有效的方式将复选框的状态映射到数据库表。

1 个答案:

答案 0 :(得分:2)

  

发布表单似乎很慢。

我不确定为什么它很慢,但这里有一些尝试。将所有复选框字段放在表单元素之外,以便它们不会被提交。在表单中放入一个名为“boxes”的隐藏元素。使用JavaScript在提交时触发函数,json对复选框进行编码,并将字符串放在隐藏字段“boxes”中。在操作页面上,json解码或只将json字符串保存在单个DB字段中。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
var boxes = {};
$(document).ready(function(){
    $('form').submit(function(){
        $('input[type=checkbox]').each(function(){

            if($(this).prop('checked')){
                boxes[$(this).prop('name')] = '1';
                //boxes[$(this).prop('name')] = $(this).val(); // if you want the value
            }else{
                boxes[$(this).prop('name')] = '0';
            }
        });
        $('#boxes').val(JSON.stringify(boxes));
        return true;
    });
});
</script>
  

我需要在大多数情况下将复选框的状态映射到数据库表   有效的方式。

<?php
$boxes = json_decode($_POST['boxes'], true);
$columns = array();
$values = array();
foreach($boxes as $key=>$val){
  $columns[] = $key;
  $values[] = "'$val'";
}
$columns = "(".implode(', ', $columns).")";
$values = "(".implode(', ', $values).")";
// example query: mysql_query("INSERT INTO table $columns VALUES $values");
?>