2015-06-12 3 views
1

На мой взгляд, мне нужно, чтобы иметь возможность получить скрытую banner_image_id и использовать это в моем $this->db->where('banner_image_id', $id) на моей модели функцииCodeigniter db-> где() не работает в цикле Еогеасп

Когда я обновить изображение. Он не обновляется до правильной строки. Вместо этого он обновляет все строки одним и тем же именем.

Вопрос: На моей модели, как я могу убедиться, что мои $this->db->where('banner_image_id', $id) обновляют правильные строки.

Я сделал vardump ($ id), и результат string(2) "63", который является правильным, но все равно обновляет каждую строку. Я попробовал update_batch и не повезло.

Модель Функция

public function edit_banner_image($file_name) { 
    $banner_image_id = $this->input->post('banner_image_id'); 

    if (isset($banner_image_id)) { 
     foreach ($banner_image_id as $id) { 
      //var_dump($id); 
      //exit; 
      $data = array('banner_id' => $this->uri->segment(4),'banner_image' => $file_name); 

      $this->db->where('banner_image_id', $id); 

      //$this->db->where_in('banner_image_id', $id); // Tried No Luck 
      //$this->db->or_where_in('banner_image_id', $id); // Tried No Luck 

      $this->db->update($this->db->dbprefix . 'banner_img', $data); 
     } 
    } 
} 

View Table

<table> 
    <tbody> 
     <?php foreach ($banner_images as $img) { ?> 
     <tr> 
      <td> 
       <?php echo $img['banner_image_id'];?> 
       <input type="hidden" name="banner_image_id[]" value="<?php echo $img['banner_image_id'];?>"> 
      </td> 
      <td> 
       <input type="file" name="banner_image[]" multiple size="20"> 
      </td> 
      <td> 
       <img src="<?php echo base_url() . 'uploads/' . $img['banner_image'];?>" /> 
       <input type="hidden" name="banner_image" value="<?php echo $img['banner_image'];?>"> 
      </td> 
     </tr> 
     <?php }?> 
    <tbody> 
</table> 

ответ

1

Попробуйте сцепить Идентификационные номера в цикле Еогеасп и передать его где функция сразу.

Предполагая, что ваши идентификационные номера array(1,2,5,6).

public function edit_banner_image($file_name) { 
    $banner_image_id = $this->input->post('banner_image_id'); 

    if (isset($banner_image_id)) { 

     $bid = 'IN('; 
     foreach ($banner_image_id as $id) { 
      $bid .= $id . ','; 
     } 

     $bid = substr($bid, 0, -1) . ')'; //remove last comma and add closing paranthesis. 
     //The content of the variable $bid would be like 
     //IN(1,2,5,6) 

     $data = array('banner_id' => $this->uri->segment(4),'banner_image' => $file_name); 

     $this->db->where('banner_image_id', $id); 
     $this->db->update($this->db->dbprefix . 'banner_img', $data); 

    } 
} 

Еще одно предложение:

Преобразование $banner_image_id в обычный массив в случае это ассоциативный массив.

public function edit_banner_image($file_name) { 
    $banner_image_id = $this->input->post('banner_image_id'); 
    $bid = array(); 

    if (isset($banner_image_id)) { 
     foreach ($banner_image_id as $id) { 
      $bid[] = $id; 
     } 

     $data = array('banner_id' => $this->uri->segment(4), 
         'banner_image' => $file_name); 

     $this->db->where_in('banner_image_id', $bid); 
     $this->db->update($this->db->dbprefix . 'banner_img', $data);  
    } 
} 

Я предлагаю вам сделать Перекодировку в контроллере секциях , а не в модели. Строки, заканчивающиеся на //, должны быть в контроллере. Вы можете легко пройти $bid до edit_banner_image($file_name, $bid) функции тогда.

public function edit_banner_image($file_name, $bid) { 
    $banner_image_id = $this->input->post('banner_image_id'); // 
    $bid = array();// 

    if (isset($banner_image_id)) {// 
     foreach ($banner_image_id as $id) { // 
      $bid[] = $id;// 
     } 

     $data = array('banner_id' => $this->uri->segment(4), 
         'banner_image' => $file_name); 

     $this->db->where_in('banner_image_id', $bid); 
     $this->db->update($this->db->dbprefix . 'banner_img', $data);  
    } 
} 

Таким образом, у вас будет более читаемый код.

+0

обновляет последнюю строку по какой-либо причине – user4419336

Смежные вопросы