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 相关文章推荐
php 魔术函数使用说明
Feb 21 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
简单的php新闻发布系统教程
May 09 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
PHP如何实现订单的延时处理详解
Dec 30 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中批量替换文件名的实现代码
2011/07/20 PHP
PHP编程函数安全篇
2013/01/08 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
google地图的路线实现代码
2009/08/20 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
python对excel文档去重及求和的实例
2018/04/18 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python 发送json数据操作实例分析
2019/10/15 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
公司同意接收函
2014/01/13 职场文书
青年文明号事迹材料
2014/01/18 职场文书
黄金搭档广告词
2014/03/21 职场文书
党课培训主持词
2014/04/01 职场文书
推广普通话演讲稿
2014/05/23 职场文书
优秀班组申报材料
2014/12/25 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
《实心球》教学反思
2016/02/23 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
golang 接口嵌套实现复用的操作
2021/04/29 Golang
SpringBoot快速入门详解
2021/07/21 Java/Android
python接口测试返回数据为字典取值方式
2022/02/12 Python