0

希望一些聪明的小伙子或 ladette 可以帮助我弄清楚以下代码的逻辑。

我已经开始使用 superfish jquery 插件进行导航,并且使用静态链接使代码工作正常且轻松,但是当我尝试将其更改为动态链接时,我无法让二级标签正常工作;仅在找到第二级链接时显示,然后在第二级链接从数据库中写出之前仅显示一次。

我希望我已经清楚地解决了这个问题。抱歉,如果我没有。

<ul class="sf-menu">
        <?php
            // A varible that increments on every loop of the below "while" statement
            $count == 0;

            $result = mysql_query("SELECT * FROM web_navbar_links WHERE link_parent='1' AND visible='1' ORDER BY position ASC");
            while ($row = mysql_fetch_object($result)) {
                $parentID    = $row->id;
                $parentLevel = $row->slug;
                // Increment the counter varible by one
                $count++;

                echo "<li";
                    switch ($parentLevel) {
                        case "business":
                            echo " id='business'";
                            break;

                        case "education":
                            echo " id='education'";
                            break;

                        case "consumer":
                            echo " id='consumer'";
                            break;
                    }
                    echo "><a>".ucwords(trim($row->link_name))."</a>";

                    $result2 = mysql_query("SELECT * FROM web_navbar_links WHERE link_child='1' AND parent_relationID='".$parentID."' AND visible='1' ORDER BY position ASC");
                    if ($row2 = mysql_fetch_object($result2)) {
                        echo "<ul>"; //PROBLEM LIES HERE!! ATM THE <UL> WRITES ONCE BUT THE LOOP ONLY READS BACK THE LAST ENTRY FROMT HE db.
                        while ($row2 = mysql_fetch_object($result2)) {
                            echo "<li><a href='http://". ROOT . ADMIN . SECTIONS . TEMPLATES . $row2->link_href."?".$row2->slug."=".$row2->slug."' title='".$row2->link_title."'>".$row2->link_name."</a>";
                                echo "<ul>";
                                    echo "<li><a href='#'>blah</a></li>";
                                echo "</ul>";
                            echo "</li>";
                        }
                        echo "</ul>";
                    }
                echo "</li>";

                if ($count < 3) {
                    echo "<li class='breaker'></li>";
                }
                else {
                    echo "";
                }
            }
        ?>
    </ul>
4

1 回答 1

0

我认为问题出在这一行:

if ($row2 = mysql_fetch_object($result2)) {

这将使记录计数器向前移动,因此下次您调用时:

while ($row2 = mysql_fetch_object($result2)) {

$row2将填充第二行。由于您没有在两条突出显示的行之间的任何地方使用第一行,因此您将丢失它。

我建议调用mysql_num_rows($result2)以获取返回的行数,而不是mysql_fetch_object($result2)if 语句中的第一行。

                $result2 = mysql_query("SELECT * FROM web_navbar_links WHERE link_child='1' AND parent_relationID='".$parentID."' AND visible='1' ORDER BY position ASC");
                if (mysql_num_rows($result2) > 0) {
                    echo "<ul>"; //PROBLEM LIES HERE!! ATM THE <UL> WRITES ONCE BUT THE LOOP ONLY READS BACK THE LAST ENTRY FROMT HE db.
                    while ($row2 = mysql_fetch_object($result2)) {
                        echo "<li><a href='http://". ROOT . ADMIN . SECTIONS . TEMPLATES . $row2->link_href."?".$row2->slug."=".$row2->slug."' title='".$row2->link_title."'>".$row2->link_name."</a>";
                            echo "<ul>";
                                echo "<li><a href='#'>blah</a></li>";
                            echo "</ul>";
                        echo "</li>";
                    }
                    echo "</ul>";
                }
于 2010-09-14T10:28:20.443 回答