【问题标题】:Dynamic menu privilege not working动态菜单权限不起作用
【发布时间】:2016-04-09 10:54:36
【问题描述】:

这是我的代码

<ul class="nav side-menu">


              <?php 
            $mnquery=$ob->showDataall("select * from menus where parent_id='0' and delet='0'");
            foreach($mnquery as $value)
                {
                    $selquery=$ob->showDataall("select * from menu_permission where staff_id='".$_SESSION['user_id']."'");
                    foreach($selquery as $nquery)
                        {
                            foreach(explode(",",$nquery['permission']) as $mnu)
                                {
                                    if($value['menu_id']==$mnu)
                                        {
                                    ?>
        <li><a <?php if($value['menu_hyper']!='#'){ echo 'href="'.$value['menu_hyper'].'"';}?>><i class="fa fa-bars"></i><?php echo $value['menu_name']; if($value['menu_hyper']=='#'){?><span class="fa fa-chevron-down"></span><?php }?></a>
                                    <?php
                                        $submnquery=$ob->showDataall("select * from menus where parent_id='".$mnu."' and delet='0'");
                                        if(!empty($submnquery))
                                        foreach($submnquery as $subvalue)
                                            {
                                                if($subvalue['parent_id']==$mnu)
                                                    {
                                    ?>
                                                    <ul class="nav child_menu" style="display: none">
                                                        <li><a <?php if($subvalue['menu_hyper']!='#'){ echo 'href="'.$subvalue['menu_hyper'].'"';}?>><?php echo $subvalue['menu_name']; if($subvalue['menu_hyper']=='#'){?><span class="fa fa-chevron-down"></span><?php }?></a>
                                                        <?php
                                                            $chldmnquery=$ob->showDataall("select * from menus where parent_id='".$subvalue['menu_id']."' and delet='0'");
                                                            if(!empty($chldmnquery))
                                                            foreach($chldmnquery as $chldvalue)
                                                                {
                                                                    if($chldvalue['parent_id']==$subvalue['menu_id'])
                                                                    {
                                                        ?>
                                                            <ul class="nav child_menu" style="display: none">
                                                                <li><a href="<?php echo $chldvalue['menu_hyper'];?>"><?php echo $chldvalue['menu_name'];?></a></li>
                                                            </ul>
                                                        <?php
                                                                    }
                                                                }
                                                        ?>

                                                        </li>
                                                    </ul>
                                <?php
                                                    }
                                            }
                                ?>
                                    </li>
                                <?php
                                        }
                                }
                        }
                }
              ?>
</ul>

这是我的函数 showDataall

public function showDataall($result) 
    {
        $q = $this->conn->prepare($result) or die("failed!");
        $q->execute();
        while ($r = $q->fetch(PDO::FETCH_ASSOC)) 
        {
            $data[] = $r;
        }
        return $data;
    }

这是我的名为“menus”的表格

     menu_id       menu_name            menu_hyper                 parent_id    delet
        1         Master Settings            #                         0         0
        2         Add New Menu       ../pages/menu_add.php             1         0
        3         Menu Permission    ../pages/menu_permissions.php     1         0
        4         Role               ../pages/add_role.php             1         0
        5         Staff              ../pages/add_staff.php            1         0
        6         Add Product        ../pages/product_add.php          0         0

这是我的另一个名为“menu_permission”的表

  id    staff_id    permission
   1       1        1,2,3,4,5,6
   2       2        1,4

我允许“staff_id=1”的所有菜单权限
我允许 menu_id 14 用于 'staff_id=2'
staff_id=1 已全部登录菜单已显示,但 staff_id=2 已登录 所有菜单均显示
我只允许两个用于 staff_id=2 的菜单(menu_id = 1 和 menu_id = 2)如何解决此问题

请帮帮我....

