klye_g
klye_g

Reputation: 1242

Setting multiple default selected values in multi select dropdown

// Get Series List
    $this->load->model('Series_model');
    $serieslist = $this->Series_model->gettypelist($userid, 'e');

    $series_item_id = 0;

    $this->db->select('series_id');
    $this->db->where('type_id', 13);
    $this->db->where('series_type', 'e');
    $series_item_query = $this->db->get('series_items');

    if ($series_item_query->num_rows() > 0) {
        $series_item_id = $series_item_query->result();
    }
    //print_r($series_item_id);

    $data['serieslist'] = '<select name="series_id[]" class="type input_select" multiple="multiple">';
    $data['serieslist'] .= '<option value="">None</option>';
    foreach ($serieslist as $list) {
        $data['serieslist'] .= '<option value="' . $list->id . '" ' . ($series_item_id[0]->series_id === $list->id ? 'selected="selected"' : '') . '>' . $list->title . '</option>';
    }
    $data['serieslist'] .= '</select>';

Above is the code I am working with. What I would like to be able to do is to set multiple selected="selected"'s for multiple values of a select dropdown menu. So for example:

<select name="series_id[]" class="type input_select" multiple="multiple">
    <option value="">None</option>
    <option value="4">Event Series: Test 1</option>
    <option value="5">Event Series: Test 2</option>
    <option value="16">Event Series: Test 3</option>
    <option value="17">Event Series: Test 4</option>
    <option value="18">Event Series: Test 5</option>
    <option value="19">Event Series: Test 6</option>
    <option value="20">Event Series: Test 7</option>
    <option value="21">Event Series: Test 8</option>
</select>

I would like option values of 4 16 and 19 to be selected="selected", but in my code above it is only selecting 4 and then stopping. what am I missing? If you need further information please let me know.

Thanks in advance.

EDIT:

Result of print_r:

Array ( [0] => stdClass Object ( [series_id] => 4 ) [1] => stdClass Object ( [series_id] => 16 ) [2] => stdClass Object ( [series_id] => 19 ) )

Updated code:

foreach ($serieslist as $list) {
        $data['serieslist'] .= '<option value="' . $list->id . '" ' . (in_array($list->id, $series_item_id, TRUE) ? 'selected="selected"' : '') . '>' . $list->title . '</option>';
    }

Above updated code does not work.

Upvotes: 1

Views: 7608

Answers (1)

bjauy
bjauy

Reputation: 969

you compare $list->id to first $series_item_id: $series_item_id [0]->series_id

you need to put other foreach in existing one:

foreach ($serieslist as $list) {
    foreach ($series_item_id as $series_item) {
         $data['serieslist'] .= '<option value="' . $list->id . '" ' . ($series_item->series_id === $list->id ? 'selected="selected"' : '') . '>' . $list->title . '</option>';
    }
}

or fetch series_id as array and use in_array():

$series_array = array();

foreach ($series_item_id as $series_item) {
     $series_array[] = $series_item->series_id;
}

foreach ($serieslist as $list) {

         $data['serieslist'] .= '<option value="' . $list->id . '" ' . (in_array($series_array, $list->id) ? 'selected="selected"' : '') . '>' . $list->title . '</option>';

}

Upvotes: 3

Related Questions