【问题标题】:Working with multilevel menu with PHP MYSQL and foreach statement使用 PHP MYSQL 和 foreach 语句处理多级菜单
【发布时间】:2014-06-16 19:12:16
【问题描述】:

我的代码和表格如下

表格

    menu
    ====
    m_id    menu_name   parent_menu_id  menu_order  menu_url    status 
    1       M1          0               1           #           1
    2       M2          0               2           #           1
    3       S1          1               1           #           1
    4       S2          1               2           #           1

    user_rights
    ===========     
    user_id         rights
    1               1,2,3,4
    2               1,2,3

代码

    <?php
    $get_user_id = "1"; //  user id will be 1 or 2 or any id from user table
    mysql_connect("localhost", "root", "password") or die(mysql_error());
    mysql_select_db("booksdb") or die(mysql_error());

    function getMenuRights($get_user_id) {
    $get_user_id = intval($get_user_id);
    $get_access_query = mysql_query("SELECT access FROM user_rights where user_id='".$get_user_id."'");
    $fetch_access_list = mysql_fetch_row($get_access_query);
    $get_access_list = $fetch_access_list[0];
    return $get_access_list;
    }

    function getUserMainMenus($get_user_id) {
    $get_user_id = intval($get_user_id);
    $rights = getMenuRights($get_user_id);
    $get_main_menu_query = mysql_query("SELECT * FROM menu where m_id IN ($rights) and parent_menu_id='0' order by menu_order");
    while ($row = mysql_fetch_assoc($get_main_menu_query)) {
    $results[] = $row;
    }
    return $results;
    }

    function getUserChildMenu($parent_menu_id, $get_user_id) {
    $parent_menu_id = intval($parent_menu_id);
    $get_user_id = intval($get_user_id);
    $rights = getMenuRights($get_user_id);
    $get_sub_menu = mysql_query("SELECT * FROM menu where parent_menu_id='".$parent_menu_id."' AND m_id IN ($rights)");
    while($row = mysql_fetch_assoc( $get_sub_menu )) {
    $results[] = $row;
    }
    return $results;
    }

    ?>
    <div id='cssmenu'>
    <ul>
    <?php foreach (getUserMainMenus($get_user_id) as $get_main_menu): ?>
    <li class='has-sub'><a href='#'><span><?=$get_main_menu['menu_name']; ?></span></a>
    <ul>
    <?php foreach (getUserChildMenu($get_main_menu['m_id'], $get_user_id) as $sub_menu): ?>
    <li class='has-sub'><a href='<?=$sub_menu['menu_url']; ?>'><span><?=$sub_menu['menu_name']; ?></span></a>
    </li>
    <?php endforeach; ?>   
    </ul>
    </li>
    <?php endforeach; ?>   
    </ul>
    </div>

上面的代码运行正常,但显示了一些错误。

Undefined variable: results in phpfilename.php on line 21(and 32)   

另外,我必须在每个菜单和子菜单启动之前检查是否有值,然后显示子菜单。

我该怎么做?

换句话说,在我的菜单和子菜单开始之前,我需要检查值然后显示。如果值,显示子菜单。如果不单独显示主菜单。

任何帮助。

谢谢, 金兹

【问题讨论】:

  • 在使用之前,您应该在 while 循环上方将 $results 变量声明为 $results = array();
  • 如何在 foreach 语句之前检查 if 条件?如果值存在,则显示子菜单,否则离开它

标签: php mysql for-loop drop-down-menu while-loop


【解决方案1】:

您正在尝试追加到尚未启动的变量$results 中的数组。

添加以下内容:

$results = array();

以上:

while() { ... }

例如:

function getUserMainMenus($get_user_id) {
    $get_user_id = intval($get_user_id);
    $rights = getMenuRights($get_user_id);
    $get_main_menu_query = mysql_query("SELECT * FROM menu where m_id IN ($rights) and parent_menu_id='0' order by menu_order");
    $results = array(); // add this here
    while ($row = mysql_fetch_assoc($get_main_menu_query)) {
    $results[] = $row;
    }
    return $results;
    }

【讨论】:

  • 如何在 foreach 语句之前检查 if 条件?如果值存在,则显示子菜单,否则离开它..
  • @user3350885 每个问题一个问题。将其作为单独的 SO 问题发布。
  • 兄弟,我也这样做了.. ;) stackoverflow.com/questions/23422565/… 请在此处查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多