从动态表单获取数据 - 多字段行

时间:2015-08-11 17:06:32

标签: php jquery forms twitter-bootstrap

目前我正在创建一个表单,其中包含一个动态添加字段的选项(作为带有额外字段的行)。生成器是一个只添加到引导包装器中的表。如下图所示。一切都工作顺利,但我对后POST编程很无能,导致现在var_dump似乎很乱,我不太清楚什么解决方案最好a)在jquery中将数据发送到php时形成数据或b)将发布数据合并到用户数组。超过所有期望的输出将是(PHP)

array()
['user1'] => 
      ['role'] => 'something'
      ['can_edit'] = > 0
      ['can_read'] = > 1
      ['can_execute'] = > 1
      ['is_admin'] = > 0

只是想知道如何实现这一点,给我一些提示。此外 - 正如你所看到的那样,“on”表示is_checked,如果它的0根本不存在则为1,但这不是问题。

enter image description here

帖子var_dump

["user"]=>
  array(4) {
    [0]=>
    string(5) "user1"
    [1]=>
    string(5) "user2"
    [2]=>
    string(5) "user3"
    [3]=>
    string(5) "user4"
  }
  ["role"]=>
  array(4) {
    [0]=>
    string(9) "something"
    [1]=>
    string(9) "something"
    [2]=>
    string(9) "something"
    [3]=>
    string(9) "something"
  }
  ["can_edit"]=>
  array(4) {
    [0]=>
    string(2) "on"
    [1]=>
    string(2) "on"
    [2]=>
    string(2) "on"
    [3]=>
    string(2) "on"
  }
  ["can_read"]=>
  array(2) {
    [0]=>
    string(2) "on"
    [1]=>
    string(2) "on"
  }
  ["can_execute"]=>
  array(2) {
    [0]=>
    string(2) "on"
    [1]=>
    string(2) "on"
  }
  ["is_admin"]=>
  array(1) {
    [0]=>
    string(2) "on"
  }

我的发电机

$( “ADDCF”)。单击(函数(){

$("#customFields").append('<tr><td>'+sel[0].outerHTML+'</td><td><input class="form-control" type="text" name="role[]" /></td><td><input type="checkbox" class="mycheckbox" name="can_edit[]"></td><td><input type="checkbox" class="mycheckbox" name="can_read[]"></td><td><input type="checkbox" class="mycheckbox" name="can_execute[]"></td><td><input type="checkbox" class="mycheckbox" name="is_admin[]"></td><td><a href="javascript:void(0);" class="remCF">Remove</a></td></tr>');
$('.mycheckbox').iCheck({checkboxClass: 'icheckbox_square-blue',radioClass: 'iradio_square-blue'});

});

1 个答案:

答案 0 :(得分:0)

我假设您正在命名输入,例如name =&#34; user []&#34; ?

通常我会通过在名称字段中添加一个计数器来执行此操作,例如name =&#34; user_1&#34;然后命名=&#34; user_2&#34;等,让JS跟踪。

然后在php中我会像这样循环:

$records = array();
foreach ($_POST as $key => $value)
{
    if (substr($key, 0, 5) != 'user_') continue;
    $row = substr($key, 5);
    $user = $_POST['user_'.$row];
    $role = $_POST['role_'.$row];
    $can_edit = 0;
    if (isset($_POST['can_edit_'.$row])) $can_edit = 1;
    // ETC

    // VALIDATION GOES HERE

    // IF NO VALIDATION ERRORS:
    $records[] = array('user' => $user, 'role' => $role, 'can_edit' = $can_edit;
}

javascript生成器:

$(".addCF").click(function(){
    count = $('#customFields tr').length + 1;
    $("#customFields").append('<td>'+sel[0].outerHTML+'</td><td><input class="form-control" type="text" name="role'+count+'" /></td><td><input type="checkbox" class="mycheckbox" name="can_edit'+count+'"></td><td><input type="checkbox" class="mycheckbox" name="can_read'+count+'"></td><td><input type="checkbox" class="mycheckbox" name="can_execute'+count+'"></td><td><input type="checkbox" class="mycheckbox" name="is_admin'+count+'"></td><td><a href="javascript:void(0);" class="remCF">Remove</a></td></tr>');
    $('.mycheckbox').iCheck({checkboxClass: 'icheckbox_square-blue',radioClass: 'iradio_square-blue'});
});