利用数据库的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