2014-02-03 2 views
1

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

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

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

Контроллер

public function general() 
{ 
    $this->data['title'] = admin_page_heading('glyphicon glyphicon-cog', 'title_settings'); 

    // check if form submited 
    if(!empty($_POST)):  
    // get form fields name and value automatic 
    foreach($_POST as $key => $value):  
     // convert result in array 
     $data[] = $key; 
    endforeach; 
    endif; 

    //echo '<pre>', print_r($data), '</pre>'; 

    $rules = $this->settings_model->rules; 
    $this->form_validation->set_rules($rules); 

    // Process the form 
    if($this->form_validation->run() === TRUE): 
    $data = $this->settings_model->array_from_post($data); 

    // add or update value 
    foreach($data as $name => $value): 
     // check if option is in record 
     if(get_option($name)): 
     // update the optoin 
     update_option($name, $value); 
     else: 
     // add new row if option is not in record 
     add_option($name, $value); 
     endif; 
    endforeach; 
    endif; 

    // load general settings view 
    $this->load->view('settings/general', $this->data); 
} 

Добавить Опция

function add_option($name,$value) 
{   
    $CI =& get_instance(); 
    $CI->load->database(); 
    $query=$CI->db->select('*')->from('site_options')->where('option_name',$name)->get(); 

    //option already exists 
    if($query->num_rows() > 0) 
    return false; 

    $data_type='text'; 
    if(is_array($value)) 
    { 
    $data_type='array'; 
    $value=serialize($value); 
    } 
    elseif(is_object($value)) 
    { 
    $data_type='object'; 
    $value=serialize($value); 
    } 

    $data=array(
    'option_name'=>$name, 
    'option_value'=>$value, 
    'option_type'=>$data_type, 
    ); 
    $CI->db->insert('site_options',$data); 
} 

Update Option

function update_option($name,$value) 
{ 
    $CI =& get_instance(); 
    $CI->load->database(); 

    $data_type='text'; 
    if(is_array($value)) 
    { 
    $data_type='array'; 
    $value=serialize($value); 
    } 
    elseif(is_object($value)) 
    { 
    $data_type='object'; 
    $value=serialize($value); 
    } 

    $data=array(
    'option_name'=>$name, 
    'option_value'=>$value, 
    'option_type'=>$data_type, 
    ); 
    $query=$CI->db->select('*')->from('site_options')->where('option_name',$name)->get(); 

    //if option already exists then update else insert new 
    if($query->num_rows() < 1) return $CI->db->insert('site_options',$data); 
    else   return $CI->db->update('site_options',$data,array('option_name'=>$name)); 
} 

Функции для заполнения MULTISELECT

function get_multiselect($name, $items = array(), $id=false) 
{ 
    echo '<select multiple="multiple" id="'.$id.'" name="'.$name.'[]">'; 
    $item = $items; 
    $selects = get_option($name); 

    for($i=0; $i<count($item); $i++): 
     $selected = (in_array($item[$i], $selects) ? 'selected="selected"' : NULL); 
     echo '<option value="'.$item[$i].'" '.$selected.'>'.$item[$i].'</option>'; 
    endfor; 
    echo '</select>'; 
} 

Я нашел, что это происходит из-за сериализованные данные, которые необходимо по меньшей мере, один элемент в массиве

Если я удалил элементы массива из базы данных он дает ошибку. Так что просто интересно, как проверить, нет ли выбранного элемента, чем вставить NULL или пробел (строка).

ответ

0

Может быть база данных не имеет нулевую допущенные в поле .. Вы можете иметь одно значение как пустой

<option value=""> ----Select Options ----- </option> 

Затем оставшийся код для значений .. Попробуйте вернуться позволяет проверить

+0

Спасибо за ваш отзыв. Пожалуйста, посмотрите мой отредактированный вопрос с полной информацией –

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