foreach循环不断将前一个结果添加到每个表行的下一个结果中


foreach loop keeps adding previouse result to the next in each table row

我正在尝试创建一个表,显示培训计划的日期、计划本身以及可以参加的团队成员。前两个没问题,但谁能出席才是问题所在。与会者以字符串的形式存储在数据库中,并将其分解为一个数组,但当我使用foreach循环显示数组时,它会将前一行添加到下一行。

我的代码是:

    $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|some plan |me

5.4.16|一些计划|我,我

6.4.16|一些计划|me,me

显而易见的"我"只能参加一次。它会不断重复我,我,直到其他人说他们可以参加,然后加上他们的名字,重复这个直到其他人表示他们可以参加等等

我读到while循环应该是mysqli_fetch_assoc而不是mysqli_fetch_array,但这似乎把其他事情都搞砸了。

@MarkBaker的评论在朋友的帮助下成功了。

我所要做的就是重置$attendList变量。

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

发生的事情是,变量是从上一个循环中设置的,然后它一直保持不变,直到添加了更多的变量

现在发生的情况是,每次循环完成时,它都会重置变量,以便新的id从头开始。

尝试取消设置id:

unset($accepted);