当前位置:首页 > 综合实例 > 列表

php中无限级分类程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2013-12-31 16:41:53 浏览: 评论:0 

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

  1. -- 
  2. -- 数据库: `tree` 
  3. -- 
  4. CREATE DATABASE `tree` DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci; 
  5. USE `tree`; 
  6.  
  7.   
  8. -- 
  9. -- 表的结构 `class` 
  10. -- 
  11.   
  12. CREATE TABLE `class` ( 
  13.   `id` int(11) NOT NULL auto_increment, 
  14.   `name` varchar(10) NOT NULL, 
  15.   `pid` int(11) NOT NULL, 
  16.   `depth` varchar(100) default '0', 
  17.   PRIMARY KEY  (`id`) 
  18. ) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 AUTO_INCREMENT=30 ; 
  19.   
  20.  
  21. <?php 
  22. $link =mysql_connect('localhost','root','root'); 
  23. mysql_select_db('tree'); 
  24. mysql_query ( 'set names GBK' ); 
  25. if($_GET['act']=='add'){ 
  26.    $name=$_POST['name']; 
  27.    if($name=='') exit('name not null'); 
  28.       $pid=$_POST['pid']; 
  29.           if($pid !=0){ 
  30.              $sql="select * from class where id=".$pid; 
  31.              $result =mysql_query($sql); 
  32.              $row = mysql_fetch_array($result); 
  33.              $depth=$row['depth'].','.mysql_insert_id();//$getID即为最后一条记录的ID 
  34.           }else{ 
  35.              $depth=0;  
  36.        } 
  37.     $sql="INSERT INTO class(name,pid,depth) VALUES('".$name."','".$pid."','".$depth."')"; 
  38.     $result =mysql_query($sql); 
  39.        if(!$result){ 
  40.           exit("shibai $sql"); 
  41.        }else{ 
  42.           exit("chenggong"); 
  43.     } 
  44. } 
  45. ?> 
  46. <form id="form1" name="form1" method="post" action="?act=add"> 
  47.   <table width="327" border="1" cellpadding="0" cellspacing="0"> 
  48.     <tr> 
  49.       <td width="97" height="27">名称</td> 
  50.       <td width="224"><label for="name"></label> 
  51.       <input type="text" name="name" id="name" /></td> 
  52.     </tr> 
  53.     <tr> 
  54.       <td height="30">栏目</td> 
  55.       <td><select name="pid" id="pid"> 
  56.             <option value="0">-----顶级分类-----</option> 
  57.             <?php 
  58.              sort_s(0); 
  59.    ?> 
  60.       </select></td> 
  61.     </tr> 
  62.     <tr> 
  63.       <td height="35">&nbsp;</td> 
  64.       <td><input type="submit" name="button" id="button" value="提交" /></td> 
  65.     </tr> 
  66.   </table> 
  67. </form> 
  68. <br /> 
  69. <br /> 
  70. <br /> 
  71. <br /> 
  72. <?php 
  73. //$sql = "select * from `class` order by sort asc, id Desc"; 
  74. //$sql="select * from class where pid=0"; 
  75. //$result =mysql_query($sql); 
  76.  //while($row = mysql_fetch_array($result)){ 
  77.   //$class_arr[] = array($row['id'],$row['name'],$row['classid'],$row['sort']); 
  78.     // echo $row['name'].$row['id'].'---'.$row['pid'].'<br>';  
  79.         sorttree(0); 
  80.   
  81.     
  82.  //} 
  83.   
  84. function sorttree($id){ 
  85.  //if() 
  86.  $sql="select * from class where pid=".$id; 
  87.     $result =mysql_query($sql); 
  88.  //$a=mysql_fetch_array($result); 
  89.  //$row = mysql_fetch_array($result); 
  90.  while($row = mysql_fetch_array($result)){ 
  91.     $rid=explode(",",$row['depth']); 
  92.     $i=count($rid); 
  93.     $n = str_pad('',$i,'-',STR_PAD_RIGHT); 
  94.     $n = str_replace("-","&nbsp;&nbsp;&nbsp;&nbsp;",$n); 
  95.  //print_r($row).'<br>'; 
  96.     if($row['pid']==0){ 
  97.        echo $n.'|-----'.$row['name'].'-----|<br>'; 
  98.     }else{ 
  99.        echo $n.'&nbsp;&nbsp;&nbsp;&nbsp;<font color="#FF0000">|-</font>'.$row['name'].'<br>';  
  100.        } 
  101.     sorttree($row['id']); 
  102.  } 
  103. } 
  104. function sort_s($id){ 
  105.  //if() 
  106.  $sql="select * from class where pid=".$id; 
  107.     $result =mysql_query($sql); 
  108.  //$a=mysql_fetch_array($result); 
  109.  //$row = mysql_fetch_array($result); 
  110.  while($row = mysql_fetch_array($result)){ 
  111.     $rid=explode(",",$row['depth']); 
  112.     $i=count($rid); 
  113.     $n = str_pad('',$i,'-',STR_PAD_RIGHT); 
  114.     $n = str_replace("-","&nbsp;&nbsp;&nbsp;&nbsp;",$n); 
  115.  //print_r($row).'<br>'; 
  116.     if($row['pid']==0){ 
  117.         echo "<option value="".$row['id']."" style='background:#ccc' >".$n.'|------'.$row['name']."-----|</option>rn"; 
  118.     }else{ 
  119.         echo "<option value="".$row['id']."">".$n.'&nbsp;&nbsp;&nbsp;&nbsp;|- '.$row['name']."</option>rn";  
  120.     } 
  121.     sort_s($row['id']); 
  122.  } 
  123. } 
  124. ?> 

 

总结原理:如何把它的各个分类一一列出来呢?

首先我们假设有这样的一个三级分类,新闻→PHP新闻→PHP6.0出来了。

如果我们要查找“PHP6.0出来了”这条新闻,我们先点击新闻,然后再点击PHP新闻

就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反过来我们只要
知道一个子类的父类,就可以把它查找出来了。这样我们在设计数据库时就可以多设
计一个父类id的字段就可以实现无限分类的功能了.

Tags: php 无限级 分类程序

分享到: