php+mysql数据库实现无限分类的方法


Posted in PHP onDecember 12, 2014

本文实例讲述了php+mysql数据库实现无限分类的方法。分享给大家供大家参考。具体分析如下:

这款php无限分类代码比较完整理包括了数据库是mysql的,有增加、删除、编辑、移动的功能,同时还提供数据库sql表结构.代码如下:

//连接数据库 

$link = mysql_connect('localhost','root','') or die(mysql_error()); 

mysql_select_db('class',$link)or die(mysql_error()); 

mysql_query("set names gbk"); 

//无限分类类库 

class sortclass{ 

var $data = array(); 

var $child = array(-1=>array()); 

var $layer = array(-1=>-1); 

var $parent = array(); 

var $link; 

var $table; 

function sortclass($link, $table){ 

$this->setnode(0, -1, '顶极节点'); 

$this->link = $link; 

$this->table = $table; 

$node = array(); 

$results = mysql_query("select * from $this->table",$this->link); 

while($node = mysql_fetch_array($results)){ 

$this->setnode($node['id'],$node['f_id'],$node['name']); 

} 

} 

function setnode ($id, $parent, $value){ 

$parent = $parent?$parent:0; 

$this->data[$id] = $value; 

$this->child[$id] = array(); 

$this->child[$parent][] = $id; 

$this->parent[$id] = $parent; 

$this->layer[$id] = !isset($this->layer[$parent])? 0 : $this->layer[$parent] + 1; 

} 

function getlist (&$tree, $root= 0){ 

foreach ($this->child[$root] as $key=>$id){ 

$tree[] = $id; 

if ($this->child[$id]) $this->getlist($tree, $id); 

} 

} 

function getvalue ($id){return $this->data[$id];} 

function getlayer ($id, $space = false){ 

return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id]; 

} 

function getparent ($id){return $this->parent[$id];} 

function getparents ($id){ 

while ($this->parent[$id] != -1){ 

$id = $parent[$this->layer[$id]] = $this->parent[$id]; 

} 

ksort($parent); 

reset($parent); 

return $parent; 

} 

function getchild ($id){return $this->child[$id];} 

function getchilds ($id = 0){ 

$child = array($id); 

$this->getlist($child, $id); 

return $child; 

} 

function addnode($name,$pid){ 

//echo "insert into $this->table (`f_id`,`name`) values ('$pid','$name')";exit; 

mysql_query("insert into $this->table (`f_id`,`name`) values ('$pid','$name')",$this->link); 

} 

function modnode($cid, $newname){ 

mysql_query("update $this->table set `name`='$newname' where `id` = $cid",$this->link); 

} 

function delnode($cid){ 

$allchilds = $this->getchilds($cid); 

$sql =''; 

if(emptyempty($allchilds)){ 

$sql = "delete from $this->table where `id` = $cid"; 

}else{ 

$sql = 'delete from '.$this->table.' where `id` in ('.implode(',',$allchilds).','.$cid.')'; 

} 

mysql_query($sql,$this->link); 

} 

function movenode($cid, $topid){ 

mysql_query("update $this->table set `f_id`=$topid where `id` = $cid", $this->link); 

} 

} 

//函数 

function back(){ 

echo '<script language="网页特效">window.location.href="news.class.php?"+new date().gettime();</script>'; 

exit; 

} 

//生成select 

function makeselect($array,$formname){ 

global $tree; 

$select = '<select name="'.$formname.'">'; 

foreach ($array as $id){ 

$select.='<option value="'.$id.'">'.$tree->getlayer($id, '|-').$tree->getvalue($id)."</option>"; 

} 

return $select.'</select>'; 

} 

$tree = new sortclass($link,'`p_newsclass`'); 

$op = !emptyempty($_post['op']) ? $_post['op'] : $_get['op']; 

