请大家发我一个PHP无限级分类增,删,改,查的方法,谢谢了!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请大家发我一个PHP无限级分类增,删,改,查的方法,谢谢了!相关的知识,希望对你有一定的参考价值。
<?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 "<script>location.href='ok.php?act=list'</script>";
else
echo "<script>alert('添加失败');</script>";
//如果不等于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 "<script>location.href='ok.php?act=list'</script>";
else
echo "<script>alert('添加失败');</script>";
elseif($act=="add")
?>
<form method="post" action="?ac=addok">
新分类名称: <input type="text" name="type_name"><br/>
当前分类:<select name="type_id" >
<option value="0">顶级分类</option>
<?php
//循环遍历分类
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 = "";
?>
<option value="<?php echo $res['type_id']?>"><?php echo $strpad.$res['type_name']?></option>
<?php
?>
</select><br />
<input type="submit" value="添加"/>
</form>
<?php
elseif($act == "list")
//获取列表根据 分类层进行排序
$sql = "select * from types order by type_p_id";
$res = mysql_query($sql);
?>
<table width="50%" style="font-size:12px;margin-left:20%;">
<tr><td>id</td><td>分类名</td><td>path路径</td><td>操作</td></tr>
<?php
while($arr = mysql_fetch_assoc($res))?>
<tr>
<td><?php echo $arr['type_id']?></td>
<td><?php echo $arr['type_name']?></td>
<td><?php echo $arr['type_p_id']?></td>
<td ><a href="?ac=edit&type_id=<?php echo $arr['type_id'];?>">编辑</a> |
<a href="?ac=del&type_id=<?php echo $arr['type_id'];?>">删除</a></td>
</tr>
<?php
?>
</table>
<input type="button" value="添加" onclick="(location.href='?ac=add')">
<?php
elseif($act == "edit")
$id = $_GET['type_id'];
$sql = "select *from `types` where type_id=$id ";
$res = mysql_query($sql);
echo "<form method='post' action='?ac=edit_ok'>";
while($arr = mysql_fetch_assoc($res))
echo "当前名称:$arr['type_name']"."<br />";
echo "新名称:<input type='text' name='n_type_name' >"."<br />";
echo "<input type='hidden' value=$arr['type_id'] name='id'/>";
echo "<input type='submit' value='更新'>";
echo "</form>";
elseif($act == "edit_ok")
$name = trim($_POST['n_type_name']);
$id = $_POST['id'];
if(!empty($name))
$sql = "update `types` set type_name='$name' where type_id=$id";
mysql_query($sql);
echo "<script>location.href('ok.php?act=list')</script>";
else
echo "<script>location.href('ok.php?act=list')</script>";
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 "<script>location.href('ok.php?act=list')</script>";
else
echo "<script>alert('删除失败');</script>";
?>追问
$sql ="delete from `types` where type_p_id like '$id%' "; 你这条语句就是删除分类及以下的子分类吗?我试了一下,不行。我删除分类时,子分类都删除;但是我想删除子分类,删除不了。
参考技术A 楼主,把你那只剩下删有问题的代码发给我,包扩数据库,做好了发给你 咦,好像这个可以上传文件包的吧 参考技术B 不是很明白你的需求追问发我一个PHP无限级分类增,删,改,查的代码,谢谢了!
追答额,我就是不明白你这句话,你想实现什么功能?无限联动?
追问就是纯粹的无限级分类,因为我写了一个无限级分类,增,查改都可以,就是删除有点问题。有的话代码发我一份。谢谢了!
追答好吧,听上去不错,我也等等你想要的答案,我这里没有相关代码
PHP利用递归函数实现无限级分类的方法_php技巧 - PHP
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习
相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径。各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了。
什么是无限级分类?
无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了。其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类。分类无处不在,分类显得“无限”。我这里就不说无限分类的必要性了。
无限级分类原理简介
无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,id,pid。id用来标识自身,而pid则是用来表明父级id。也就是说,每个分类记录不仅描述了自身,还描述了与其关心最为紧密的另一个id。看似复杂的事情被这样一个小技巧解决了。
php无限级分类是经常要用到的,本人以前一直用的是已经写好的,所以没仔细去研究过,下面是一个使用递归实现的简单的php无限级分类的函数;也许这不是最优的方法,但对于一般的应用也足够了。
数据表结构
CREATE TABLE IF NOT EXISTS `category` ( `id` int(5) NOT NULL AUTO_INCREMENT COMMENT ‘唯一自增id‘, `pid` int(5) NOT NULL DEFAULT ‘0‘ COMMENT ‘父id‘, `sort` int(2) NOT NULL DEFAULT ‘0‘ COMMENT ‘排序数字‘, `name` varchar(30) DEFAULT NULL COMMENT ‘名称‘, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=‘无限极分类表‘ AUTO_INCREMENT=1 ;
数据
INSERT INTO `category` (`id`, `pid`, `sort`, `name`) VALUES (1, 0, 1, ‘php‘), (2, 0, 2, ‘数据库‘), (3, 0, 3, ‘javascript‘), (4, 1, 1, ‘框架模板‘), (5, 1, 2, ‘函数总结‘), (6, 2, 1, ‘mysql‘), (7, 4, 1, ‘框架‘), (8, 4, 2, ‘模板‘), (9, 8, 1, ‘smarty‘), (10, 7, 2, ‘thinkphp‘), (11, 10, 1, ‘thinkphp技巧‘), (12, 10, 2, ‘thinkphp模板‘), (13, 12, 3, ‘模板知识总结‘), (14, 12, 2, ‘模板视频教程‘), (15, 11, 1, ‘model技巧‘);
函数实现代码
function tree(&$list,$pid=0,$level=0,$html=‘--‘){ static $tree=array(); foreach($list as $v){ if($v[‘pid‘]==$pid){ $v[‘level‘]=$level; $v[‘html‘]=str_repeat($html,$level); $tree[]=$v; tree($list,$v[‘id‘],$level+1,$html); } } return $tree; }
以上tree函数的第一个参数$list就是获取的如上表的一个二维数组的结果集。需要注意的是从数据库获取结果集的sql语句必须加上order by sort asc
,否则sort字段将不能发挥排序的作用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对敏而好学论坛/嗨学网的支持。如果你想了解更多相关内容请查看下面相关链接
原文地址是:http://www.piaodoo.com/thread-3556-1-1.html
以上是关于请大家发我一个PHP无限级分类增,删,改,查的方法,谢谢了!的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis:mybatis Java API编程实现增删改查的用法