php 从数据库读取数据并生成树型可折叠菜单

2023-05-16

数据存储形式


折叠菜单显示


直接调用.php页面即可输出树状可折叠菜单



所用到的js
//区域折叠函数
function ShowMenu(MenuID)
{
    if(MenuID.style.display=="none")
    {
        MenuID.style.display="";
    }
    else
    {
        MenuID.style.display="none";
    }
}

//控制鼠标经过表格,表格颜色变化(在Firefox效果不明显)
function out()
{
    var obj = event.srcElement;
    
    if(obj.tagName.toLowerCase() == "td")
    {
        var otr = obj.parentNode;
        
        if(!otr.tag)
        {
            otr.style.backgroundColor = "";
        }
    }
}

function over()
{
    var obj = event.srcElement;
    
    if(obj.tagName.toLowerCase() == "td")
    {
        var otr = obj.parentNode;
        
        if(!otr.tag)
        {
            otr.style.backgroundColor = "#E1E9FD";
        }
    }
}






<?php
/*
 * Copyright (C), 2014-2015, xx Tech. Co., Ltd.
 *
 * File:   tree.php
 * Author: hu, jiangwen
 *
 * Description:从数据库读取节点数据并以树状的形式体现,支持折叠.
 *
 * History:
 *  Date        Author      Description             
 * ---------------------------------------------------------
 *  14/04/23    hujw      Initial creation
 *
 */
	include("../../config/config.db.php");
	

	if (isset($_SESSION["username"])) 
	{  

		
		$area = $_SESSION['area'];
		$GLOBALS["id"] = 1; //用来跟踪下拉菜单的id号 
		$layer = 1;			//用来跟踪当前菜单的级数 

		$db_hostname = $db_config["hostname"]; //服务器地址
		$db_username = $db_config["username"]; //数据库用户名
		$db_password = $db_config["password"]; //数据库密码
		$db_database = $db_config["database"]; //数据库名称
		$db_charset  = $db_config["charset"] ; //数据库编码
		
		if ($db_hostname != "" && $db_username != "" && $db_database != "")
		{
			$conn = mysql_connect($db_hostname,$db_username,$db_password); 
			mysql_select_db($db_database); 
			mysql_query("set names ".$db_charset);

			//提取顶级菜单 
			$sql="select * from mcp_node where `node_code` = '{$area}' "; 
			$result = @mysql_query($sql,$conn); 


			//如果顶级菜单存在则开始菜单的显示 
			if( @mysql_num_rows($result) >0 ) 
			{
				ShowTreeMenu($conn,$result,$layer);
				
			}
			else
			{
				echo "节点数据为空";
			}
		}
		else
		{
			echo "数据库配置错误";
		}
	}
			//显示树型菜单函数 ShowTreeMenu($conn,$result,$layer) 
			//$conn:数据库连接 
			//$result:需要显示的菜单记录集 
			//layer:需要显示的菜单的级数 
			function ShowTreeMenu($conn,$result,$layer) 
			{ 
				//取得需要显示的菜单的项目数 
				$numrows= mysql_num_rows($result); 

				//开始显示菜单,每个子菜单都用一个表格来表示 
				echo "<table>"; 

				for( $rows = 0; $rows < $numrows ; $rows++) 
				{ 
					
					//将当前菜单项目的内容导入数组 
					$menu = mysql_fetch_assoc($result); 
					
					//提取菜单项目的子菜单记录集 
					$sql="select * from mcp_node where `node_pcode` = '{$menu['node_code']}'"; 
					$result_sub=mysql_query($sql,$conn); 

					echo "<tr onMouseOver='over()'  onMouseOut='out()'>"; 
					
					//如果该菜单项目有子菜单,则添加javascript onclick语句 
					if (mysql_num_rows($result_sub)>0) 
					{ 
						echo "<td width='20'><img src='../../img/icons/unfold.gif' border='0'></td>"; 
						echo "<td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["id"].");'>"; 
					} 
					else 
					{ 
						echo "<td width='10'><img src='../../img/icons/fold.gif' border='0'></td>"; 
						echo "<td class='Menu'>"; 
					}
					
					//show_local_tab()定义于 commom.js文件.
					echo "<a href='#' οnclick=\"show_local_tab('{$menu['node_code']}','{$menu['node_name']}')\"><font size = 3>".$menu['node_name']."</font></a>"; 

					echo "</td></tr>"; 

					//如果该菜单项目有子菜单,则显示子菜单 
					if (mysql_num_rows( $result_sub ) > 0) 
					{ 
						//指定该子菜单的id和style,以便和onClick语句相对应 
						echo "<tr id = Menu".$GLOBALS["id"]++." style='display:none'>"; 
						echo "<td></td>"; 
						
						echo "<td>"; 
						//将级数加1 
						$layer++; 
						
						//递归调用ShowTreeMenu()函数,生成子菜单 
						ShowTreeMenu($conn,$result_sub,$layer); 
						
						//子菜单处理完成,返回到递归的上一层,将级数减1 
						$layer--; 

						echo "</td></tr>"; 
					} 
					
					
				} 
				echo "</table>"; 
			} 

	
