【问题标题】:while loop always print last inserted row resultwhile 循环总是打印最后插入的行结果
【发布时间】:2014-04-16 00:15:18
【问题描述】:

问题是 while 循环总是显示最后插入的行结果。我已经尝试了下面的代码来关注/取消关注按钮选项。例如我是用户 id=1。我已经关注了用户 id=4。现在,我想关注用户 id=5。当我单击关注按钮(id = 5)时,它会正确变为取消关注。但是,我已经关注了用户 id=4。这变成了跟随。这是我的问题。

然后我尝试了echo $following;。它打印 5555。这意味着最后插入的数据。但我想要 45。我确定我在 while 循环中犯了一个错误。但我不知道我应该改变什么?

        <?php
                try
                {
                    $stmt = $conn->prepare("SELECT * FROM users ORDER BY Autoid");
                    $stmt->errorInfo();
                    $stmt->execute();

                    $sth = $conn->prepare("SELECT * FROM followers ORDER BY Autoid");
                    $sth->errorInfo();
                    $sth->execute();
                    while($follow_row = $sth->fetch(PDO::FETCH_ASSOC))
                   {
                        $following = $follow_row['Following'];
                        $follower = $follow_row['Follower'];
                   }

                    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
                       {
                        echo "<tr>";
                        echo "<td>". $row['Autoid'] ."</td>";
                        echo "<td>". $row['Name'] ."</td>";

                        // echo $row['Following'];
                        if($_SESSION['sesuname'] == $row['Username'])
                         {
                            echo "<td class='itsyou' >Its You ". $_SESSION['sesuname'] ."</td>";
                         }
                        else
                         {  
                            if(($follower == $_SESSION['sesid']) AND ($following != $row['Autoid']))
                            {
                               //echo "<td>true</td>";
                             echo $following;
                             echo "<td>";
                             echo "<form id='jsform' method='post' action='subscribe.php'>";
                             echo "<input type='hidden' name='id' value=" . $row['Autoid'] . " />";
                             echo "<button class='follow' >Follow</button>";
                             echo "</form>";
                             echo "</td>";                             
                            }
                            else
                            {
                                //echo "<td>false</td>";
                             echo "<td>";
                             echo "<form id='ufform' method='post' action='unsubscribe.php'>";
                             echo "<input type='hidden' name='uid' value=" . $row['Autoid'] . " />";
                             echo "<button class='follow' >UnFollow</button>";
                             echo "</form>";
                             echo "</td>";
                            }
                         }
                        echo "</tr>";
                     }
                } catch (PDOException $e) {
                       'Database Error : ' .$e->getMessage();
                }
            ?>

【问题讨论】:

    标签: php mysql if-statement while-loop


    【解决方案1】:

    这段代码:

        while($follow_row = $sth->fetch(PDO::FETCH_ASSOC))
       {
            $following = $follow_row['Following'];
            $follower = $follow_row['Follower'];
       }
    

    每次获取行时只需覆盖 $following$follower,从而在变量中获取 LAST 行。也许你想要更像

        $following[] = $follow_row['Following'];
        $follower[] = $follow_row['Follower'];
                 ^^--- append new row value to an array.
    

    【讨论】:

    • 但现在关注和取消关注无法正常工作。我的意思是功能(更新和删除)工作正常。但是,如果我单击“关注”按钮,它不会变成“取消关注”。如果我单击“取消关注”按钮,它不会变成“关注”。我正在使用 if else 条件...
    • 是的,因为您在追随者查询中检索多个值,但将查询视为只返回一个值。您需要从根本上改变循环中的逻辑。
    猜你喜欢
    • 2021-11-30
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2017-04-29
    • 1970-01-01
    • 2021-10-12
    • 2016-03-18
    相关资源
    最近更新 更多