Codeigniter循环通过post数组

时间:2013-05-22 12:05:20

标签: codeigniter

所以我有这样的形式:

    <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);

1 个答案:

答案 0 :(得分: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);

    }

}