0

所以我有这个表格:

    <form id="stepform" action="#" method="post">
        <fieldset>
        <legend>Step #1</legend>
        <label>Title</label>
        <input type="hidden" name="csrf_modo" value="b94961394f8e6f7efaa4e37ca9007822">
        <input type="text" name="field[]" class="input-xlarge">
        <label>Body</label>
        <textarea class="input-xlarge" name="field[]"></textarea>
        </fieldset>
    </form>

当用户单击按钮时,jquery 会动态附加另外两个完全相同的字段:

 count = 2;
$("#addstep").click(function(){


    $('#stepform').append('<legend>Step #' + (count++) + '</legend>');
    $('#stepform').append('<label>Title</label><input type="text" name="field[]" class="input-xlarge">');
    $('#stepform').append('<label>Body</label><textarea class="input-xlarge" name="field[]"></textarea>');
    $('#addstep').scrollintoview();
    return false;

});

正如您所看到的,一个步骤有 2 个字段,当用户单击按钮时,步骤递增并向该步骤添加另外 2 个字段,依此类推......之后,我通过 ajax 请求将数据发送到控制器。现在我被困在应该为每一步插入新行的实际查询上。我怎么能做到这一点?

顺便说一句,我正在使用 codeigniter,它是绑定查询:

$this->db->query($sql, $data);
4

1 回答 1

4

更新

我更正了对 textareas 和输入字段之间差异的处理。旁注:整个 Controller 逻辑属于一个模型。为了简单起见,我只是将其放入 Controller 中。

HTML

<form id="stepform" action="#" method="post">
    <fieldset>
    <legend>Step #1</legend>
    <label>Title</label>
    <input type="hidden" name="csrf_modo" value="b94961394f8e6f7efaa4e37ca9007822">
    <input type="text" name="field[input][]" class="input-xlarge">
    <label>Body</label>
    <textarea class="input-xlarge" name="field[textarea][]"></textarea>
    </fieldset>
</form>

JS

count = 2;
$("#addstep").click(function(){


    $('#stepform').append('<legend>Step #' + (count++) + '</legend>');
    $('#stepform').append('<label>Title</label><input type="text" name="field[input][]" class="input-xlarge">');
    $('#stepform').append('<label>Body</label><textarea class="input-xlarge" name="field[textarea][]"></textarea>');
    $('#addstep').scrollintoview();
    return false;

});

PHP

class SomeController extends MY_Controller{

    public function process_request()
    {
        $insert_data = array();
        $field_data = $this->input->post('field');

        for($i = 0; $i < count($field_data['input']); $i++)
        {
            $insert_data[] = array(
                'db_col_name_input' => $field_data['input'][$i],
                'db_col_name_textarea' => $field_data['textarea'][$i]
            );
        }

        $this->db->insert_batch('my_table', $insert_data);

    }

}

老答案:

由于您将方括号附加到输入字段名称,您将获得一个数组,其中包含具有此名称的所有字段的值。因此,您可以使用 foreach 循环遍历它们并将所有值存储在一个数组中,并使用 CodeIgniters insert_batch() 方法同时插入多个数据。

class SomeController extends MY_Controller{

    public function process_request()
    {
        $insert_data = array();

        foreach($this->input->post('field') AS $field)
        {
            $insert_data[] = array(
                'db_col_name' => $field
            )
        }

        $this->db->insert_batch('my_table', $insert_data);

    }

}
于 2013-05-22T12:11:51.030 回答