?>


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 从数据库读取数据并生成树型可折叠菜单 的相关文章

  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records
  • PHP 正则表达式匹配字符串的最后一次出现

    我的字符串是 text1 A373R12345 我想找到该字符串最后出现的非数字数字 所以我使用这个正则表达式 0 9 然后我得到这个结果 1 A373 2 12345 但我的预期结果是 1 A373R 它有 R 2 12345 另一个例子
  • 获取今天的科普特日期

    我正在寻找获取今天的科普特日期与任何代码类型类似php or javascript在我的网站标题中显示科普特日期 我需要阿拉伯语或英语版本 我试图找到它 但没有找到类似的英文内容 参考 http www copticchurch net e
  • 垃圾邮件打败了我所有的验证码

    我有一个 WordPress 博客 我在上面使用验证码插件的时间最长 因为它有效 最近我收到了大量的垃圾邮件 然后我尝试执行通过 PHP 生成的 将这些随机数添加在一起 但仍然没有成功 我不太确定需要做什么来阻止这些垃圾邮件 但这很烦人 我
  • 将 OAuth WRAP 访问令牌直接保存在客户端计算机上的 cookie 中吗?

    我计划建立一个可以访问 oauth 包装框架的网站 我正在考虑将访问令牌按原样存储在客户端计算机上 我不想在服务器上维护临时令牌等数据库 我应该做吗 或者我应该加密它 首先 为什么他们不使用 OAuth 2 0 您可以将 OAuth 凭据存
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • php基于onclick函数输入日期类型

    用户选择日期 月份和年份 然后按一个按钮 根据他选择的日期向他显示数据库的值 不知道代码问题出在哪里
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • Facebook iFrame 应用程序 - 摆脱垂直滚动条?

    我已经转换了一个 Facebook 应用程序 http apps facebook com video preferans 从 FBML 到 iFrame 使用 PHP SDK 现在显示的垂直滚动条与我之前显示的内容数量相同 一个徽标 一个
  • 如何从脚本中创建新的 Joomla 用户帐户?

    我们正在为 Joomla 创建一个 XML API 允许合作伙伴网站在我们的网站上为其用户创建新帐户 我们已经创建了一个独立的 PHP 脚本来处理和验证 API 请求 但现在我们需要实际创建新帐户 我们最初只想进行 CURL 调用来提交注册
  • PHP 的脚手架 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 PHP 中有什么东西可以像 Rails 一样创建基本的脚手架吗 编辑 我需要一些东西来快速原型化 一些框架比如Symfony http www sym
  • PHP DOM - 剥离 span 标签,保留其内容

    我希望采用如下标记 span class test Some text that is strong bolded strong and contains a a href link a span 并在 PHP 中找到剥离跨度的最佳方法 剩
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • 切换到 mysqli 是个好主意吗?

    我正在考虑为我的所有 php 项目切换到 mysqli 我的代码编写方式 我运行非常简单的网站并构建了自己的基本框架 我在所有网站上使用该框架 我在修改函数和类时不应该遇到太多问题 然而 我只听说过关于准备好的语句的积极的事情 除了一些关于
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • php如何生成动态list()?

    根据我的理解 这就是 list 的工作原理 list A1 A2 A3 array B1 B2 B3 所以在帮助下list 我们可以相应地从数组中分配值 这是我的问题 如何生成动态list 1 基于数据库返回结果 我不确定有多少 但我将其全
  • php date_parse("2010 年 2 月") 给出日期 == 1

    当没有日期时 我将其称为 date parse 中的错误 d date parse Feb 2010 会给 d day 1 请参阅对此的评论date parse 手册页 http php net manual en function dat
  • PHP LDAP 查询获取特定安全组的成员

    我正在努力让 LDAP 查询工作来为我提供安全组的成员 我们的活动目录结构设置为 DC domain DC co dc uk然后 我们有一个名为 公司用户 的 OU 其中有一个用于 IT 和标准的 OU 在这些中我们创建了用户 所以我被设置
  • 在 PHP 中接受带有小数点和千位分隔符的国际数字

    对于用户可以输入能量值来计算相应费用的在线计算器 我需要 PHP 脚本来接受各种用户输入 200 万又四分之一焦耳 的值可以输入为 2000000 25 默认表示法 2 000 000 25 带千位分隔符 2000000 25 逗号作为小数
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja

