2017-08-14 9 views
1

私のコードではMySQLデータベースからブートストラップマルチselectpickerを移植するPHPを使用していますが、複数のオプションの代わりに最後のオプションを選択するだけで問題はありません?あなたはforeach$_POST[$comboname]を反復することができた後PHPブートストラップマルチ選択オプション

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

:ここでは、[]name属性を使用する必要が複数選択で選択されたすべての値を取得するには、私の私のコード

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>'; 
} 
+0

いただきましエラー? –

+0

私が言ったように、すべての選択された値の代わりに最後のオプションだけを選択しました – Rtra

答えて

3

です。

更新:としてそれ書き換え

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

はのここにあなたのコードに近い見てみましょう

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>'; 
} 
+0

'[]'でセレクトボックス名を設定しています。問題はありません。複数の値を出力します。 '$ selectedopt'をエコーし​​ます。複数の代わりに – Rtra

+0

更新を参照してください。 –

+0

は完璧に動作します。私が間違っていたことを教えてください。 – Rtra

関連する問題