45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:利用数据库的order by实现无限分类的方法

利用数据库的order by实现无限分类的方法

2016-09-06 09:25:36 来源:www.45fan.com 【

利用数据库的order by实现无限分类的方法

转载请注明作者surfchen和本页地址http://www.yubeinet.com/article.php?id=10

本文的无限分类主要是通过order by sortlevel实现的..

注意:以下代码只通过功能测试,没有通过安全测试..在实际使用中请对所要加入的数据进行处理...防止注入等黑客攻..

废话少说...呵呵..look:

建表

create table sort(

id int(10) unsigned not null auto_increment,/*分类ID*/

sortname varchar(20),/*分类名*/

sortlevel varchar(100),/*分类等级*/

primary key(id)

)TYPE=MyISAM

PHP文件有两个..一个是类文件,用来对数据库进行操作..一个是实际操作文件..

类文件:

sort.class.php

<?php

/******************************************

文档类型:类文件

功能:利用数据库实现无限分类功能

created by surfchen,http://yubeinet.com.

ExamNeverTeam

******************************************/

class UnlimitedSort

{

function UnlimitedSort()

{

$this->table='sort';//表名

}

/*添加子分类*/

function AddSortByFatherId($sortname,$fatherid)

{

$fatherlevel=$this->GetSortLevelById($fatherid);//获得父等级

if ($this->CheckIfNameExists($sortname,$fatherlevel)==true)

{

return false;//该名已存在

}

$sortlevel=$this->CreateSortLevel($fatherlevel);//构造等级名

$query="insert into { $this->table} (sortname,sortlevel) values ('$sortname','$sortlevel')";

echo $query;

if (mysql_query($query))

{

return true;

}

echo '新分类插入失败';

return false;

}

/*根据父等级名构造一个等级名*/

function CreateSortLevel($fatherlevel)

{

$query="select MAX(sortlevel) from sort where sortlevel like '{ $fatherlevel}___'";

$result=mysql_query($query);

$row=mysql_fetch_array($result);

if ($row[0]==null)

{

return $fatherlevel.'001';

}

$sublevel=substr($row[0],-3);//获得除父等级名外的等级名

$num=$sublevel;

$num++;//最前面的几个零将会去掉

for ($i=0;$i<3;$i++)

{

if ($sublevel{ $i}!=0)

{

break;

}

$num='0'.$num;//把前面递增的时候失去的0加上

}

return $fatherlevel.$num;

}

/*根据分类id获得分类等级*/

function GetSortLevelById($id)

{

$query="select sortlevel from { $this->table} where id=$id";

$result=mysql_query($query);

$row=mysql_fetch_array($result);

return $row[0];

}

/*获得分类的详细信息*/

function GetSorts()

{

$query="select * from { $this->table} order by sortlevel";

$result=mysql_query($query);

while ($row=mysql_fetch_array($result))

{

$sorts[]=$row;

}

return $sorts;

}

/*判断子分类是否存在*/

function CheckIfNameExists($sortname,$fatherlevel)

{

$query="select count(*) from sort where sortlevel like '{ $fatherlevel}___' and sortname='{ $sortname}'";

$result=mysql_query($query);

$row=mysql_fetch_array($result);

if ($row[0]>=1)

{

echo '名字已经存在';

return true;

}

return false;

}

}

?>

实际操作文件:

sort.php

请自行修改以下数据库信息..

<?php

/******************************************

文档类型:执行文件

功能:利用数据库实现无限分类功能

created by surfchen,http://yubeinet.com.

ExamNeverTeam

******************************************/

include('sort.class.php');

define("HOST","");//数据库主机

define("USER","root");//数据库用户名

define("PASS","");//数据库密码

define("DB","chenzecs");//数据库名

mysql_connect(HOST,USER,PASS);

mysql_select_db(DB);

$UnlimitedSort=new UnlimitedSort;

if ($_POST['newsort'])

{

$UnlimitedSort->AddSortByFatherId($_POST['newsort'],$_POST['sort']);//添加新分类

}

echo '<form method="post" action="sort.php"><input type="text" name="newsort" /><select name="sort"><option value="0" selected="selected">根</option>';

foreach ($UnlimitedSort->GetSorts() as $value)

{

echo '<option value="'.$value['id'].'">';

$level=strlen($value['sortlevel']);

for ($i=0;$i<$level;$i++)

{

echo '-';

}

echo $value['sortname'].'</option>';

}

echo '</select><input type="submit" value="提交" /></form>';

?>

OK....现在运行sort.php就可以了..

由于安全原因,我就不给出演示地址了...
 

本文地址:http://www.45fan.com/a/question/73003.html
Tags: 实现 数据库 order
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部