php - 我如何将 Mysqli 表结果转换为带有下拉菜单的菜单

标签 php html mysql css mysqli

这是我的问题:我想做的是从一个 mysql 表中获取结果并将它们变成一个菜单和一个下拉菜单

这是一个简单的例子: 如果您在我的 mysql 表中看到我有 page_name 和 parent,那么示例是: page_name,如果我有第 1 行,page_name 是“Home”,现在它的父级是“none”,但在 ID 号 39 上,page_name 是“Contact Us”,父级是“Far Far Away 123”,所以如果父级等于'none' 然后它会显示在菜单的顶部而不是下拉菜单,如果它有一个父项,它将显示在该父项下,如下所示:

Home | the ben page | The Brock Page | Far Far Away 123 | dsfk
                                       Contact Us

你看到“联系我们”在“远方”下,因为 parent 远在远方 123

这是我的表格: Mysql databse Image

这是我正在尝试但由于某种原因无法正常工作的代码:

<ul>

<?php
$sql = "SELECT * FROM pages ORDER by item_order";
$result = mysqli_query($db, $sql);
confirm_query($result);
while ($links = mysqli_fetch_assoc($result)) {
if($links['parent'] !== "none") {
?>
<li id = "<?php echo $links['id']; ?>"><a href="
<?php 
 echo "page.php?id=" . $links['id'] . "\" title=\"" . $links['page_title'] .     "\"";
?>>
<?php
  echo $links['page_name'];
?>
</a>

<?php
if($links['parent'] !== "none") {
$child = "";




$sql = "SELECT * FROM pages";

$result = mysqli_query($db, $sql);
while($row = mysqli_fetch_assoc($result)) {
    if($row['parent'] !== "none") {
        $child = $row['page_name'];     
}
}

echo "<ul id=\"sub_menu\" class=\"sub_navagation" . $links['id'] . "\">";
echo "<li>";
echo $child;
echo "<li>";
echo "</ul>";
}
?>

</li>
<?php   
}
}
?>

</ul>

CSS:

#sub_menu {
    display: none;
}

#sub_menu:hover {
    display: block;
}

好的,如果如您所见,我在 MYSQL 表中有父行并且 ID 号为 39,我希望“Far Far Away123”成为“联系我们”的父行,并且我想在将鼠标悬停在“Far”上时显示它远方123'

最佳答案

我的建议是构建一个包含所有结果的数组。然后运行该数组(而不是多个数据库查询)。

我添加了一个函数 build_dropdown(),它将获取页面名称并遍历页面数组以查看是否有任何元素具有父级匹配项。如果是这样,我们制作这些元素的数组并遍历它们以构建下拉菜单。如果不是,它什么也不做,并移至下一个菜单项。

<?php

  function build_dropdown ($parent, $pages){
    foreach($pages as $page){
      if($page['parent'] == $parent){
        $items = $page;
      } // END if
    } // END foreach

    if(is_array($items)){ // If a sub 
      echo '<ul id="sub_menu" class="sub_navagation'. $item['id'] .'">';
      foreach($items as $item){
        echo '<li>'.$item['name'].'<li>';
      } // END foreach
      echo '</ul>'; 
    } // END if 
  }

  $sql = "SELECT * FROM pages ORDER by item_order";
  $result = mysqli_query($db, $sql);
  confirm_query($result);

  while ($row = mysqli_fetch_assoc($result)) {
    $pages[] = $row; // Add each row to $pages array to use later
  }

  foreach($pages as $key => $page){

    if($page['parent'] == 'none'){ ?>

      <li id = "<?php echo $page['id']; ?>">
        <a href="page.php?id=<?php echo $page['id']; ?>" title="<?php echo $page['page_title']; ?>">
          <?php echo $page['page_name']; ?>
        </a>
        <?php
          build_dropdown($page['page_name'], $pages); // If there are child items then build them out
        ?>
      </li> 

<?php 
    } // END if

  } // END foreach
?>

关于php - 我如何将 Mysqli 表结果转换为带有下拉菜单的菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33795421/

相关文章:

php - 代码点火器 3 : update Sql table column via GET superglobal

php - 我如何计算 PHP 中的逗号分隔值?

javascript - 如何将选中的复选框数据附加到html <div> 标签中的列表顶部?

javascript - 如何在同一网页上使用多个具有不同图像的引导巨型屏幕?

mysql - 如何改进以下查询

php - 缺少 libphp5.so

javascript - 简单的 php 到 Codeigniter

jquery - 根据样式属性添加类

mysql - SQL - 仅当它们在另一列中共享值时才检测列中的重复项

php - 初学者 : PHP Header Error - MySQL