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 相关文章推荐
通过文字传递创建的图形按钮
Oct 09 PHP
PHP中ADODB类详解
Mar 25 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
CI框架给视图添加动态数据
Dec 01 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
Sep 26 PHP
Laravel实现autoload方法详解
May 07 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
用PHP 4.2书写安全的脚本
2006/10/09 PHP
再次研究下cache_lite
2007/02/14 PHP
php中文验证码实现方法
2015/06/18 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
微信JS接口大全
2016/08/25 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
Javascript的this详解
2019/03/23 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
写自荐信的七个技巧
2013/10/15 职场文书
酒店执行总经理岗位职责
2013/12/15 职场文书
商务邀请函范文
2014/01/14 职场文书
个人承诺书怎么写
2014/05/24 职场文书
中职生自荐信范文
2014/06/15 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
母亲节主题班会
2015/08/14 职场文书