随机推荐

  • kalibr相机内参标定优化过程和原理

    在估计出内参之后 xff0c 会进行优化迭代操作 如果是多相机标定 xff0c 在完成内参标定的同时 xff0c 也会完成具有交叉视野相机外参的的标定 初始估计步骤也会进行多相机基线距离的估计 xff0c 用作后续的迭代优化 优化过程如下
  • Curl多线程并发任务实例函数

    function curl post3 url arrs flen for i 61 0 i lt flen i 43 43 foreach arrs i as k 61 gt v tmp str 61 k 34 61 34 v 34 am
  • Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析

    csdn越改版 xff0c 越丑 开始我们的主题 xff1a Linux下原子操作 xff08 信号量 自旋锁 xff09 的实现原理和底层代码分析 2017年8月27日12 47 02 1 何为原子操作 xff1f 原子操作是什么 xff
  • Linux下用c语言实现发送http请求

    前言 在linux下 xff0c 使用socket进行编程 xff0c 需要到服务器上进行获取数据 xff0c 服务器使用的php编程 xff0c 需要使用http的方式进行获取数据 代码 span class hljs preproces
  • VSCode 的C++编译

    0 参考文档 0 1 官方参考 由于C 43 43 在不同平台上编译使用的编译器不同 xff0c 所以我们先将官网针对不同平台的编译文档摘录出来 xff0c 以便大家参考 xff1a 0 0 1 Linux平台使用GCC 参考 xff1a
  • STM32在子函数中的局部变量数组利用DMA发送无法正确发送数据的问题

    现象 xff1a 在子函数中 xff0c 定义了一个局部变量sendbuf 8 61 1 2 3 4 5 6 7 8 xff0c 然后分别利用普通串口发送函数发送可以正常发送和利用DMA发送 xff0c 并利用串口调试助手查看 xff0c
  • 如何使用Qt插件在Qt中进行ROS开发

    一 前言 本文介绍一种Qt下进行ROS开发的完美方案 xff0c 使用的是ros industrial的Levi Armstrong在2015年12月开发的一个Qt插件ros qtc plugin xff0c 这个插件使得Qt 新建项目 和
  • MN316_OPEN(NBIOT)物联网模块环境搭建

    因为项目的需要 这里要使用NBIOT 踩了一些坑 这里总结一下 编译 官方给的SDK如下 按照说明 在该目录下直接运行如下指令 34 build bat dlvs h0 demo 34 即可成功编译 但是我编译的时候不成功 报错如下 最后发
  • 《学习STL》-1.STL简介

    引言 当你C 43 43 入门后 xff0c 学了些C 43 43 编程规则 xff0c 正如 C 43 43 Primer 里的内容 xff0c 你知道C 43 43 里面的基本数据类型 循环 判断 函数 类 模板等 这阶段你的确会编写一
  • linux查看大小端命令

    Byte Order Litter Endian 小端模式 xff0c 绝大部分机器都是小端模式
  • 星网宇达利用NTRIPClient连接千寻服务器获取差分定位数据

    硬件设备 xff1a 星网宇达XW GI5610 软件设备 xff1a QXNTRIPClient 连接方式 xff1a 星网宇达RTK RS232连接电脑串口 打开QXNTRIPClient xff0c 连接千寻服务器 接收下发RTK数据
  • Ubuntu20.04 安装 mNetAssist

    安装环境 xff1a Ubuntu20 04安装包 xff1a mNetAssist release amd64 deb 安装与运行 span class token function sudo span span class token
  • 使用 include-what-you-use 检测冗余头文件

    include what you use 可以很方便的检测未使用的头文件 xff0c 使用的时候绕了点路 xff0c google后解决 xff0c 记录一下 1 安装clang ubuntu下直接apt get 安装就行了 需要注意的是
  • C语言结构体对齐详解

    文章目录 一 C语言结构体对齐大小快速判断二 反汇编角度看结构体三 总结 一 C语言结构体对齐大小快速判断 在C语言中定义一个结构体 xff0c 里面具体占用多少个字节呢 xff0c 先举一个例子 xff0c 如下 xff1a span c
  • 飞控各传感器相关作用

    飞控主要包括主控处理器MCU xff08 main control unit 和惯性导航模块IMU xff08 Inertial Measurement Unit xff09 四轴则必须配备3轴陀螺仪 xff0c 是四轴飞行器的机械结构 动
  • C++ : C++基础 :从内存的角度看 char[]和char*

    char 和char 区别 1 xff1a 数据在内存中的存储2 xff1a char 和 char 分析3 xff1a char p2 和 char p1 3 1 修改指针所指向的地址 4 string转char 5 char 转stri
  • 基于 nonce 的用户身份验证协议

    一 xff1a 什么是nonce 维基百科 xff1a 安全工程中 xff0c Nonce 是一个在加密通信只能使用一次的数字 在认证协议中 xff0c 它往往是一个 随机或 伪随机数 xff0c 以避免 重放攻击 二 xff1a 举例说明
  • php从数据库读取菜单数据并树状显示

    数据库表结构 mcp node表 字段 node code node name node pcode node code为区域编码 node name为区域名称 node pcode为父区域编码 祖先父区域编码为0 预期效果 代码实现部分
  • 蓝牙BLE之CC2541 OAD升级[带看门狗OAD]

    说明和代码设置 本文有两篇文章参考 其中博主 34 甜甜的大香瓜 34 的文章是原始文章 详细介绍了ImageA的hexh和B的bin以及A的bin是怎么生成的和具体的操作方法 https blog csdn net feilusia ar
  • php 从数据库读取数据并生成树型可折叠菜单

    数据存储形式 折叠菜单显示 直接调用 php页面即可输出树状可折叠菜单 所用到的js 区域折叠函数 function ShowMenu MenuID if MenuID style display 61 61 34 none 34 Menu