首页 > 开发 > PHP > 正文

php中无限级分类程序代码

2024-05-04 23:06:16
字体:
来源:转载
供稿:网友

无限分类就像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. <form id="form1" name="form1" method="post" action="?act=add"
  46.   <table width="327" border="1" cellpadding="0" cellspacing="0"
  47.     <tr> 
  48.       <td width="97" height="27">名称</td> 
  49.       <td width="224"><label for="name"></label> 
  50.       <input type="text" name="name" id="name" /></td> 
  51.     </tr> 
  52.     <tr> 
  53.       <td height="30">栏目</td> 
  54.       <td><select name="pid" id="pid"
  55.             <option value="0">-----顶级分类-----</option> 
  56.             <?php 
  57.              sort_s(0); 
  58.    ?> 
  59.       </select></td> 
  60.     </tr> 
  61.     <tr> 
  62.       <td height="35">&nbsp;</td> 
  63.       <td><input type="submit" name="button" id="button" value="提交" /></td> 
  64.     </tr> 
  65.   </table> 
  66. </form> 
  67. <br /> 
  68. <br /> 
  69. <br /> 
  70. <br /> 
  71. <?php 
  72. //$sql = "select * from `class` order by sort asc, id Desc"; 
  73. //$sql="select * from class where pid=0"; 
  74. //$result =mysql_query($sql); 
  75.  //while($row = mysql_fetch_array($result)){ 
  76.   //$class_arr[] = array($row['id'],$row['name'],$row['classid'],$row['sort']); 
  77.     // echo $row['name'].$row['id'].'---'.$row['pid'].'<br>';  
  78.         sorttree(0); 
  79.   
  80.     
  81.  //} 
  82.   
  83. function sorttree($id){ 
  84.  //if() 
  85.  $sql="select * from class where pid=".$id
  86.     $result =mysql_query($sql); 
  87.  //$a=mysql_fetch_array($result); 
  88.  //$row = mysql_fetch_array($result); 
  89.  while($row = mysql_fetch_array($result)){ 
  90.     $rid=explode(",",$row['depth']); 
  91.     $i=count($rid); 
  92.     $n = str_pad('',$i,'-',STR_PAD_RIGHT); 
  93.     $n = str_replace("-","&nbsp;&nbsp;&nbsp;&nbsp;",$n); 
  94.  //print_r($row).'<br>'; 
  95.     if($row['pid']==0){ 
  96.        echo $n.'|-----'.$row['name'].'-----|<br>'
  97.     }else
  98.        echo $n.'&nbsp;&nbsp;&nbsp;&nbsp;<font color="#FF0000">|-</font>'.$row['name'].'<br>';  
  99.        } 
  100.     sorttree($row['id']); 
  101.  } 
  102. function sort_s($id){ 
  103.  //if() 
  104.  $sql="select * from class where pid=".$id
  105.     $result =mysql_query($sql); 
  106.  //$a=mysql_fetch_array($result); 
  107.  //$row = mysql_fetch_array($result); 
  108.  while($row = mysql_fetch_array($result)){ 
  109.     $rid=explode(",",$row['depth']); 
  110.     $i=count($rid); 
  111.     $n = str_pad('',$i,'-',STR_PAD_RIGHT); 
  112.     $n = str_replace("-","&nbsp;&nbsp;&nbsp;&nbsp;",$n); 
  113.  //print_r($row).'<br>'; 
  114.     if($row['pid']==0){ 
  115.         echo "<option value="".$row['id']."" style='background:#ccc' >".$n.'|------'.$row['name']."-----|</option>rn"
  116.     }else
  117.         echo "<option value="".$row['id']."">".$n.'&nbsp;&nbsp;&nbsp;&nbsp;|- '.$row['name']."</option>rn";  
  118.     } 
  119.     sort_s($row['id']); 
  120.  } 
  121. ?> 

 

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

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表