2015-07-10 112 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 
     ) 

)