2016-06-30 123 views
1

データベースから複数のチェックボックスを含むフォームを生成しようとしています。今は配列の最後のエントリだけが表示されます。チェックされているものが1つしかないと仮定した場合、それは機能しますが、複数の場合、配列の最後のエントリだけがチェックされて表示されます。どんな助けでも大歓迎です。ありがとう!データベースから複数のPHPチェックボックスをチェック

<?php 
include "DBconnect.php"; 

$staffId = $_REQUEST["ID"]; 

$query=" select listCode from staffLabels 
     where staffId = $staffId"; 

$result=$mysql->query($query); 
while($row=$result->fetch_assoc()){ 
    //in_array()check if value is in array 

    $b_checked=''; 
    $d_checked=''; 
    $x_checked=''; 
    $f_checked=''; 
    $c_checked=''; 
    if($row['listCode'] =="b") {$b_checked='checked';} 
    elseif($row['listCode'] =="d") {$d_checked='checked';} 
    elseif($row['listCode'] =="x") {$x_checked='checked';} 
    elseif($row['listCode'] =="f") {$f_checked='checked';} 
    elseif($row['listCode'] =="c") {$c_checked='checked';} 


} 
echo '<input type="checkbox" name="listCode[]" value="b" '.$b_checked.' >b'; 
echo '<input type="checkbox" name="listCode[]" value="d" '.$d_checked.' >d'; 
echo '<input type="checkbox" name="listCode[]" value="x" '.$x_checked.' >x'; 
echo '<input type="checkbox" name="listCode[]" value="f" '.$f_checked.' >f'; 
echo '<input type="checkbox" name="listCode[]" value="c" '.$c_checked.' >c<br /><br />'; 
?> 
+3

を試してみてください。各ループは変数の前の内容を消去し、最後のものだけを保持します... – FirstOne

+0

しかし、あなたがしようとしていることを実行する良い方法があります... – FirstOne

+1

あなたは[SQL Injections](http: /php.net/manual/en/security.database.sql-injection.php)。 MySQLiやPDOを使用している場合( 'mysql_ *'関数は廃止予定です)、[Prepared Statements](http://php.net/manual/en/mysqli.quickstart.prepared- statements.php) –

答えて

1

`while`のうち '宣言' を取って試してみてください。この

<?php 
include "DBconnect.php"; 

$staffId = (int) $_REQUEST["ID"]; 

$query=" select listCode from staffLabels 
     where staffId = $staffId"; 

$result=$mysql->query($query); 
$checked=[]; 
while($row=$result->fetch_assoc()){ 
    $checked[$row['listCode']]=true; 
} 

foreach(['b','d','x','f','c'] as $value){ 
    $chk=isset($checked[$value])?'checked':''; 
    echo "<input type='checkbox' name='listCode[]' value='$value' $chk>"; 
} 

echo "<br /><br />"; 
関連する問題