Codeigniter:多选,始终选择一个项目

时间:2014-02-03 05:36:02

标签: php jquery codeigniter

我正在为mutliselect选项使用jQuery插件。一切正常,但只有一个问题是至少选择了一个项目。

如果我选择多个项目,但是当我尝试删除所有选定的项目并保存表单以在数据库中存储数据时,通过保留至少一个项目来恢复它。

编辑:我已经添加了完整的代码,我正在尝试做什么。问题是没有保留正确选择的项目,最后选择一个项目。

控制器

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);
}

更新选项

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或空白(字符串)。

1 个答案:

答案 0 :(得分:0)

可能是数据库在字段中没有允许的空值。您可以将一个值作为空

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

然后保留值的代码..尝试并恢复让我们检查