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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
php自动加载的两种实现方法
Jun 21 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
学习php中的正则表达式
Aug 17 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHP实现模拟http请求的方法分析
Dec 20 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
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
python设置中文界面实例方法
2020/10/27 Python
Python实现随机爬山算法
2021/01/29 Python
使用python实现学生信息管理系统
2021/02/25 Python
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
上班玩游戏检讨书
2014/02/07 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
Python代码风格与编程习惯重要吗?
2021/06/03 Python
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