2015-07-10 114 views
0

我想在codeigniter中一次更新多行。我有以下一個我需要爲每個用戶更新的字段的示例使用codeigniter更新多行

<div class="row"> 
    <input type="text" name="id[46][firstname]" value=""> 
    <input type="text" name="id[46][lastname]" value=""> 
</div> 

<div class="row"> 
    <input type="text" name="id[48][firstname]" value=""> 
    <input type="text" name="id[48][lastname]" value=""> 
</div> 

我很努力地獲取更新值。實際的更新語句不應該是一個問題,我只關心檢索每個用戶的正確表單值。

foreach($_POST as $key => $value){ 
     $keyparts = explode('_', $key); 
     if(count($keyparts) == 2){ 
      switch ($keyparts[0]) { 
       case 'firstname': 
        $records[$keyparts[1]]->firstname = $value; 
        break; 
       case 'lastname': 
        $records[$keyparts[1]]->lastname = $value; 
        break; 
       default: 
        break; 
      } 
     } 
     // update statement to go here 
    } 
+0

你應該避免在使用Codeigniter時使用$ _POST,因爲它對這個'$ this-> input-> post('field_name')'有更好的功能。 – Kishor

回答

0

HTML代碼

<div class="row"> 
<input type="text" name="46[firstname]" value=""> 
<input type="text" name="46[lastname]" value=""> 
</div> 

<div class="row"> 
<input type="text" name="48[firstname]" value=""> 
<input type="text" name="48[lastname]" value=""> 
</div> 

PHP代碼

$records = array(); 
foreach($_POST as $key => $value){ 

    if(is_array($value)) 
    { 
     foreach($value as $new_key=>$new_val) 
     { 
      $records[$key][$new_key] = $new_val; 
     }   
    } 
} 
0

的問題是,你不理解您的文章是如何建立的陣列。從你在上面HTML中,表單將構建以下POST數組:

array => 
    [id] => 
     [46] => 
      [firstname] => "john" 
      [lastname] => "doe" 

     [48] => 
      [firstname] => "jane" 
      [lastname] => "doet" 

與陣列在視覺上佈置這樣的,你現在可以迭代,以獲取你的價值觀。然而,有一件事我不明白在你的代碼中,爲什麼你使用explode(),你想變成一個數組?在數據庫中像這樣你就可以輕鬆地重複和更新這些信息:

$this->load->model("my_model"); 
$postdata = $this->input->post(); 
foreach($postdata['id'] as $id => $user_info){ 
    $this->my_model->update_user($id, $user_info); // your model method should handle the update information by ID. 
} 
0

,如果你的表單處理頁面上做echo "<pre>" .print_r($_POST, true)."</pre>";,結果應該是臨客這個

Array 
(
    [id] => Array 
     (
      [46] => Array 
       (
        [firstname] => firstNameValue1 
        [lastname] => lastNameValue1 
       ) 

      [48] => Array 
       (
        [firstname] => firstNameValue2 
        [lastname] => lastNameValue2 
       ) 

     ) 

) 

所以,這應該可以幫助你捉值:

foreach($_POST['id'] as $key => $value){ 
    $records[$key] = (object)array(); 
    $records[$key]->firstname = $value['firstname']; 
    $records[$key]->lastname = $value['lastname']; 

    // update statement to go here 
} 

結果此結構:

Array 
(
    [46] => stdClass Object 
     (
      [firstname] => firstNameValue1 
      [lastname] => lastNameValue1 
     ) 

    [48] => stdClass Object 
     (
      [firstname] => firstNameValue2 
      [lastname] => lastNameValue2 
     ) 

)