Rtra
Rtra

Reputation: 522

PHP Bootstrap multi select options

In my code I am using PHP which populates the bootstrap multi selectpicker from MySQL database but the problem is it only selects the last option instead of multiple options, I don't know what I am missing in it? Here is my my code

function MultiBindCombo($tablenames, $columnnames1, $columnnames2, $comboname, $selectedopt) {
    global $conn; 
    $sql="SELECT ". $columnnames1. ", " . $columnnames2 . " FROM ". $tablenames;
    $result = mysqli_query($conn, $sql);
    if( ! $result ) {
        echo mysql_error();
        exit;
    }
    echo '<select class="selectpicker form-control" data-live-search="true" name="' . $comboname . '" multiple="multiple">';
    $array = explode(',', $selectedopt);
    while ($row=mysqli_fetch_array($result)) {
            foreach ($array as $select_option){
            if($row[$columnnames1] == $select_option) {
                $print_selected = 'selected';
            } else {
                $print_selected = '';
            }
            echo $select_option;
            }
        echo '<option data-tokens="' . $row[$columnnames1] . '" value="' . $row[$columnnames1] . '"' .$print_selected. '>' . $row[$columnnames2] . '</option>';
    }
    echo '</select>';
}

Upvotes: 1

Views: 1275

Answers (1)

u_mulder
u_mulder

Reputation: 54831

To get all selected values in a multiselect you need to use name attribute with []:

echo '<select class="selectpicker form-control" data-live-search="true" name="' . $comboname . '[]" multiple="multiple">';

After that you can iterate over $_POST[$comboname] with a foreach.

Update:

Let's look closer to your code here:

while ($row=mysqli_fetch_array($result)) {
    foreach ($array as $select_option){

        // You iterate over every value of array, so in the end
        // `$print_selected` is defined depending on value of the 
        // last `$select_option`

        if($row[$columnnames1] == $select_option) {
            $print_selected = 'selected';
        } else {
            $print_selected = '';
        }

        // remove this. Why you echo `$select_option`?
        echo $select_option;
    }
    echo '<option data-tokens="' . $row[$columnnames1] . '" value="' . $row[$columnnames1] . '"' .$print_selected. '>' . $row[$columnnames2] . '</option>';
}

Rewrite it as:

while ($row=mysqli_fetch_array($result)) {
    $print_selected = ''; 
    foreach ($array as $select_option){
        if($row[$columnnames1] == $select_option) {
            $print_selected = 'selected';

            // break `foreach` as you found the right item
            break;
        }
    }
    // if right item is not found - `$print_selected` is empty

    echo '<option data-tokens="' . $row[$columnnames1] . '" value="' . $row[$columnnames1] . '"' .$print_selected. '>' . $row[$columnnames2] . '</option>';
}

Upvotes: 3

Related Questions