2016-04-18 5 views
2

私はスクリプトが何をしているのか知っています。なぜ3回表示されているのか理解していると思いますが、それを修正する方法がわかりません!それはスタンドとしてここPHPが3つの結果を返す

はスクリプトです:ここでは

$flagquery = "SELECT incident_flag FROM incident_attributes WHERE incident=2157"; 
$flagresult = mysqli_query($conn, $flagquery); 
if (mysqli_num_rows($flagresult) > 0) { 
while($firow = mysqli_fetch_array($flagresult)){ 

    foreach ($items as $flagrow) { 
    $id = $flagrow['id']; 
    $name = htmlspecialchars($flagrow['name'], ENT_QUOTES); 

    $form .= " <div class='form-group'> 
        <label class='col-sm-2 control-label'>$name</label> 
        <div id='name-input-wrapper' class='col-sm-8 controls'> 
        <input type='checkbox' value='$id' name='flags[]' "; 
    if ($firow["incident_flag"] == $id) $form .= 'checked'; 

    $form .= "> 
        </div> 
       </div>"; 
    } 
} 
} 
echo $form; 

関連配列

Array 
(
[1] (Array 
    (
     [id] => 1 
     [name] => Bag 
     [flag] => 0 
    ) 

[2] => Array 
    (
     [id] => 2 
     [name] => Screen 
     [flag] => 0 
    ) 

[3] => Array 
    (
     [id] => 3 
     [name] => HD 
     [flag] => 0 
    ) 

) 

は、ここでDBが

id incident incident_flag 
1 2157 1 
2 2157 2 
3 2157 3 

スクリプトの全体目標をincident_attributes mysqlのですチェックボックスをオンにしてフラグを立てます。これに対する他のアプローチは?

答えて

2

あなたは(3)それぞれの結果の行のための3のチェックボックスをエコーので、あなたは、あなたが2 foreachを反転させると、ネストされたforeachcheckedへの評価を制限する必要がある代わりに、3 の9つのチェックボックスを持っています。

クエリ結果は、ネストされたforeachになっているので、あなたがループを実行する前に、行をフェッチする必要があります(ネストされたforeachなし)の代替として

$firows = mysqli_fetch_all($flagresult, MYSQLI_ASSOC); 

foreach($items as $flagrow) 
{ 
    $id = $flagrow['id']; 
    $name = htmlspecialchars($flagrow['name'], ENT_QUOTES); 

    $form .= " <div class='form-group'> 
        <label class='col-sm-2 control-label'>$name</label> 
        <div id='name-input-wrapper' class='col-sm-8 controls'> 
        <input type='checkbox' value='$id' name='flags[]' "; 
    foreach($firows as $firow) 
    { 
     if($firow["incident_flag"] == $id) $form .= 'checked'; 
    } 

    $form .= "> 
        </div> 
       </div>"; 
} 

$firows = mysqli_fetch_all($flagresult, MYSQLI_ASSOC); 
$flags = array_column($firows, 'incident_flag'); // $flags now is [ 1,2,3 ] 

foreach($items as $flagrow) 
{ 
    (...) 
    $form .= " <div class='form-group'> ... " 
    if(in_array($id, $flags)) $form .= 'checked'; 
    (...) 
} 
+0

は、これが見事に働きました!ありがとうございました! – sensualstares

関連する問題