2016-04-29 4 views
0

私は、トレーニングプランの日付、プランの自己、および参加可能なグループのメンバーを示すテーブルを作成しようとしています。 最初の2つは問題はありませんが、それに出席できるのは問題です。 出席者はデータベースに文字列として格納され、配列に展開されますが、配列を表示するためにforeachループを使用すると、前の行が次の行に追加されます。foreachループは、各テーブル行の次の行にpreviouse結果を追加し続けます。

私が持っているコードは次のとおりです。

$sql_group_name = mysqli_query($db_conx,"SELECT groupName,accepted FROM maingroup"); 
    while ($row = mysqli_fetch_array($sql_group_name)){ 
$accepted= $row["accepted"]; 
$groupName = $row["groupName"]; 
$accept_array = explode(",", $accepted); 
if (in_array($u,$accept_array)){ 
    $sql = "SELECT * FROM training WHERE groupName='$groupName' ORDER BY sessDate ASC"; 
    $training_query = mysqli_query($db_conx, $sql); 

    while ($row = mysqli_fetch_array($training_query, MYSQLI_ASSOC)) { 
     $id = $row["id"]; 
     $date = $row["sessDate"]; 
     $session = htmlspecialchars_decode(stripslashes($row['plan']), ENT_QUOTES); 
     $groupName = $row["groupName"]; 
     $attending = $row["attending"]; 
     $attend_array = explode(",",$attending); 
     foreach($attend_array as $value){ 
      $attendList .= "" .$value. "<br/>"; 
     } 

     if (in_array($u,$attend_array)){ 
      $attendBtn = '<form name="sessUnAttend" id="sessUnAttend" method="post"> 
           <input type="submit" value="Unattend"> 
           <input type="hidden" name="id" id="id" value="' .$id. '"> 
           <input type="hidden" name="unattend" id="unattend"> 
           </form>'; 

     } else { $attendBtn = '<form name="sessAttend" id="sessAttend" method="post"> 
           <input type="submit" value="Attend"> 
           <input type="hidden" name="id" id="id" value="' .$id. '"> 
           <input type="hidden" name="attend" id="attend"> 
           </form>'; 

    } 

     $sessTable .= '<tr> 
         <td>' .$date. '</td> 
         <td>' .$session. '</td>  
         <td>' .$groupName. '</td> 
         <td>' .$attendList. '</td> 
         <td>' .$attendBtn. '</td> 
         </tr>'; 
    } 
} 
    } 

私が得る結果は次のとおりです。

日|プラン|出席する

4.4.16 |いくつかの計画|私

5.4.16 |いくつかの計画|私、私

6.4.16 |いくつかの計画|私、私

Obviuosly "私"は一度だけ出席することができます。他の人が出席できると言ってから、自分の名前を付け加えて、他の人が出席できると言ってくれるまで繰り返すことになるまで、私は何度も繰り返しています。

whileループはmysqli_fetch_arrayの代わりにmysqli_fetch_assocであるはずですが、それは他のすべてのものを混乱させるようです。

+2

日付/プランを変更したときに '$ attendList'を' '''にリセットします –

+0

あなたのコードはとても面倒です。まず第一に、 '$ u'の由来は?このコードの外で、仮定しましょう。しかし、非常に問題は、最初のクエリで '$ row'をループし、内部ループが' $ row'を上書きすることです。まずそれを修正してください。 – vaso123

+0

@lolka_bolka - はい、$ u変数がページ内にeslwhereとして設定されていますが、申し訳ありませんが、ほとんどの場合問題とは関係のないコードページ全体を投稿したくありませんでした。私は内部whileループを$ row1に変更しようとしましたが、結果に何もしないようです。これはあなたが意味するものですか? – dyer926

答えて

0

は@MarkBakerからのコメントは友人からいくつかのより多くの助けを借りて、トリックをしました。

私がしなければならなかったことは、変数$attendListをリセットしたことでした。

 $sessTable .= '<tr> 
        <td>' .$date. '</td> 
        <td>' .$session. '</td>  
        <td>' .$groupName. '</td> 
        <td>' .$attendList. '</td> 
        <td>' .$attendBtn. '</td> 
        </tr>'; 
        $attendList = ''; 

変数は以前のループから設定されていて、さらに多くのものが追加されるまでそのままでした。

現在、ループが終了するたびに新しいIDがゼロから始まるように変数がリセットされます。

0

IDの設定を解除するためにこれを試してみてください:

unset($accepted); 
+0

あなたの提案を '$ attendList。=" "。$値のforeachループに入れようとしました。 "
";でも何も変わらなかった。これはあなたが意図した場所ですか、私は別の場所に置くべきですか? – dyer926

関連する問題