php无限极 left right,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 = "";
}
?>
}
?>
}elseif($act == "list"){
//获取列表根据 分类层进行排序
$sql = "select * from types order by type_p_id";
$res = mysql_query($sql);
?>
id | 分类名 | path路径 | 操作 |
while($arr = mysql_fetch_assoc($res)){?>
<?php echo $arr['type_id']?><?php echo $arr['type_name']?><?php echo $arr['type_p_id']?>编辑 |
删除
}
?>
}elseif($act == "edit"){
$id = $_GET['type_id'];
$sql = "select *from `types` where type_id=$id ";
$res = mysql_query($sql);
echo "
";
while($arr = mysql_fetch_assoc($res)){
echo "当前名称:{$arr['type_name']}"."
";
echo "新名称:"."
";
echo "";
}
echo "";
echo "
";
}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 "";
}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
?>
}
?>
}elseif($act == "addok"){
$type_name = $_POST['type_name'];
$type_id = $_POST['type_id'];
$sql = "insert into `type`(type_name,type_p_id) values ('$type_name','$type_id')";
$res = mysql_query($sql);
if(mysql_insert_id()>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 echo $arr['type_id']?><?php echo $arr['type_name']?><?php echo $arr['type_p_id']?>编辑 |
删除
}
?>
}elseif($act == "del"){
/***
这里要删除大分类的时候必须要删除该大分类下的子分类
所以这里开始mysql事务 mysql 事务开启的方式 事务详细说明请参考
*/
mysql_query("SET AUTOCOMMIT=1");//开启事务
$type_id = $_GET['type_id'];
//删除该分类
$sqlone = "delete from `type` where type_id=$type_id";
//删除该分类下的子分类
$sqltwo = "delete from `type`where type_p_id=$type_id";
$res1 = mysql_query($sqlone);
$res2 = mysql_query($sqltwo);
if($res1 && $res2)
{
mysql_query("COMMIT");
echo "";
}else{
mysql_query("ROLLBACK");
echo "";
}
}
?>
type表:
下面是效果图
写的确实不怎么样啊 还望大家见谅。
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
php无限极 left right,php无限极分类实现的两种解决方法相关推荐
- 无限法则无法更新服务器,无限法则不支持32为客户端怎么办_无限法则不支持32为客户端解决办法_玩游戏网...
<无限法则>登录服务器不在国家地区开放解决办法 如果你在玩<无限法则>时遇到了提示"登录服务器不在国家地区开放"的问题,你自己应该如何把这个问题处理了呢?如 ...
- php 递归实现无限极分类和排序_无限极分类的两种方式,递归和引用
说到无限极分类,比较常见的做法是在建表的时候,增加一个parnet_id字段用来区别自己所属的分类(是顶级分类还是子分类) 由于展示数据的时候,需要表达出这种所属关系,所以必然要在读取数据的时候进行一 ...
- 无限极分类php简单,创建无限极分类树型结构的简单方法
先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类 ...
- php 无限极分销,PHP实现无限极分类的两种方式
无限极分类说简单点就是一个类可以分成一个分子类,然后一个子类又可以分另一个子类这样无限分下去,就是好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一个文件夹,PHP要实现无限极分类有两 ...
- php无限极递归概念,php无限极分类递归与普通
1. 递归 public function getInfo(){ $data=$this->select(); $arr=$this->noLimit($data,$f_id=0,$lev ...
- 两种实现php无限极分类
一.两种实现php无限极分类 设置原始数据 public function index(){$items = array(1 => array('id' => 1, 'pid' => ...
- php easyui tree 结构,EasyUI Tree树组件无限循环的解决方法
在学习jquery easyui的tree组件的时候,在url为链接地址的时,发现如果最后一个节点的state为closed时,未节点显示为文件夹,单击会重新加载动态(Url:链接地址)形成无限循环. ...
- cf两边黑屏怎么解决win10_win10开机无限黑屏转圈重启解决方法
今天同事小梦的电脑又双叒叕出问题了.她来到公司后,打开电脑,发现进不去系统,一直是开机黑屏转圈重启,看到小编到公司后立马拉着我去当"维修工"了.一般人们遇到这个问题都是送去维修,但 ...
- dnf无限重连服务器,dnf无限连接服务器失败解决方法
dnf无限连接服务器失败怎么解决?相信很多小伙伴们都会遇到类似的问题,下面小编给小伙伴们带来了dnf无限连接服务器失败的临时解决办法,一起来看看把! 除了重启怎么办 几天好几次了 刚刚忍不了了 重启烦 ...
最新文章
- linux系统开机过程描述
- 80. 删除排序数组中的重复项 II golang
- Centos安装NFS服务器配置及挂载教程
- 新书正式定名《互联网运营智慧》
- sql server数据库文件的迁移(mdfldf文件)
- 只要一页纸,就能管好所有项目
- 特殊IP地址分类:私有地址、保留地址
- 关于先有鸡还是先有蛋,终于有正确答案了
- v-show会预先渲染_预先进行Big Design的利弊-我该怎么做
- org.eclipse.jdt版本更新导致包引入问题
- win10照片文件夹里面图片,突然不显示缩略图
- 英伟达RTX 4070 Ti显卡正式发布!你会买吗?
- jmeter压测学习11-模拟浏览器访问web页面
- 研究生图像处理该怎的自学_我的研究生这三年
- 微信小程序|小程序开发进阶
- 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略
- 迅为嵌入式Linux学习笔记5——进程间通信
- 迷你电脑主机的优缺点及应用分析
- Windows存储管理
- TensorFlow及model的安装
热门文章
- 电商促销海报BANNER设计要点,万能套用PSD分层模板,先收好!
- java排错_java排错之CPU高
- VisualStudio2019 DLL生成并使用教程(C++)最详细Demo教程
- c9, Performance Monitor Control Register
- APIC ID 的通用七级解释与概念性六级拓扑:APICID
- OSI参考模型和TCP/IP参考模型-详解
- 几个简单的Linux驱动程序
- Just For Fun:闲来无事,C语言+GTK生成mnist数据集的图形用户界面GUI
- android 手势类的封装,Android手势识别简单封装类
- 闭包 python_根据面试题谈谈 Python 闭包