所以我有这样的形式:
<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);
答案 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);
}
}