首页 > 解决方案 > 有没有办法让一个数字在while循环中每次增加1?

问题描述

我有这个功能:

function newMessages() {
    global $connection;

    $userId = $_SESSION['userId'];
    $query = "SELECT * FROM messages WHERE toUserId = '$userId' && messageRead = 'No' ORDER BY date DESC, time DESC";
    $selectImageQuery = mysqli_query($connection, $query);
    confirmQuery($selectImageQuery);

    while ($row = mysqli_fetch_assoc($selectImageQuery)) {
        $messageId = escape($row['messageId']);
        $message =  escape($row['message']);
        $fromUsername = escape($row['fromUsername']);
        $username = escape($_SESSION['username']);
        $date = escape($row['date']);
        $time = escape($row['time']);

        $query = "SELECT messageCount FROM users WHERE userId = '$userId' ";
        $selectCountQuery = mysqli_query($connection, $query);
        confirmQuery($selectCountQuery);

        while ($row = mysqli_fetch_assoc($selectCountQuery)) {
            $messageCount = escape($row['messageCount']);

            for ($i = 1; $i<=$messageCount; $i++) {
                $messageCount = $i;
                echo $messageCount;

                echo "
          <button type='button' class='btn btn-success' data-toggle='collapse' data-target='#demo$messageCount'>$date / $time - 1 new message from $fromUsername</button>
          <div id='demo$messageCount' class='collapse'>
            $message 
          </div><br><br>";
            }
        }
    }
}

第一个 while 循环检查消息并将它们回显出来。然后,我需要找到一种方法,让用户可以点击每一个,只看到那个信息。当前,当用户单击一个时,它们都会打开,因为每个数据目标(当然)都是相同的。所以我在想是否有一种方法可以在每个循环上更改 $messageCount

请帮忙!!!我要疯了

如果我更改for($i = 1; $i<=$messageCount; $i++)for($i = 1; $i<=10; $i++)那么我会收到第一条消息的 10 条,然后是第二条消息的 10 条,依此类推。然而,只有所有的 1 都打开,所以我想这是一个开始。

在此处输入图像描述

如果数字(左下)从 1 到 4 就好了

标签: phphtml

解决方案


我想我已经设法解决了你的问题。问题出在最后for-loop

$messageCount = escape($row['messageCount']);

            for ($i = 1; $i<=$messageCount; $i++) {
                $messageCount = $i;
                echo $messageCount;
                ...
}

在这里你首先得到$messageCount. 对于此示例,它变为4. 然后在循环中,$i变为1。在您设置的循环内$messageCount等于$i,即1。在下一个“循环回合”中,您检查是否$i低于或等于$messageCount。因为两者都是现在1。循环继续。

您可以通过将上面的 for 循环替换为下面的循环来解决此问题。

for ($i = 1; $i<=$messageCount; $i++) {
                $displayMessageCount = $i;
                echo $displayMessageCount;

                echo "
          <button type='button' class='btn btn-success' data-toggle='collapse' data-target='#demo$displayMessageCount'>$date / $time - 1 new message from $fromUsername</button>
          <div id='demo$displayMessageCount' class='collapse'>
            $message 
          </div><br><br>";
            }

现在您有一个显示计数的单独变量。$messageCount现在将在每个循环中保持不变。希望这可以帮助!如果没有,请发表评论。


推荐阅读