php 進(jìn)階:實(shí)現(xiàn)無(wú)限分類(lèi)第3/4頁(yè)
更新時(shí)間:2006年12月16日 00:00:00 作者:
3.程序控制
------------------------------------------------------------
實(shí)現(xiàn)無(wú)限分類(lèi)這個(gè)功能中就屬這一步最為復(fù)雜辛苦,首先看看程序需要完成的步驟:
1)創(chuàng)建分類(lèi)上傳;
2)創(chuàng)建信息上傳;
3)明確顯示各分類(lèi)及其之間的關(guān)系;
4)處理查詢(xún)功能;
5)如何處理編輯和刪除的功能;
而這五步中最為困難的就是第五個(gè)步驟,因?yàn)閷?duì)分類(lèi)的編輯和刪除涉及到一至性的問(wèn)題.
下面我就逐一描述 php 的程序控制:
1)創(chuàng)建分類(lèi)上傳
在介紹這個(gè)功能前,先介紹一下 explode( ) 這個(gè)函數(shù),這是個(gè)字串處理函數(shù),用來(lái)分解字串的,具體的用法,例:
分解"0:1:2:3:4"里的數(shù)字
$val='0:1:2:3:4';
$rid=explode(":",$val);
經(jīng)過(guò) explode( ) 函數(shù)處理,$val 內(nèi)的所有數(shù)字都分解到 $rid 數(shù)組中了,要引用時(shí)只需打印:echo '$rid[0],$rid[1],$rid[2]..."; 就行了.explode( ) 函數(shù)在整個(gè)分類(lèi)處理中起著非常重要的作用,好現(xiàn)在開(kāi)始介紹無(wú)現(xiàn)分類(lèi)的程序控制.
可以假設(shè)個(gè)總分類(lèi) 0 ,所有的分類(lèi)都是它的子孫分類(lèi),現(xiàn)在來(lái)建立第一個(gè)分類(lèi)'系統(tǒng)',來(lái)看看它在數(shù)據(jù)庫(kù)的存儲(chǔ)形式:
id | uid | type | rout_id | rout_char
1 | 0 | 系統(tǒng) | 0:1 | 系統(tǒng)
接著又在下面分'Linux':
id | uid | type | rout_id | rout_char
2 | 1 | Linux| 0:1:2 | 系統(tǒng):Linux
以上就是數(shù)據(jù)庫(kù)存儲(chǔ)的形式,現(xiàn)在就來(lái)完成 php 的代碼,這與論壇的代碼很相似,我們所要做的就是將分類(lèi)的 id 放入 uid,而父分類(lèi)的 uid 就放 0,下面來(lái)看看代碼:
<?
.....
.....
//設(shè)置默認(rèn)頁(yè)
if (empty($func)) $func=='showtype';
//設(shè)置父分類(lèi)的 uid
if (empty($uid)) $uid=0;
//數(shù)據(jù)庫(kù)存儲(chǔ)************************************************
if ($func=='save'):
$fields = "";
$values = "";
if ($id!="") {
$fields .= ",id";
$values.=",$id";
}
if ($uid!="") {
$fields .= ",uid";
$values.=",$uid";
}
if ($type!="") {
$fields .= ",type";
$values.=",'$type'";
}
if ($route_id=="") {
//取得父分類(lèi)的 route_id
if ($uid!=0) {
$result = mysqlquery("select * from type where id=$uid");
$route_id=mysql_result($result,0,"route_id");
} else {
$routr_id='0';
}
$fields .= ",route_id";
//形成自己的 route_id
$route_id="$route_id:$id";
$values.=",'$route_id'";
}
//形成自己的 route_char
if ($route_char!="") {
$fields .= ",route_char";
$route_char="$route_char:$type";
$values.=",'$route_char'";
} else {
$fields .= ",route_char";
$route_char=$type;
$values.=",'$route_char'";
}
$fields = substr($fields,1,strlen($fields)-1);
$values = substr($values,1,strlen($values)-1);
$result = mysqlquery("insert into type ($fields) values ($values)");
...
endif; /* end save */
//分類(lèi)上傳************************************************
if ($func=='createtype'):
//取得自己的 id
$result = mysqlquery("select * from type order by
id desc");
$num=mysql_numrows($result);
if (!empty($num)) {
$cat = mysql_result($result,0,"id");
} else {
$cat=0;
}
//判斷分類(lèi)的狀態(tài)
if ($uid != 0) {
$result=mysql_query("select * from type where id=$uid");
$type=mysql_result($result,0,"type");
$route_char=mysql_result($result,0,"route_char");
} else {
$type='父分類(lèi)';
}
echo "<FORM ACTION="$PHP_SELF?func=save" METHOD=POST>";
echo "<table>";
echo "<tr><td>所屬類(lèi)別:$type</td></tr>";
echo "<tr><td>創(chuàng)建分類(lèi):<input type=text name='type' SIZE=10 MAXLENGTH=100></td></tr>";
echo "<tr><td>";
$cat=$cat+1;
echo "<input type=hidden name=id value='$cat'>";
echo "<input type=hidden name=uid value='$uid'>";
echo "<input type=hidden name=route_char value='$route_char'>";
echo "<INPUT TYPE=submit NAME='Save' VALUE='保存'></td></tr>";
echo "</table>";
echo "</form>";
endif; /* end createtype */
//顯示分類(lèi)************************************************
if ($func=='showtype'):
echo "<table>";
//判斷分類(lèi)的狀態(tài)
if ($uid!=0) {
$result=mysql_query("select * from type where id=$uid");
$type=mysql_result($result,0,"type");
} else {
$type='父分類(lèi)';
}
echo "<tr><td><a href='$php_self?func=createtype&uid=$uid'>創(chuàng)建分類(lèi)</a></td></tr>";
echo "<tr><td>$type</td></tr>";
$result=mysql_query("select * from type where uid=$uid");
$num=mysql_numrows($result);
if (!empty($num)) {
for ($i=0;$i<$num;$i++) {
$id=mysql_result($result,$i,"id");
$type=mysql_result($result,$i,"type");
echo "<tr><td>";
echo "<a href='$php_self?func=showtype&uid=$id'>$type</a>";
echo "</td></tr>";
}
}
echo "</table>";
endif; /* end showtype */
.....
.....
?>
以上的程序便完成了無(wú)限分類(lèi)的基本創(chuàng)建,存儲(chǔ)和顯示,接著就是完善分類(lèi)創(chuàng)建功能的各個(gè)部分了.
您可能感興趣的文章:
- php無(wú)限分類(lèi)且支持輸出樹(shù)狀圖的詳細(xì)介紹
- 利用php遞歸實(shí)現(xiàn)無(wú)限分類(lèi) 格式化數(shù)組的詳解
- PHP無(wú)限分類(lèi)(樹(shù)形類(lèi))的深入分析
- 基于php無(wú)限分類(lèi)的深入理解
- 比較簡(jiǎn)單實(shí)用的PHP無(wú)限分類(lèi)源碼分享(思路不錯(cuò))
- PHP 無(wú)限分類(lèi)三種方式 非函數(shù)的遞歸調(diào)用!
- PHP無(wú)限分類(lèi)代碼,支持?jǐn)?shù)組格式化、直接輸出菜單兩種方式
- 一個(gè)很簡(jiǎn)單的無(wú)限分類(lèi)樹(shù)實(shí)現(xiàn)代碼
- php遞歸實(shí)現(xiàn)無(wú)限分類(lèi)生成下拉列表的函數(shù)
- php用數(shù)組返回?zé)o限分類(lèi)的列表數(shù)據(jù)的代碼
- 刪除無(wú)限分類(lèi)并同時(shí)刪除它下面的所有子分類(lèi)的方法
- php 無(wú)限分類(lèi)的樹(shù)類(lèi)代碼
- 自己前幾天寫(xiě)的無(wú)限分類(lèi)類(lèi)
- 帖幾個(gè)PHP的無(wú)限分類(lèi)實(shí)現(xiàn)想法~
- PHP無(wú)限分類(lèi)的類(lèi)
- 解析thinkphp的左右值無(wú)限分類(lèi)
相關(guān)文章
SESSION信息保存在哪個(gè)文件目錄下以及能夠用來(lái)保存什么類(lèi)型的數(shù)據(jù)
session默認(rèn)是保存到c:\windows\temp目錄下,但是通過(guò)修改php.ini中的session.save_path值可以改變session的保存路徑2012-06-06
PHP的SQL注入實(shí)現(xiàn)(測(cè)試代碼安全不錯(cuò))
看黑客是如何入侵的,我們寫(xiě)編寫(xiě)php代碼的過(guò)程中,最好自己先測(cè)試效果。2011-02-02
php + nginx項(xiàng)目中的權(quán)限詳解
這篇文章主要給大家介紹了關(guān)于php + nginx項(xiàng)目中權(quán)限的相關(guān)資料,文章介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
PHP正則匹配日期和時(shí)間(時(shí)間戳轉(zhuǎn)換)的實(shí)例代碼
本文介紹下,用php實(shí)現(xiàn)正則匹配日期與時(shí)間,并進(jìn)行時(shí)間戳轉(zhuǎn)換的例子,有需要的朋友,參考下吧2016-12-12
PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
解析使用substr截取UTF-8中文字符串出現(xiàn)亂碼的問(wèn)題
本篇文章是對(duì)使用substr截取UTF-8中文字符串出現(xiàn)亂碼的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

