时间:2021-07-01 10:21:17 帮助过:17人阅读
1、数据库ProductShow中有b_mtype表,建表语句如下:
- CREATE TABLE `b_mtype` (
- `typeid` int(4) NOT NULL default '0',
- `typename` varchar(50) NOT NULL default '',
- `parentid` int(4) NOT NULL default '0',
- `parentstr` varchar(200) NOT NULL default '',
- `depth` int(4) NOT NULL default '0',
- `rootid` int(4) NOT NULL default '0',
- `child` varchar(200) NOT NULL default '',
- `orders` varchar(200) NOT NULL default '',
- PRIMARY KEY (`typeid`)
- ) TYPE=MyISAM;
2、ProductClass.php代码:直接复制即可)
- < html>
- < head>
- < meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- < title>WHB_PHP无限级分类< /title>
- < style type="text/css">
- < !--
- .STYLE1 {color: #FF0000}
- body,td,th {
- font-family: 宋体;
- font-size: 12px;
- }
- .STYLE2 {
- color: #FFFFFF;
- font-size: 14px;
- font-weight: bold;
- }
- -->
- < /style>
- < /head>
- < body>
- < ?php
- ini_set("error_reporting","E_ALL & ~E_NOTICE");//忽略所有警告信息
- require_once("conn.php");//嵌入连接文件
- @$ToDo=$_GET["ToDo"];
- switch($ToDo)
- {
- case "add":
- echo add();
- break;
- case "edit":
- echo edit();
- break;
- case "saveadd":
- echo saveadd();
- break;
- case "saveedit":
- echo saveedit();
- break;
- case "del":
- echo del();
- break;
- default:
- ?>
- < table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" class="tblborder">
- < tr>
- < td valign="top">< table width="100%" border="0" cellspacing="1" cellpadding="3">
- < tr>
- < td width="55%" height="20" align="center" bgcolor="#698FC7">< span class="tblhead">< b>< span class="STYLE2">商品类别设置< /span> < a href="?ToDo=add">添加一个新类别< /a>< /b>< /span>< /td>
- < /tr>
- < /table>
- < table width="100%" bgcolor="#cccccc" cellspacing="1" cellpadding="3">
- < tr bgcolor="#F9F9F9">
- < td width="6%" height="21">ID< /td>
- < td width="49%">类别名称< /td>
- < td width="14%">排序< /td>
- < td width="31%">操作< /td>
- < /tr>
- < ?php
- $query=mysql_query("select * from b_mtype order by rootid,orders");
- while($arr=mysql_fetch_array($query))
- {
- ?>
- < tr>
- < td bgcolor="#FFFFFF">< ?php echo $arr["typeid"];?>< /td>
- < td bgcolor="#FFFFFF">< ?php if ($arr["depth"]>0) {
- for($i=1;$i< =$arr["depth"];$i++){ echo " ";}
- }?>
- < ? if($arr["child"]>0) { echo "+";}else {echo "-";}?>
- < ? if($arr["parentid"]==0) { echo "< b>";}?>
- < ? echo $arr["typename"];?>
- < ? if ($arr["child"]>0) {?>(< ? echo $arr["child"];?>)< ? }?>< /td>
- < td bgcolor="#FFFFFF">< ?php echo $arr["orders"];?>< /td>
- < td bgcolor="#FFFFFF">< a href="?ToDo=add&editid=< ?php echo $arr["typeid"];?>">< U>添加子类< /U>< /a>
- | < a href="?ToDo=edit&editid=< ?php echo $arr["typeid"]?>">< U>编辑类别< /U>< /a>
- | < ? if($arr["child"]==0){?>< a href="?ToDo=del&editid=< ? echo $arr["typeid"];?>" onClick="{if(confirm('删除类别时,该类别下的所有产品将一并被删除,确定删除吗?')){return true;}return false;}">< U>删除类别< /U>< /a>< ?}else{?>< a href="#" onClick="{if(confirm('该类别含有下属类别,必须先删除其下属类别方能删除本类别!')){return true;}return false;}">< U>删除类别< /U>< /a>< ?}?> < /td>
- < /tr>
- < ?php
- }
- ?>
- < /table>
- < /td>
- < /tr>
- < /table>
- < ?php
- break;
- }
- ?>
- < ?php ///增加类别
- function add(){
- @$editid=$_REQUEST["editid"];
- ?>
- < form name="form1" method="post" action="?ToDo=saveadd">
- < table width="90%" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
- < tr bgcolor="#CCCCCC">
- < td colspan="2" align="center" bgcolor="#698FC7">< span class="STYLE2">创建新的类别< /span>< /td>
- < /tr>
- < tr>
- < td width="25%" bgcolor="#FFFFFF">类别名称:< /td>
- < td width="75%" bgcolor="#FFFFFF">< input name="typename" type="text" id="typename">< /td>
- < /tr>
- < tr>
- < td width="25%" height=30 bgcolor="#FFFFFF">< U>所属类别< /U>< /td>
- < td width="75%" bgcolor="#FFFFFF">
- < select name=btype>
- < option value="0">做为主类别< /option>
- < ?
- $query=mysql_query("select * from b_mtype order by rootid,orders");
- while($arr=mysql_fetch_array($query)){ ?>
- < option value="< ? echo $arr["typeid"]?>" < ?php if($editid == $arr['typeid']){ echo " selected"; }?>>
- < ? if($arr["depth"]>0) {
- for($i=1;$i< =$arr["depth"];$i++)
- {
- echo "-";
- }
- }?>
- < ? echo $arr["typename"]?>< /option>
- < ?
- }
- ?>
- < /select>
- < /td>
- < /tr>
- < tr>
- < td bgcolor="#FFFFFF"> < /td>
- < td bgcolor="#FFFFFF">< input type="submit" name="Submit" value="保存">
- < label>
- < input type="button" name="cancel" id="cancel" value="返回" onclick="history.go(-1);" />
- < /label>< /td>
- < /tr>
- < /table>
- < /form>
- < ? }?>
- < ?php /////保存增加的类别
- function saveadd(){
- $query=mysql_query("select typeid from b_mtype order by typeid desc limit 1");
- while($arr=mysql_fetch_array($query)){
- if (!$arr["typeid"]){
- $postnum=1;
- }else{
- $postnum=$arr["typeid"]+1;
- }
- }
- if(!$postnum) $postnum=1;
- $ntid =$postnum;
- $tn =$_REQUEST["typename"];
- $btype =$_REQUEST["btype"];
- //echo $btype;
- if ($ntid=="" or $tn=="")
- {
- echo "< script language='javascript'>";
- echo "alert('参数有误,请重新填写.!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- if ($btype!=0){
- $result=mysql_query("select rootid,typeid,depth,orders,parentstr from b_mtype where typeid='$btype'");
- $aa=mysql_fetch_array($result);
- $rootid=$aa['rootid'];
- //echo "aaaaaaaaaaa";
- $parentid=$aa['typeid'];
- $depth=$aa['depth'];
- $orders=$aa['orders'];
- $parentstr=$aa['parentstr'];
- //echo $rootid;
- if(($aa["depth"]+1)>20){ die("本分类限制最多只能有20级分类"); }
- }
- if($ntid == $btype)
- {
- echo "< script language='javascript'>";
- echo "alert('您所指定的typeid值重复!');";
- echo "location.href='?';";
- echo "< /script>";
- die();
- }
- if($btype!=0){
- $depth=$depth+1;
- $rootid=$rootid;
- $orders =$ntid;
- $parentid =$btype;
- //$child = $child;
- if ($parentstr=="0"){
- $parentstr=$btype;
- }else{
- $parentstr=$parentstr.",".$btype;
- }
- }else{
- $depth=0;
- $rootid=$ntid;
- $orders=1;
- $parentid=0;
- $child=0;
- $parentstr=0;
- }
- //插入类别
- $query=mysql_query("insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')") ;
- //用于调试 echo "insert into b_mtype values('$ntid','$tn','$parentid','$parentstr','$depth','$rootid','','$orders')";
- if ($btype!=0)
- {
- if ($depth>0)
- {
- //当上级分类深度大于0的时候要更新其父类或父类的父类)的版面数和相关排序
- for ($i=1;$i< =$depth;$i++){
- //更新其父类版面数
- if ($parentid!=""){
- $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");
- }
- //得到其父类的父类的版面ID
- $result=mysql_query("select parentid from b_mtype where typeid='$parentid'");
- $par=mysql_fetch_array($result);
- if ($par['parentid']!=""){
- $parentid=$par['parentid'];
- }
- //当循环次数大于1并且运行到最后一次循环的时候直接进行更新
- if ($i==$depth && $parentid!=""){
- $query=mysql_query("update b_mtype set child=child+1 where typeid='$parentid'");
- }
- }//for循环结束
- //更新该版面排序以及大于本需要和同在本分类下的版面排序序号
- $query=mysql_query("update b_mtype set orders=orders+1 where rootid='$rootid' and orders>'$orders'");
- //$orders1=$orders+1;
- //echo "orders1=".$orders1;
- $query=mysql_query("update b_mtype set orders='$orders'+1 where typeid='$ntid'");
- }else{ //对应if ($depth>0),当上级分类深度为0的时候只要更新上级分类版面数和该版面排序序号即可
- $query=mysql_query("update b_mtype set child=child+1 where typeid='$btype'");
- $result=mysql_query("select max(orders) from b_mtype where typeid='$ntid'");
- $ord=mysql_fetch_array($result);
- $query=mysql_query("update b_mtype set orders='$ord[0]'+1 where typeid='$ntid'");
- }
- }
- echo "< script language='javascript'>";
- echo "alert('类别添加成功!');";
- echo "location.href='?';";
- echo "< /script>";
- }
- ?>
- < ?PHP ////修改设置
- function edit(){
- //global $db,$editid,$tn,$arr;
- $editid=$_REQUEST["editid"];
- $result=mysql_query("select * from b_mtype where typeid='$editid'");
- $tn=mysql_fetch_array($result);
- ?>
- < form name="form2" action ="?ToDo=saveedit" method="post">
- < input type="hidden" name="editid" value="< ?php echo $editid;?>">
- < table width="90%" border="0" align=center cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
- < tr>
- < th height=24 colspan=2 bgcolor="#698FC7" class="STYLE2">编辑类别:< ?PHP echo $tn["typename"];?>< /th>
- < /tr>
- < tr>
- < td width="44%" height=30 bgcolor="#FFFFFF">类别名称< /td>
- < td width="56%" bgcolor="#FFFFFF">
- < input type="text" name="typename" size="35" value="< ?php echo $tn["typename"];?>">
- < /td>
- < /tr>
- < tr>
- < td width="44%" height=30 bgcolor="#FFFFFF">< p>所属类别< /p>
- < p> < span class="STYLE1">特别提示:< /span>< br />
- 所属类别不能指定当前类别(即自己)为父类别< BR>
- 所属类别不能指定当前类别的子类别为父类别< /p>< /td>
- < td width="56%" bgcolor="#FFFFFF">
- < select name="class">
- < option value="0">做为主类别< /option>
- < ?
- $query=mysql_query("select * from b_mtype order by rootid,orders");
- while($arr=mysql_fetch_array($query))
- { ?>
- < option value="< ?php echo $arr[typeid]?>" < ?php if ($tn["parentid"] == $arr["typeid"]) { echo "selected"; } ?>>< ? if ($arr["depth"]>0) {?>
- < ?for ($i=1;$i< =$arr["depth"];$i++){ echo "-";}?>
- < ? } ?>< ?php echo $arr["typename"]?>< /option>
- < ?
- }
- ?>
- < /select>
- < /td>
- < /tr>
- < tr>
- < td width="44%" height=2