【问题标题】:While loop within While loop not loopingWhile循环内的While循环不循环
【发布时间】:2016-04-24 08:40:25
【问题描述】:

我有一个 php 页面,上面有手风琴标签。每个选项卡的标题标题应该是类别的标题。数据库中有10个类别。

每个选项卡都应列出该特定类别中的所有玩家。因此手风琴 tab1 的标题为“Category 1”,并在“Category 1”中包含数据库中所有玩家的列表。这是在两个单独的 php 页面中完成的。

第一页是手风琴面板主体,它应该遍历数据库并为每个类别创建一个新面板。然后在这个面板页面中是玩家的“包含”。

我的问题是面板 While 循环仅通过循环一次并为类别 1 创建面板,但从未进入“类别 2”。不知何故,原因是玩家的“php包含”。如果我为玩家注释掉"include 'includes/player-select.php';" 以便它只为类别创建选项卡,那么它将遍历整个数据库并创建 10 个选项卡。包括玩家将仅在第一个类别选项卡处停止循环。

有想法吗?

这里是 Panel.php

        <?php
    $query = "SELECT catID,cat_name,categoryColor FROM Categories";
    $result = mysqli_query($conn, $query);

    if($result === FALSE) { 
        die(mysqli_error());
        }

    while ($row = mysqli_fetch_array($result)) {

        $cat_id = $row['catID'];
        $catName = $row['cat_name'];
        $catColor = $row['categoryColor'];

        //  BEGIN PANEL 
        echo '<div class="panel panel-default">';
            echo '<a data-toggle="collapse" data-parent="#accordion" href="#collapse' . $cat_id .'">';
                echo '<div class="panel-heading" style="background-color: ' . $catColor . '; color: #2b2c31;">';
                    echo '<h4 class="panel-title">';
                        echo $catName . '<span class="glyphicon glyphicon-chevron-down caret-right"></span>';
                    echo '</h4>';
                echo '</div>';
            echo '</a>'; // END Panel Title Bar
        // BEGIN Panel Body
            echo '<div id="collapse' . $cat_id . '" class="panel-collapse collapse in">';
                echo '<div class="panel-body votes">';

//       BEGIN Player1Select.php 
                    include 'includes/player-select.php';
                    //       END Player1Select.php 

                            echo '</div>'; // END panel-body
                    echo '</div>'; // END collapse' $cat_id 
            echo '</div>'; // END panel panel-default 
    //  END PANEL   
    }
?>

现在这里是 player-select.php

    <div class="col-md-4 text-center">
<div class="tab-inner">
    <div class="form-group">
        <form action="" method="post">
            <div class="select-box-left">

                <?php
                    //execute the SQL query and return records
                    $query = "SELECT first_name,last_name, playerID, categoryID FROM Players WHERE categoryID = '$cat_id' ORDER BY last_name";
                    $result = mysqli_query($conn, $query);

                    if($result === FALSE) { 
                        die(mysqli_error());
                    }

                    while ($row = mysqli_fetch_array($result)) {

                        $playerID = $row['playerID'];
                        $playerFN = $row['first_name'];
                        $playerLN = $row['last_name'];
                        $playerCatID = $row['categoryID'];

                        echo '<div class="selection1" value=' . $playerFN . $playerLN . '>' . $playerFN . " " . $playerLN ."</div>";
                    }

                ?>
                </div>
        </form>
    </div><!-- END form-group -->
                                </div> <!-- END tab-inner -->
                            </div> <!-- END col-md-4 -->

                <!-- BEGIN Player Images -->
                            <div class="col-md-4 text-center">
<div class="tab-inner">
    <img src="images/players/3_image.png" class="img-responsive img-left" alt="Vote" width="160" height="116">
    <img src="images/players/2_image.png" class="img-responsive img-right" alt="Vote" width="160" height="116">
    <img src="images/vs.png" class="img-responsive img-middle" alt="vs" width="45" height="45">
                                </div>
<div id="btnVote"><button type="submit" class="btn btn-primary" id="voteButton" disabled>VOTE NOW</button></div>
                            </div>
                <!-- END Player Images -->

                            <div class="col-md-4 text-center">
<div class="tab-inner">
    <div class="form-group">
            <div class="select-box-right">
                <?php
                    //execute the SQL query and return records
                    $query = "SELECT first_name,last_name, playerID, categoryID FROM Players WHERE categoryID = '$cat_id' ORDER BY last_name";
                    $result = mysqli_query($conn, $query);

                    if($result === FALSE) { 
                        die(mysql_error()); // TODO: better error handling
                    }

                    //fetch tha data from the database
                    while ($row = mysqli_fetch_array($result)) {

                        $playerID = $row['playerID'];
                        $playerFN = $row['first_name'];
                        $playerLN = $row['last_name'];
                        $playerCatID = $row['categoryID'];

                        echo '<div class="selection2" value=' . $playerFN . $playerLN . '>' . $playerFN ." " . $playerLN . "</div>";
                    }
                ?>
                </div>
    </div><!-- END form-group -->
                                </div> <!-- END tab-inner -->
                            </div> <!-- END col-md-4 -->

【问题讨论】:

  • 请修正代码的缩进。
  • 如果您要躲在键盘后面并否决这个问题,那么至少增长一对并说明原因。如果是因为您不能使用滚动条,那么您可能一开始就不应该在这里回答问题。您和我一样清楚,此代码是原始代码页的复制粘贴。这不像我今天早上醒来并有我的邪恶计划从 Stackoverflow 问题中缩进 *** .....
  • 投反对票的原因:代码太多了。我可以使用滚动条,但如果代码使用两个代码块,都带有水平和垂直滚动条,那么问题肯定不需要所有这些。如果你不顾一切地复制/粘贴代码,你只会伤害自己。
  • Stack Overflow 和社区的其他人抱怨如果没有足够,然后如果有太多。在这种情况下,解决代码故障的唯一方法是查看所有代码。如果山姆先生没有太多需要审查的东西,那么对于你们这些敏感的小家伙来说也没有太多。

标签: php mysql while-loop


【解决方案1】:

我有两种可能的解决方案:

1.) 这可能是因为您的 while 循环结束大括号后有一个分号。

2.) 每当我使用 MySQL_fetch_array 时,我都会索引 $row 变量。

喜欢:

$query = "SELECT catID,cat_name,categoryColor FROM Categories";

                                                while ($row = mysqli_fetch_array($result)) {

                                                $cat_id = $row['catID'];
                                                $catName = $row['cat_name'];
                                                $catColor = $row['categoryColor'];

我的例子

while ($row = mysqli_fetch_array($result)) {

                                                $cat_id = $row[0];
                                                $catName = $row[1];
                                                $catColor = $row[2];

【讨论】:

  • 我删除了分号,没有任何变化。至于使用索引而不是行标题,它们应该是相同的,不是吗?我想如果不是那么结果就不会被吐出来。不知何故,问题涉及到玩家的包容性。
  • while 循环后有多个分号,您是否将它们全部删除?我认为像这样的包含文件中的分号可能会阻止它多次运行?
  • 好的,谢谢。我为三个 while 循环删除了三个半数。虽然没有变化
  • 很高兴我们弄明白了。
  • 哦,不,Sam,还没有弄清楚。没有变化
【解决方案2】:

知道了。发生的事情是在所有三个循环中都使用了相同的 $variables,$query,$row ...。因此,一旦其他两个循环完成,原始的 while 循环变量将被重置为 false。所以答案是重命名 $variables。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2011-06-19
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多