if(!emptyempty($op)){ 

if($op=='add'){ 

$tree->addnode($_post['cname'],$_post['pid']); 

back(); 

} 

if($op=='mod'){ 

$tree->modnode($_post['cid'],$_post['cname']); 

back(); 

} 

if($op=='del'){ 

$tree->delnode($_get['cid']); 

back(); 

} 

if($op=='move'){ 

$tree->movenode($_post['who'],$_post['to']); 

back();

} 

} 

$category = $tree->getchilds(); 

?>

前台调用实例代码如下:
<style type="text/css"> 

body{font-size:12px;} 

ul{list-style:none;} 

a{cursor:pointer;} 

</style> 

<script language="javascript"> 

function $(e){return document.getelementbyid(e);} 

function mod(cid){ 

$('cid').value=cid; 

$('op').value='mod'; 

$('name').style.border='1px solid red'; 

} 

</script> 

<form action="" method="post"> 

名称:<input type="text" id="name" name="cname" /> 添加到:<?=makeselect($category,'pid')?><br /> 

<input type="hidden" id="op" name="op" value="add" /> 

<input type="hidden" id="cid" name="cid" /> 

<input type="submit" value="submit" /> 

</form> 

<h3>移动分类</h3> 

<form action="" method="post"> 

<?=makeselect($category,'who')?> gt;移动到:<?=makeselect($category,'to')?> 

<input type="hidden" id="op" name="op" value="move" /> 

<input type="submit" value="submit" /> 

</form> 

<ul> 

<?php 

foreach ($category as $id){ 

echo '<li>'.$tree->getlayer($id, '|- ').$tree->getvalue($id).' <a href="time.php?op=del&cid='.$id.'">del</a> <a onclick="mod('.$id.')">edit</a> </li>'; 

} 

?> 

</ul>

用phpmyadmin导入此数据库就ok了,实例代码如下:
-- phpmyadmin sql dump 

-- version 3.2.4 

-- 

-- 主机: localhost 

-- 生成日期: 2010 年 07 月 02 日 03:02 

-- 服务器版本: 5.1.41 

-- php 版本: 5.3.1 

set sql_mode="no_auto_value_on_zero"; 

 

/*!40101 set @old_character_set_client=@@character_set_client */; 

/*!40101 set @old_character_set_results=@@character_set_results */; 

/*!40101 set @old_collation_connection=@@collation_connection */; 

/*!40101 set names utf8 */; 

-- 

-- 数据库: `class` 

-- 

-- -------------------------------------------------------- 

-- 

-- 表的结构 `p_newsclass` 

-- 

create table if not exists `p_newsclass` ( 

  `id` int(7) not null auto_increment, 

  `f_id` int(7) not null, 

  `name` varchar(255) not null, 

  primary key (`id`) 

) engine=innodb  default charset=utf8 auto_increment=10 ; 

-- 

-- 转存表中的数据 `p_newsclass` 

-- 

insert into `p_newsclass` (`id`, `f_id`, `name`) values 

(3, 0, '中国'), 

(4, 3, '福建'), 

(5, 4, '龙岩市'), 

(7, 4, '厦门市'), 

(9, 5, '漳平市'); 

/*!40101 set character_set_client=@old_character_set_client */; 

/*!40101 set character_set_results=@old_character_set_results */; 

/*!40101 set collation_connection=@old_collation_connection */;

希望本文所述对大家的PHP+mysql程序设计有所帮助。

PHP 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
php 高效率写法 推荐
Feb 21 PHP
过滤掉PHP数组中的重复值的实现代码
Jul 17 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 PHP
PHP中if和or运行效率对比
Dec 12 #PHP
php实现高效获取图片尺寸的方法
Dec 12 #PHP
CI框架中cookie的操作方法分析
Dec 12 #PHP
jQuery Mobile + PHP实现文件上传
Dec 12 #PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 #PHP
PHP截取指定图片大小的方法
Dec 10 #PHP
php实现图片添加描边字和马赛克的方法
Dec 10 #PHP
You might like
PHP session 会话处理函数
2016/06/06 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
求职信格式要求
2014/05/23 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
CentOS安装Nginx并部署vue
2022/04/12 Servers
python实现手机推送 代码也就10行左右
2022/04/12 Python