drzablspw01655860 2017-08-14 20:41
浏览 93
已采纳

PHP Bootstrap多选选项

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>';
}
  • 写回答

1条回答 默认 最新

  • doq91130 2017-08-14 20:45
    关注

    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>';
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题