实现基于php和MySQL的动态树型菜单_PHP教程
树型菜单在很多桌面应用系统中都有非常广泛的应用,其主要优点是结构清晰,利于使用者非常清楚的知道目前自己所在的位置。但在web上树型菜单的应用因为没有理想的现成组件可以拿过来直接使用,所以一般的情况下,程序员主要是通过javascript来实现一些简单的树型结构菜单,但这些菜单往往都是事先定好各菜单项目,以及各菜单项目之间的层次关系,不利于扩充,一旦需要另一个菜单结构时,往往还需要重新编写,因此使用起来不是很方便。
经过对函数递归的研究,我发现这种树型菜单可以通过递归函数,使树型菜单的显示实现动态变化,并没有级数的限制。下面就是我用php,mysql,javascript写的一个动态树型菜单的处理代码,如果大家有兴趣的话,就和我一起来看看我是如何实现的吧:)
首先,我们需要一个数据库,在这个数据库中,我们建立以下一张表:
create table menu (
id tinyint(4) not null auto_increment,
parent_id tinyint(4) default '0' not null,
name varchar(20),
url varchar(60),
primary key (id)
);
这张表中
id 为索引
parent_id 用来保存上一级菜单的id号,如果是一级菜单则为0
name 为菜单的名称,也就是要在页面上显示的菜单内容
url 如果某菜单为末级菜单,则需要指定该连接的url地址,这个字段就是用来保存此地址的,其他非末级菜单,该字段为空
好了,数据库有了,你就可以添加一些记录了,下面是我做测试的时候,使用的一些记录:
insert into menu values ( '1', '0', '人事管理', '');
insert into menu values ( '2', '0', '通讯交流', '');
insert into menu values ( '3', '1', '档案管理', '');
insert into menu values ( '4', '1', '考勤管理', 'http://localhost/personal/attendance.php');
insert into menu values ( '5', '2', '通讯录', '');
insert into menu values ( '6', '2', '网络会议', '');
insert into menu values ( '7', '3', '新增档案', 'http://localhost/personal/add_achive.php');
insert into menu values ( '8', '3', '查询档案', 'http://localhost/personal/search_archive.php');
insert into menu values ( '9', '3', '删除档案', 'http://localhost/personal/delete_archive.php');
insert into menu values ( '10', '5', '新增通讯记录','http://localhost/communication/add_address.php');
insert into menu values ( '11', '5', '查询通讯记录', http://localhost/communication/search_address.php');
insert into menu values ( '12', '5', '删除通讯记录', http://localhost/communication/delete_address.php');
insert into menu values ( '13', '6', '召开会议', 'http://localhost/communication/convence_meeting.php');
insert into menu values ( '14', '6', '会议查询', 'http://localhost/communication/search_meeting.php');
在添加记录的时候,一定要注意,非一级菜单的parent_id一定要指定为上级菜单的id号,否则你的菜单是不会显示出来的:)
好了!有了数据库,下面就是通过php,javascript把菜单从数据库中读出来,并显示出来了:)
1、javascript脚本: function showmenu(menuid)
{
if(menuid.style.display=="none")
{
menuid.style.display="";
}
else
{
menuid.style.display="none";
}
}
这个脚本很简单,就是用来响应点击某个菜单被点击的事件的。
2、css文件:
td {
font-family: "verdana", "宋体"; font-size: 12px; line-height: 130%; letter-spacing:1px
}
a:link {
color: #990000; font-family: "verdana", "宋体"; font-size: 12px; text-decoration: none; letter-spacing:1px
}
a:visited {
color: #990000; font-family: "verdana", "宋体"; font-size: 12px; text-decoration: none; letter-spacing:1px
}
a:active {
color: #990000; font-family: "verdana", "宋体"; font-size: 12px; text-decoration: none; letter-spacing:1px
}
a:hover {
color: #ff0000; font-family: "verdana", "宋体"; font-size: 12px; text-decoration: underline; letter-spacing:1px
}
.menu {
color:#000000; font-family: "verdana", "宋体"; font-size: 12px; cursor: hand
}
定义了一些基本的样式信息,比如字体,颜色,超级连接的样式等,如果你想改变样式的话,只要修改这里就行了!
3、下面就是我的php页面了!
//基本变量设置
$globals["id"] =1; //用来跟踪下拉菜单的id号
$layer=1; //用来跟踪当前菜单的级数
//连接数据库
$con=mysql_connect("localhost","root","");
mysql_select_db("work");
//提取一级菜单
$sql="select * from menu where parent_id=0";
$result=mysql_query($sql,$con);
//如果一级菜单存在则开始菜单的显示
if(mysql_num_rows($result)>0) showtreemenu($con,$result,$layer,$id);
//=============================================
//显示树型菜单函数 showtreemenu($con,$result,$layer)
//$con:数据库连接
//$result:需要显示的菜单记录集
//layer:需要显示的菜单的级数
//=============================================
function showtreemenu($con,$result,$layer)
{
//取得需要显示的菜单的项目数
$numrows=mysql_num_rows($result);
//开始显示菜单,每个子菜单都用一个表格来表示
echo "
![]() | "; "; } else { echo " |
![]() | "; "; } //如果该菜单项目没有子菜单,并指定了超级连接地址,则指定为超级连接, //否则只显示菜单名称 if($menu[url]!="") echo "$menu[name]"; else echo $menu[name]; echo " |
}
?>
在上面的php页面里面,我定义了一个函数showtreemenu(),通过这个函数的调用,会从数据库中递归的调出每个菜单项目,并显示在页面上了:)

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL和phpMyAdmin是强大的数据库管理工具。1)MySQL用于创建数据库和表、执行DML和SQL查询。2)phpMyAdmin提供直观界面进行数据库管理、表结构管理、数据操作和用户权限管理。

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL和MariaDB的主要区别在于性能、功能和许可证:1.MySQL由Oracle开发,MariaDB是其分支。2.MariaDB在高负载环境中性能可能更好。3.MariaDB提供了更多的存储引擎和功能。4.MySQL采用双重许可证,MariaDB完全开源。选择时应考虑现有基础设施、性能需求、功能需求和许可证成本。

SQL是一种用于管理关系数据库的标准语言,而MySQL是一个使用SQL的数据库管理系统。SQL定义了与数据库交互的方式,包括CRUD操作,而MySQL实现了SQL标准并提供了额外的功能,如存储过程和触发器。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

MySQL适合快速开发和中小型应用,Oracle适合大型企业和高可用性需求。1)MySQL开源、易用,适用于Web应用和中小型企业。2)Oracle功能强大,适合大型企业和政府机构。3)MySQL支持多种存储引擎,Oracle提供丰富的企业级功能。

MySQL和phpMyAdmin可以通过以下步骤进行有效管理:1.创建和删除数据库:在phpMyAdmin中点击几下即可完成。2.管理表:可以创建表、修改结构、添加索引。3.数据操作:支持插入、更新、删除数据和执行SQL查询。4.导入导出数据:支持SQL、CSV、XML等格式。5.优化和监控:使用OPTIMIZETABLE命令优化表,并利用查询分析器和监控工具解决性能问题。
