2013-11-09 3 views
0

Я провел много времени в этом многократном выделенном массиве, который удерживает несколько значений в нескольких раскрывающихся списках, и я хочу вставить выбранные значения в таблицу.Codeigniter вставляет несколько выбранных значений в базу данных

Пусть говорят, я был выбран 1,2,3 из выпадающего списка, когда я print_r ($ this-> вход-> пост ('категория')) `, его показали

Array ([0] => 1 [1] => 2 [2] => 2) 

Однако когда вставка в таблицу, ее только последнее значение вставляется вместо всех трех значений.

Вот Посмотреть выбрать несколько значений:

$category = array(
    'name' => 'category', 
    'id' => 'category' 
); 

<select name="category[]" id="<?php echo $category['id'] ?>" multiple="multiple"> 
        <?php 
        foreach($catOpts as $catOpt) 
        { 
         $selected = ($this->input->post('category')==$catOpt->category_name) ? 'selected' : ''; 
         echo '<option value="'.$catOpt->category_id.'" '.$selected.'>'.$catOpt->category_name.'</option>'; 
        } 
        ?> 
       </select> 

In Controller я передавать значения проверки и, если проверка действительного ,:

$this->form_validation->set_rules('category[]', 'Category', 'required'); 

if($this->form_validation->run()) { // validation ok 

    if(!is_null($data = $this->db_model->save_listing(   
     $this->form_validation->set_value('category[]') 
    ))) { // success 

    //some message to acknowledge success created. 

    } 
} 

Модель для вставки в стол:

function save_listing($category) 
{ 

    $data = array(
     'category_id' => $category 
    ); 

    $this->db->insert('listing', $data); 

    return TRUE; 

} 

Я не знаю, как передать все значения (массив) в контроллер $this->form_validation->set_value('category[]'), а затем выполнить функцию модели save_listing() и сохранить все значения в своем столбце в базе данных.

Пожалуйста, помогите решить мою проблему, и я просматривал много форумов, но не смог получить решение.

Спасибо.

ответ

0

Когда поле представляет собой массив, вы должны:

$data= array(); 

while($v = $this->form_validation->set_value("field[]")) 
{ 
    $data[] = $v; 
} 

, если вы этого не сделаете, он возвращает последнее значение.

Вы также можете получить значения $this->input->post('fields'), но ваши правила здравостей не будут применяться к значениям, например, htmlspecialchars.

Конечно, это не указано в док, как и другие вещи ..

Источник /system/libraries/Form_validation.php:

/** 
* Get the value from a form 
* 
* Permits you to repopulate a form field with the value it was submitted 
* with, or, if that value doesn't exist, with the default 
* 
* @access public 
* @param string the field name 
* @param string 
* @return void 
*/ 
public function set_value($field = '', $default = '') 
{ 
    if (! isset($this->_field_data[$field])) 
    { 
     return $default; 
    } 

    // If the data is an array output them one at a time. 
    //  E.g: form_input('name[]', set_value('name[]'); 
    if (is_array($this->_field_data[$field]['postdata'])) 
    { 
     return array_shift($this->_field_data[$field]['postdata']); 
    } 

    return $this->_field_data[$field]['postdata']; 
} 
Смежные вопросы