【问题标题】:menu with submenu using mysql使用 mysql 的带有子菜单的菜单
【发布时间】:2013-05-29 07:52:10
【问题描述】:

你好,我只是有点帮助。

我要做的是通过从 2 个不同的 mysql 表中获取数据来创建一个带有子菜单的菜单。

我遇到的问题是子菜单不会显示“子类别”数据库中的所有结果,具体取决于我所在的页面

表 1:类别“ID、名称”

表 2:子类别“ID、名称、Cparent、文件名(子类别的图像)”

我有以下代码:

<ul>
<?php 
  $catmenu_sql = 'select category.id AS catid, category.name AS catname, scategory.cparent AS    scparent, scategory.name AS scname
from category
left join scategory on category.id = scategory.cparent
group by category.name'; // Select data from database
      $result = mysql_query($catmenu_sql); 

while($rows = mysql_fetch_array($result)) { ?>

<!-- Begin Category list -->
<li class="menu">
    <a href="category.php?id=<?php echo $rows['catid']; ?>" id="<?php echo $rows['catid']; ?>" class="menu"><?php echo($rows['catname']); ?></a>
</li>
<!-- End Category List -->   

<?php 
    if (isset($_GET['id']) && is_numeric($_GET['id'])) // get the 'id' variable from the URL and match it with scategory parent in database
    $id = $_GET['id'];
    $sid = $rows['scparent'];
    if ( $id == $sid ) {
?>

<!-- Begin Sub Category List -->    
<ul>
<li class="menu"><a href="scategory.php?id= <?php echo $rows['catid']; ?>" id=" <?php echo $rows['catid'];?>"class="smenu"><?php echo $rows['scname']; ?></a>
    </li>
</ul>
<!-- End Sub category List -->
<?php }} ?>
</ul>'

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 由于质量差而被否决。

标签: php mysql submenu


【解决方案1】:

你可以尝试用这个替换你的代码

<?php 

$catmenu_sql = 'select category.id AS catid, category.name AS catname, scategory.cparent AS scparent, scategory.name AS scname
               from category
               left join scategory on category.id = scategory.cparent
               group by category.name'; // Select data from database

$result = mysql_query($catmenu_sql); 


$sHTML="<ul>";

while($rows = mysql_fetch_assoc($result)) 
{ 

    $sHTML="<ul>"

    <!-- Begin Category list -->
    $sHTML .= '<li class="menu">' .
              '<a href="category.php?id=' . $rows['catid'] . ' id=' . $rows['catid'] . ' class="menu">' . $rows['catname'] .'</a>' .
              '</li>' ;
    <!-- End Category List -->  


    $subquery = "SELECT sec_name FROM tbl_user_sec WHERE `sec_group` = '" . mysql_real_escape_string($row_secs['sec_group'] . "'";
    $subresult = mysql_query($subquery);

    <!-- Begin Sub Category List -->  
    if (isset($_GET['id']) && is_numeric($_GET['id'])) // get the 'id' variable from the URL and match it with scategory parent in database
    $id = $_GET['id'];
    $sid = $rows['scparent'];
    if ( $id == $sid ) 
       {

        $sHTML .="<ul>";

        while($row = mysql_fetch_assoc($subresult) ) {        

              $sHTML .= '<li class="menu"><a href="scategory.php?id= ' . $rows['catid'] . ' id=' . $rows['catid'] . ' class="smenu">' . $rows['scname'] . '</a>' .
                        '</li>' ;
            }

        $sHTML .="</ul>";
        }
    <!-- End Sub category List --> 


 } 

$sHTML .= '</ul>'
echo $sHTML
?>

【讨论】:

  • 你好@matzone 我已经尝试了上面的代码。我确实遇到了一些错误,它们设法解决了,但它仍然显示与以前完全相同。发生的事情是我可以很好地将类别从数据库中取出,当我点击其中一个类别时,我只能从数据库中取出第一个子类别,即使在某些类别中它们有多个子类别。我希望这是有道理的。这是网站地址(只有临时地址,不是垃圾邮件或类似的东西)newshop.webatu.com/category.php?id=5
  • 你好 @matzone 对不起,如果我很厚,但我需要在 $subquery = "SELECT sec_name FROM tbl_user_sec WHERE sec_group = '" 线上添加什么。 mysql_real_escape_string($row_secs['sec_group'] . "'"; 感谢您的帮助
  • 看起来我现在终于解决了这个问题:D 我要感谢@matzone
【解决方案2】:

如果我正确理解你的问题,这一行:

if ( $id == $sid ) {

根据您所在的页面过滤子类别,假设 $id 被初始化为:

$id = $_GET['id'];

这是一个名为 id 的参数的值,它被传递到 url,可能是这样的:

http://www.site.com/script.php?id=1

这就是让您只能看到类别的子集的原因,要查看所有类别,您不应该将 id 参数传递给 url。

【讨论】:

  • 我不认为你的回答是他能理解的。
  • 是的'$id = $_GET['id'];'从 url 中的 '?id=1' 获取 ID 号。获得页面 ID 后,我将输入 '$sid = $rows['scparent'];'这将从数据库中获取 ID。一旦我拥有两个 ID,我就需要将它们与表中的正确行匹配以获得正确的行。我能够从“类别”中获得第一个列表,好吧,当我尝试拉子菜单时,它只会给我一个来自“子类别”表的结果
  • 谢谢@Rafael 那么如果我不将 ID 传递给 URL,我将如何定义您所在的页面以从表中获得正确的结果?抱歉,如果我还在学习中没有多大意义。
  • 看到你的页面我现在理解得更好了,我在你的代码中找不到任何明显的错误,但我建议你检查你的查询是否真的返回了它应该的,尝试运行你的代码手,看看你是否发现它为什么不工作。
  • 确保清理 $_GET['id']
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2021-09-13
  • 2017-04-22
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
相关资源
最近更新 更多