跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

php无限极分类实现的两种解决方法_PHP

今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样。

method of classify one复制代码代码如下:php/*reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑没有进行移动操作 小弟能力有限忘大家多多包涵啊第一种方法:CREATE TABLE `types` (`type_id` int(11) NOT NULL AUTO_INCREMENT,`type_name` varchar(20) NOT NULL,`type_p_id` varchar(64) NOT NULL DEFAULT '-',PRIMARY KEY (`type_id`),KEY `type_name` (`type_name`),KEY `tname` (`type_name`)) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8

注:

这里没做字段有效验证;

type_id     表示主键自增type_name     表示分类名type_p_id     表示分类路径 这里的分类路径是 上层父类的分类路径加上此类的主键id 用逗号隔开*/ error_reporting(7);header("Content:text/html;charset=utf-8");//这里先进行操作的判断$arr = array('list','add','del','edit','addok','edit_ok');$act= in_array($_GET['ac'],$arr)?$_GET['ac']:$arr[0];//连接数据库$conn = mysql_connect("localhost","root","root")or die('数据库连接失败');mysql_select_db("study",$conn);mysql_query("set names utf8");//根据分类层进行排序$sql = "select * from types order by type_p_id";$sql1 = mysql_query($sql);//添加分类if($act == "addok"){$type_id = $_POST['type_id'];$type_name = $_POST['type_name'];//如果等于0表示是跟目录if($type_id=="0"){$sql = "insert into types set type_name = '{$type_name}'";$res = mysql_query($sql);$id = mysql_insert_id();$sql = "update types set type_p_id = '$id,' where type_id=$id";$res = mysql_query($sql);if( mysql_affected_rows ()>0){echo "";}else{echo "";}}//如果不等于0 else{//根据typeid 找到 该id下的type_p_id$sql = "select type_p_id from `types` where type_id =  $type_id";$res = mysql_query($sql);$res = mysql_fetch_assoc($res);$type_id = $res['type_p_id'];//先将名称插入进去$sql = "insert into types set type_name = '{$type_name}'";$res = mysql_query($sql);//获取最后执行的id 然后进行数据更新 主要更新 type_p_id$id = mysql_insert_id();$sql = "update types set type_p_id = '$type_id$id,' where type_id=$id";$res = mysql_query($sql);if($res){echo "";}else{echo "";}}}elseif($act=="add"){?>新分类名称:当前分类:顶级分类//循环遍历分类while($res = mysql_fetch_assoc($sql1)){//查找 ","号出现的次数$m=substr_count($res['type_p_id'],",");//使用空格替换 "空格"$strpad = str_pad("",$m*8*2," ");if($m==1){$sele = "disabled";}else{$sele = "";}?>}?>php id分类名path路径操作while($arr = mysql_fetch_assoc($res)){?>编辑|删除}?>php location.href('ok.php?act=list')";}else{echo "";}}elseif($act == 'del'){//这里的删除是要把当前分类 和当前的子分类都要删除 所以用到$id%$id = $_GET['type_id'];$sql ="delete from `types` where type_p_id like '$id%' ";$res = mysql_query($sql);if($res){echo "";}else{echo "";}}?>

types表:

下面是效果图:

method of classify two复制代码代码如下:php

下载reader:这是自己写的无限极分类实现方法 里面的编辑很简单的(你们懂得。) 就没写了没有进行移动操作 小弟能力有限忘大家多多包涵啊

第二种方法:

CREATE TABLE `types` (`type_id` int(11) NOT NULL AUTO_INCREMENT,`type_name` varchar(20) NOT NULL,`type_p_id` varchar(64) NOT NULL,PRIMARY KEY (`type_id`),KEY `type_name` (`type_name`),KEY `tname` (`type_name`)) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8

注:

这里没做字段有效验证;

type_id     表示主键自增type_name     表示分类名type_p_id     表示分类路径 这里的分类路径是 上层的分类id 如果是当前分类 这个值为 0*/ error_reporting(7);header("Content-type:text/html;charset=utf-8");//这里先进行操作的判断$arr = array('list','add','del','edit','addok','edit_ok');$act= in_array($_GET['ac'],$arr)?$_GET['ac']:$arr[0];//连接数据库$conn = mysql_connect("localhost","root","root")or die('数据库连接失败');mysql_select_db("study",$conn);mysql_query("set names utf8");if($act=="add"){/***    @access public* @param array $types 数组 这里的数组要传引用&*    @param interal $pid 所属的分类上层分类id*    @param int $path 分类层 默认从0开始每次循环加一* @return array();*/ function getTypes(&$types=array(),$pid=0,$path=0){$sql = "select * from `type` where type_p_id = $pid";$res = mysql_query($sql);while($row = mysql_fetch_assoc($res)){$str = "";for($i=0;$i            $str.=" ";}$row['new_type_name'] = $str.$row['type_name'];$types[] = $row;getTypes($types,$row['type_id'],($path+1));}return $types;}//获取分类 调用函数getTypes($types);//获取列表根据 分类层进行排序$sql1 = "select * from type order by type_id";$sqll = mysql_query($sql1);?>新分类名称:当前分类:顶级分类//循环这个数组将分类正确输出for($i=0;$i?>}?>php 0){echo "";}else{echo "";}}elseif($act == "list"){//获取列表根据 分类层进行排序$sql = "select * from type order by concat(type_id,type_p_id)";$res = mysql_query($sql);?>id分类名path路径操作while($arr = mysql_fetch_assoc($res)){?>编辑|删除}?>php location.href='two.php?act=list'";}else{mysql_query("ROLLBACK");echo "";}}?>

type表:

下面是效果图写的确实不怎么样啊 还望大家见谅。

相关文章