php中无限级分类程序代码

无限分类就像windows下新建一个文件夹,在新建的文件夹下又可以新建一个文件夹,这样无限循环下去,无限分类也是这样,父类可以分出它子类,子类又可以分出它的子类,这样一直无限循环下去

 

 代码如下 复制代码

--
-- 数据库: `tree`
--
CREATE DATABASE `tree` DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
USE `tree`;

 

--
-- 表的结构 `class`
--

 

CREATE TABLE `class` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(10) NOT NULL,
  `pid` int(11) NOT NULL,
  `depth` varchar(100) default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 AUTO_INCREMENT=30 ;
 

<?php
$link =mysql_connect('localhost','root','root');
mysql_select_db('tree');
mysql_query ( 'set names GBK' );
if($_GET['act']=='add'){
   $name=$_POST['name'];
   if($name=='') exit('name not null');
      $pid=$_POST['pid'];
          if($pid !=0){
             $sql="select * from class where id=".$pid;
             $result =mysql_query($sql);
             $row = mysql_fetch_array($result);
             $depth=$row['depth'].','.mysql_insert_id();//$getID即为最后一条记录的ID
          }else{
             $depth=0;
       }
    $sql="INSERT INTO class(name,pid,depth) VALUES('".$name."','".$pid."','".$depth."')";
    $result =mysql_query($sql);
       if(!$result){
          exit("shibai $sql");
       }else{
          exit("chenggong");
    }
}
?>
<form id="form1" name="form1" method="post" action="?act=add">
  <table width="327" border="1" cellpadding="0" cellspacing="0">
    <tr>
      <td width="97" height="27">名称</td>
      <td width="224"><label for="name"></label>
      <input type="text" name="name" id="name" /></td>
    </tr>
    <tr>
      <td height="30">栏目</td>
      <td><select name="pid" id="pid">
            <option value="0">-----顶级分类-----</option>
            <?php
             sort_s(0);
   ?>
      </select></td>
    </tr>
    <tr>
      <td height="35">&nbsp;</td>
      <td><input type="submit" name="button" id="button" value="提交" /></td>
    </tr>
  </table>
</form>
<br />
<br />
<br />
<br />

<?php
//$sql = "select * from `class` order by sort asc, id Desc";
//$sql="select * from class where pid=0";
//$result =mysql_query($sql);
 //while($row = mysql_fetch_array($result)){
  //$class_arr[] = array($row['id'],$row['name'],$row['classid'],$row['sort']);
    // echo $row['name'].$row['id'].'---'.$row['pid'].'<br>';
        sorttree(0);
 
  
 //}
 
function sorttree($id){
 //if()
 $sql="select * from class where pid=".$id;
    $result =mysql_query($sql);
 //$a=mysql_fetch_array($result);
 //$row = mysql_fetch_array($result);
 while($row = mysql_fetch_array($result)){
    $rid=explode(",",$row['depth']);
    $i=count($rid);
    $n = str_pad('',$i,'-',STR_PAD_RIGHT);
    $n = str_replace("-","&nbsp;&nbsp;&nbsp;&nbsp;",$n);
 //print_r($row).'<br>';
    if($row['pid']==0){
       echo $n.'|-----'.$row['name'].'-----|<br>';
    }else{
       echo $n.'&nbsp;&nbsp;&nbsp;&nbsp;<font color="#FF0000">|-</font>'.$row['name'].'<br>';
       }
    sorttree($row['id']);
 }
}

function sort_s($id){
 //if()
 $sql="select * from class where pid=".$id;
    $result =mysql_query($sql);
 //$a=mysql_fetch_array($result);
 //$row = mysql_fetch_array($result);
 while($row = mysql_fetch_array($result)){
    $rid=explode(",",$row['depth']);
    $i=count($rid);
    $n = str_pad('',$i,'-',STR_PAD_RIGHT);
    $n = str_replace("-","&nbsp;&nbsp;&nbsp;&nbsp;",$n);
 //print_r($row).'<br>';
    if($row['pid']==0){
        echo "<option value="".$row['id']."" style='background:#ccc' >".$n.'|------'.$row['name']."-----|</option>rn";
    }else{
        echo "<option value="".$row['id']."">".$n.'&nbsp;&nbsp;&nbsp;&nbsp;|- '.$row['name']."</option>rn";
    }
    sort_s($row['id']);
 }
}
?>

