Я использую плагин 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 или пробел (строка).
Спасибо за ваш отзыв. Пожалуйста, посмотрите мой отредактированный вопрос с полной информацией –