【问题讨论】:

  • 伙计,你有 5 个循环,一个接一个……你应该使用 PHP 函数来寻找一个值。例如,将foreach(explode(",",$nquery['permission']) as $mnu) 替换为if(in_array($subvalue['parent_id'],$nquery['permission']),以检查一个值是否在数组中...这样做会使您的代码更具可读性...更多可调试性...然后您应该记录发生的事情在每个 if/foreach 中,检查问题出在哪里...
  • 我试试这个不行
  • 这里你必须做一个完整的 dubug。尝试通过检查进入循环时获得的数据来使第一个循环工作。一旦你这样做了,检查第二个循环是否良好等等......我的建议并不能解决问题,它只是帮助你的代码更清晰,更容易调试......这太大了,我们无法快速帮助你...
  • 第一个循环运行良好,但第二个循环有问题
  • 所以$selquery 可能没有按您的预期填写?你能在上面做一个 var_dump 或 print_r 吗?

标签: php html mysql pdo


【解决方案1】:

我根据我的知识写...它的工作完美
任何人帮助我简化此代码

              <?php 
            $mnquery=$ob->showDataall("select * from menus where parent_id='0' and delet='0'");
            foreach($mnquery as $value)
                {
                    $selquery=$ob->showDataall("select * from menu_permission where staff_id='".$_SESSION['user_id']."'");
                    foreach($selquery as $nquery)
                        {
                            foreach(explode(",",$nquery['permission']) as $mnu)
                                {
                                    if($value['menu_id']==$mnu)
                                        {
                                    ?>
        <li><a <?php if($value['menu_hyper']!='#'){ echo 'href="'.$value['menu_hyper'].'"';}?>><i class="fa fa-bars"></i><?php echo $value['menu_name']; if($value['menu_hyper']=='#'){?><span class="fa fa-chevron-down"></span><?php }?></a>
                                    <?php
                                        $submnquery=$ob->showDataall("select * from menus where parent_id='".$mnu."' and parent_id!='0' and delet='0'");
                                        if(!empty($submnquery))
                                        foreach($submnquery as $subvalue)
                                            {
                                                $selquery=$ob->showDataall("select * from menu_permission where staff_id='".$_SESSION['user_id']."'");
                                                foreach($selquery as $nquery)
                                                    {
                                                        foreach(explode(",",$nquery['permission']) as $mnua)
                                                            {
                                                if($subvalue['menu_id']==$mnua)
                                                    {
                                    ?>
                                                    <ul class="nav child_menu" style="display: none">
                                                        <li><a <?php if($subvalue['menu_hyper']!='#'){ echo 'href="'.$subvalue['menu_hyper'].'"';}?>><?php echo $subvalue['menu_name']; if($subvalue['menu_hyper']=='#'){?><span class="fa fa-chevron-down"></span><?php }?></a>





                                                  <?php
                                                            $chldmnquery=$ob->showDataall("select * from menus where parent_id='".$subvalue['menu_id']."' and delet='0'");
                                                            if(!empty($chldmnquery))
                                                            foreach($chldmnquery as $chldvalue)
                                                                {
                                                                    $selquery=$ob->showDataall("select * from menu_permission where staff_id='".$_SESSION['user_id']."'");
                                                foreach($selquery as $nquery)
                                                    {
                                                        foreach(explode(",",$nquery['permission']) as $mnub)
                                                            {
                                                                    if($chldvalue['menu_id']==$mnub)
                                                                    {
                                                        ?>
                                                            <ul class="nav child_menu" style="display: none">
                                                                <li><a href="<?php echo $chldvalue['menu_hyper'];?>"><?php echo $chldvalue['menu_name'];?></a></li>
                                                            </ul>
                                                        <?php
                                                                    }
                                                                }
                                                    }
                                                                }
                                                        ?>      

                                                        </li>
                                                    </ul>
                                <?php
                                                    }
                                            }
                        }
                                            }
                                ?>
                                    </li>
                                <?php
                                        }
                                }
                        }
                }
              ?>
</ul>

【讨论】:

    【解决方案2】:

    尝试改变这部分:

    foreach(explode(",",$nquery['permission']) as $mnu)
    

    到:

    $mypermission = explode(",",$nquery['permission']);
    

    然后

    foreach($mypermission as $mnu)
    

    【讨论】:

    • 抱歉同样的问题
    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2019-02-25
    相关资源
    最近更新 更多