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

时间:2016-04-29 11:10:43

标签: php mysql arrays

我正在尝试创建一个表格,显示培训计划的日期,计划本身以及可以参加的小组成员。 前两个没有问题,但谁可以参加这个是问题。 与会者作为字符串存储在数据库中并将其分解为数组但是当我使用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 |一些计划|我

5.4.16 |一些计划|我,我

6.4.16 |一些计划|我,我

显然,“我”只能参加一次。它会不断重复我,直到其他人说他们可以参加,然后添加他们的名字并重复,直到有人说他们可以参加等等。

我已经读过,while循环应该是mysqli_fetch_assoc而不是mysqli_fetch_array,但这似乎会弄乱其他所有东西。

2 个答案:

答案 0 :(得分:0)

尝试此操作以取消设置ID:

unset($accepted);

答案 1 :(得分:0)

来自@MarkBaker的评论在朋友的帮助下完成了这个伎俩。

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

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

正在发生的变量是从前一个循环中设置的变量然后它一直保持不变直到更多的变量被添加到它。

现在发生的是每次循环结束时重置变量,以便新的id从头开始。