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 相关文章推荐
phpinfo 系统查看参数函数代码
Jun 05 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
深入PHP数据缓存的使用说明
May 10 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
php防止SQL注入详解及防范
Nov 12 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
php+mysqli数据库连接的两种方式
Jan 28 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
PHP中的异常处理机制深入讲解
Nov 10 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 smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
php读取本地json文件的实例
2018/03/07 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
详解python破解zip文件密码的方法
2020/01/13 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
办公室主任先进事迹
2014/01/18 职场文书
学校消防安全制度
2014/01/30 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
售房协议书
2014/08/19 职场文书
敬老月活动总结
2014/08/28 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
大学班长竞选稿
2015/11/20 职场文书
导游词之日本富士山
2020/01/06 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL