Linux操作系統(tǒng)中用PHP構(gòu)建網(wǎng)站詳解
如何架設(shè)一個新聞系統(tǒng)呢?一個完整的新聞系統(tǒng)不僅僅只包括供瀏覽的新聞界面,它還包括許多功能的控制和后臺管理的強勁功能。那么這些功能內(nèi)的子功能又如何調(diào)度分配呢?下面就來介紹一下各功能的調(diào)配控制。新聞系統(tǒng)的實現(xiàn)是簡單的,但也可以說是非常復(fù)雜的。
新聞系統(tǒng)可分為三大部分:管理員登入系統(tǒng),新聞管理系統(tǒng),用戶瀏覽系統(tǒng)。整個過程是簡單的: 1、管理人員發(fā)布新聞-->數(shù)據(jù)庫-->用戶瀏覽新聞
2、發(fā)現(xiàn)問題-->登入管理系統(tǒng)-->編輯修改新聞
以上流程看似簡單,但實現(xiàn)起來卻并不是那么簡單,這是個系統(tǒng)的開發(fā),遠比留言版的實現(xiàn)要復(fù)雜,但基本運作原理又與留言版相同。在新聞發(fā)布系統(tǒng)的重中之重又在于數(shù)據(jù)庫的規(guī)劃和管理系統(tǒng)的實現(xiàn)。
現(xiàn)在來新聞都有些什么內(nèi)容:新聞分類,信息本體。在數(shù)據(jù)庫包函這兩項內(nèi)容于一個數(shù)據(jù)表內(nèi)是可以實現(xiàn)的,但不經(jīng)濟,因此我們可用兩個數(shù)據(jù)表來分別存儲內(nèi)容,一個專門存儲新聞的分類,而另一個用來存儲信息的本體。如何調(diào)用實現(xiàn)雙表內(nèi)容的共享呢?運用表關(guān)聯(lián)來實現(xiàn)這個問題(這里并不介紹這方面的知識,讀者可自行參考數(shù)據(jù)庫相關(guān)的知識內(nèi)容,靠自己努力得來的知識最有價值,不是嗎?)
下面要介紹的是管理功能的實現(xiàn):
1、首先是新聞的發(fā)布
這是一系列的提交表單共同組成的,而這里又分兩類,創(chuàng)建新聞分類和發(fā)布新聞;創(chuàng)建完新聞分類,然后再在各個分類中發(fā)布相關(guān)的新聞,很簡單嘛!并不是這樣的,想想所有的信息本體全都集中在一個數(shù)據(jù)表里,如何區(qū)分信息的分類,上面提到的表關(guān)聯(lián)在這就非常重要了,當(dāng)然也可不用這種方法,為每個分類創(chuàng)建一個獨立的表也能解決問題,可是這樣劃算嗎?維護性和可擴展性有如何呢?
新聞分類和信息本體的相關(guān)調(diào)用引起了麻煩,對了,解決之道就是活用表關(guān)聯(lián)。
2、編輯,修改,刪除的問題
這是 php+mysql 知識的基本運用,實現(xiàn)這些功能并無困難,這里不作過多的介紹,只是要注意的是更改或刪除一個分類時,該如何處理該分類下的信息本體呢?由于使用表關(guān)聯(lián),處理這些功能如同是在一個表內(nèi)處理一般。
3、多工處理
但許多人在同時編輯一條新聞時會出現(xiàn)什么情況呢?情況就數(shù)據(jù)庫只會存儲最后編輯的內(nèi)容,這種情況發(fā)生將意味著前面修改的人的辛苦白費了,多功處理就是解決這個問題的,采取的方法是先入為主的,即先進入編輯的擁有編輯權(quán)限,而后進入的只擁有瀏覽的權(quán)限直到編輯完成為止。這個功能很象 linux 的權(quán)限控制,不是嗎?
完成這個功能可用幾種方法:1。用 cookie 來控制,2。在表內(nèi)增加權(quán)控字段。當(dāng)然用 cookie 更加簡單些,cookie 實現(xiàn)的方法和流程是這樣的:
當(dāng)有管理員進入編輯,設(shè)置 cookie ,編輯功能的程序段則判斷 cookie 值,為空允許編輯,非空則拒絕編輯,退出編輯時則將 cookie 清空,如此循環(huán)往復(fù);多工功能是個有效的功能,至少能減少時間上和人力上的浪費。
新聞瀏覽功能的實現(xiàn)很簡單,加上翻頁功能(本站已經(jīng)介紹過了),強大的新聞系統(tǒng)基本完成,似乎少了個很重要的功能,不錯就是搜索引擎。能夠擁有強大的搜索引擎是每個網(wǎng)站的心愿,而一個強大的搜索引擎的制作又是相當(dāng)復(fù)雜和困難的,它涉及到效率,準(zhǔn)確性和速度等諸多方面。
這里介紹的搜索引擎不會涉及到這么深的研究,只是針對特定的內(nèi)容進行精確的查詢。一個功能復(fù)雜而強大的搜索引擎要用到很多的程序和數(shù)據(jù)庫技巧,我們就先從簡單的搜索引擎開始介紹。搜索引擎的工作狀況是怎樣的呢?它接收給出的關(guān)鍵字,然后在給出的范圍內(nèi)進行搜索,然后將搜索的結(jié)果返回。 給出的關(guān)鍵字可能在信息內(nèi)容的任何位置,引擎又是如何進行查找的呢?在這要用到如下的數(shù)據(jù)庫語句:
; select * from table where (name like '%'.$keyword.'%');
name 是查找的具體位置,一般放字段名,like '%'.$keyword。'%' 是模式匹配,就是在內(nèi)容中查找有無 $keyword。看個例子:
在數(shù)據(jù)表 news 查找包含關(guān)鍵字 good 的所有標(biāo)題:
; select * from news where (title like '%good%');
這是個精確查找,能夠在數(shù)據(jù)庫內(nèi)找出所有帶 good 的 title 出來,還有一種模糊查找:
; select * from news where (title like '%good');
這樣也可查找出結(jié)果。
假設(shè) news 里包含 title(標(biāo)題),message(內(nèi)容),user(用戶) 等的字段,上面的查找范圍就太狹窄了,因為只對 title 進行了查找,要對其它內(nèi)容進行查找又不想操作太復(fù)雜該如何處理呢?
我們注意到在程序里任何變動的值都用變量來進行處理,在這這個方法一樣行得通,可將想要搜索的范圍作為變量進行傳送,這樣就有如下的數(shù)據(jù)庫語法了:
; mysql_query('select * from news where ($name like '%'.$keyword。'%'));
$name 存放的就是傳送過來的字段變量的值,而這種可變的值通過 html 的 select 下拉提交表單來完成。如果想要將搜索結(jié)果限制在一定的時間范圍內(nèi)又該如何實現(xiàn)呢?如想要查找 5 天之內(nèi)的信息。還記得曾在 cookie 介紹中用到的數(shù)據(jù)庫語法嗎?
對了,該聯(lián)合的語法如下:
; mysql_query('select * from news where ($name like; '%'.$keyword。'%') and time>date_sub('$time',interval 5 day)')
其中 $time 為查找的現(xiàn)在時間:$time=date('Y-m-d H:i:s'); time 是數(shù)據(jù)庫存儲信息時間的字段。現(xiàn)在將 $old 來代替 5:
; mysql_query('select * from news where ($name like; '%'.$keyword。'%') and time>date_sub('$time',interval $old day)')
同樣 $old 的值通過 select 提交表單將限定的不同時間提交過來,便完成了這個頗為強大的搜索引擎。一些更為強大的搜索引擎需要程序技巧上的配合,讀者可通過以上的原理自行擴展試驗。