总结原理

如何把它的各个分类一一列出来呢?
首先我们假设有这样的一个三级分类,新闻→PHP新闻→PHP6.0出来了。
如果我们要查找“PHP6.0出来了”这条新闻,我们先点击新闻,然后再点击PHP新闻

就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反过来我们只要

知道一个子类的父类,就可以把它查找出来了。这样我们在设计数据库时就可以多设

计一个父类id的字段就可以实现无限分类的功能了

时间: 2024-10-01 02:42:04

php中无限级分类程序代码的相关文章

php+mysql无限级分类程序代码

表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径(储存该分 类祖先的集合),isdir判断是否是目录(1为是,0为否). 例1  代码如下 复制代码 //$count为分类等级 sort_list($str,$fatherid,$count) { $rs = $this->sql->re_datas("select * from sort where father_id = fatherid"); $num

分享一个php实现无限级分类程序代码

下面给大家看看我的数据库结构吧:数据库的名字为:fa_category Field Type Comment cid int(11) 分类id catename varchar(255) 分类名字 catetype int(1) 分类类型,1为单页面,2为普通分类 catdir varchar(255) 英文目录 display int(1) 1为显示,2为不显示 keywords varchar(255) 栏目关键字 description text 栏目描述 ctime int(11) 创建

Thinkphp无限级分类代码_php技巧

本篇就一点一点教大家写一个无限级分类出来,其实掌握一个知识,最主要的是要掌握无限级分类的逻辑,那么写起来就很容易的多了. 首先看数据库表:xp_cate 控制器:CateAction.class.php <?php class CateAction extends Action{ function index(){ $cate=M('Cate'); $list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath&qu

biginteger-Java中n!的代码看不懂啊,求解释

问题描述 Java中n!的代码看不懂啊,求解释 import java.math.BigInteger; import java.util.*; public class Main{ protected static ArrayList table = new ArrayList(); static { table.add(BigInteger.valueOf(1)); } public static synchronized BigInteger factorial(int x) { for

jsp-JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答

问题描述 JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答 背景: 楼主使用Myelipse新建了一个Web项目,在编写一个JSP文件的时候遇到一个问题,首先是使用了img,并且写了一个事件,代码如下: <imgclass="poke" src="poke/back.jpg" title="hit" id="play_id_3" onClick="change_pic()&qu

link中编译的代码,怎么确定使用的变量是不是增加列?

问题描述 link中编译的代码,怎么确定使用的变量是不是增加列? link中编译的代码,怎么确定使用的变量是不是增加列? 解决方案 反射遍历Attribute 找有[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]的字段

javascript-js中的java代码如何访问js中方法的参数??见图

问题描述 js中的java代码如何访问js中方法的参数??见图 如何让1处的值传到2处这里?? 解决方案 需要用ajax提交你的index到服务器,服务器端无法直接获取客户端js的变量值 <script src=""http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.1.min.js""></script><script type=""text/javascript&qu

干掉你程序中的僵尸代码

随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个在软件开发中非常普遍的问题:僵尸代码.几乎所有我接触过的代码库里都四散着很多小段的,甚至大片大片的被注释掉的代码.这就是僵尸代码. //目前禁用这项功能.Jimmy在写这段代码时肯定是喝醉了. //你可能以为这里发生了恐怖的代码凶手案-不,不,我只是把它们注释掉了- 为什么称它们为僵尸代码?你知道,僵尸不并不是真的死的.就像恐怕电影里告诉我们的,尽管僵尸看起来是死人,但它们仍有能力四处出没袭击我们.相同的道理,僵尸代码也是处于不生不死之间-它们

mfc-求大神解答,在MFC中如何通过代码将本地的图片加载到资源中并分配ID?

问题描述 求大神解答,在MFC中如何通过代码将本地的图片加载到资源中并分配ID? 求大神解答,在MFC中如何通过代码将本地的图片加载到资源中并分配ID? 解决方案 资源是编译时候的概念,加载是运行时候的概念. 资源被资源编译器编译,再通过链接器附加到可执行文件上.程序运行的时候它是只读的. 解决方案二: 不知道你为什么要怎么做,不可以直接在程序中调用资源吗 解决方案三: 用CXImage等类库可以加载文件 解决方案四: 用CImage加载本地图片就不要放到资源视图中了,也就没有资源ID的概念了.