javascript - Bootstrap 下拉菜单与 php 和数据库

标签 javascript php css twitter-bootstrap

我在使用 Twitter Bootstrap 时遇到下拉菜单问题。在我的数据库中,我有一个名为类别的表。其中我有 8 条记录:

ID | Category | parent
1  | Apple    | 0
2  | Samsung  | 0
3  | Huawei   | 0
4  | Others   | 0
5  | Sony     | 4
6  | LG       | 4
7  | Lenovo   | 4
8  | Nokia    | 4

通过使用这些数据,我创建了一个导航栏。但是我有这个问题:由于“其他人”有 parent ,他们出现在他们的 parent 下拉列表中。 Apple、Samsung 和 Huawei 没有任何 child ,所以我希望他们根本没有下拉菜单。但是,我的代码为这些类别生成了一个空的下拉列表。

<body>
<?php
    $sql = "SELECT * FROM categories WHERE parent = 0";
    $pquery = $db->query($sql);
  ?>
  <nav class="navbar navbar-default navbar-fixed-top" id="navbar">
    <div class="container">
      <a href="/e-shop/index.php" class="navbar-brand" id="logo">Mobile e-shop</a>
      <ul class="nav navbar-nav">
        <?php while($parent = mysqli_fetch_assoc($pquery)) : ?>
        <?php
          $parent_id = $parent['id'];
          $sql2 = "SELECT * FROM categories WHERE parent = '$parent_id' ";
          $cquery = $db->query($sql2);
        ?>

<!-- Drop down meniu -->
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="text"><?php echo $parent['kategorija']; ?><span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu">
            <?php while($child = mysqli_fetch_assoc($cquery)) : ?>
            <li>
            /*I assume i should do if statement or something here to check is its null? I tryied to use is_null() but it did not work for me*/
              <a href="<?=$child['adresas']; ?>">
                <?php echo $child['kategorija'] ?>
              </a>
            </li>
          <?php endwhile; ?>
          </ul>
        </li>
      <?php endwhile; ?>
      </ul>
    </div>
  </nav>

我假设我应该做 if 语句或检查它是否为 null?我尝试使用 is_null() 但它对我不起作用。

最佳答案

我看到了你的问题。您将获得没有父类的所有元素并赋予它们相同的功能,这意味着它们都被分配了一个父类。

基本上,您需要找到有 child 的 parent ,然后为他们分配正确的类(class)。像这样:

<?php
  // Check if the child-query result is larger than 0
  if(mysqli_num_rows($cquery) > 0) {
    // Run your code for 'parents' here.
    <li class="dropdown">
    </li>
  } else {
    // Run your code for 'noparents' here.
    <li class="nodropdown">
    </li>
  }
?>

如果我是你,我也会用干净的 PHP 代码准备语句,这样你只需在 HTML 中调用一些变量。这使您的代码更具可读性。在下面的示例中,您将数据库调用和转换代码全部放在一个地方。如果你改变一个,你可能必须改变另一个,所以这是有道理的。此外,如果其他人查看您的代码,他们会更快地理解它。

<li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="text">
        <?php echo $parent['kategorija']; ?><span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
        <?php echo get_dropdown_children(); ?>
    </ul>
<li>

<?php
function get_dropdown_children($parent['id']) {
    $sql2 = "SELECT * FROM categories WHERE parent = '$parent_id' ";
    $cquery = $db->query($sql2);
    $result = "";

    while($child = mysqli_fetch_assoc($cquery)) {
        $result .= "<li><a href='" . $child['adresas'] . "'>";  // Opening tags
        $result .= $child['kategorija'];                        // Content
        $result .= "</a></li>";                                 // Closing tags
    }

    return $result;
}

关于javascript - Bootstrap 下拉菜单与 php 和数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46908263/

相关文章:

javascript - nodejs、mongodb - 如何对来自多个查询的数据进行操作?

php - 在 Laravel 中添加额外的属性(类)后,从 "Form::text"自动填充 "Form::model"

php - 当用户在 24 小时内未登录时将用户从 Tuser 中删除

php - AJAX (prototype/php) 在脚本执行期间获取部分状态更新

html - 如何使 Pane 扩展到其容器的底部

html - div 中子元素的 Z 索引

javascript - 对无限 ajax 滚动如何检索其他帖子感到困惑

javascript - 带 LIMIT 的 MySQL 查询并按 block 更新数据

javascript - 网页中 SkyScanner Widget 的问题

javascript - 如何使 iframe 的高度 100% ..?