2013-05-22 62 views
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請求發送數據到控制器。現在我堅持實際的查詢應該爲每一步插入新行。我怎麼能做到這一點?

順便說一下我使用笨,它的綁定查詢:

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

我真不明白的是爲什麼你給你的輸入字段與你的textarea同名。在處理數據期間,您無法引用您的輸入是屬於textarea還是屬於輸入字段。 – thpl

+0

@ThomasDavidPlat好,沒有明顯的原因!我會將字段名稱更改爲其他名稱。謝謝! –

+0

看看我更新的答案。我也糾正了這個問題 – thpl

回答

4

更新

我糾正文本域和輸入字段之間的差異的處理。旁註:整個控制器邏輯屬於一個模型。出於簡化的原因,我只是把它放到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循環來遍歷它們,並將所有的值存儲在一個數組中,並使用CodeIgniter的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); 

    } 

} 
+0

他需要分割textarea和文本輸入,我認爲他們會插入同一行,所以你需要重寫他的所有代碼 – rcpayan

+0

@rcpayan是啊我已經注意到了(看看我對這個問題的評論) – thpl

+0

噢對不起我的錯誤 – rcpayan