前言:前一篇溫習了網站開發需要掌握的基礎知識,這一篇重點梳理一下各個功能模塊的【詳細設計與實現】。項目github地址:https://github.com/66Web/php_book_store,歡迎Star。
一、網站登錄注冊模塊的原理及實現
1、用戶登錄注冊
用戶在使用系統核心功能之前,必須要先注冊一個賬號。注冊以及登錄模塊的功能主要是實現驗證用戶信息的有效性。注冊時對信息的正確性進行檢驗,檢測信息格式是否合法、用戶是否已存在,在信息填寫不完整時,“注冊”按鈕是不可用的。登錄時,將用戶輸入的信息與數據庫相應數據進行比對,若比對成功,則通過驗證。
注冊功能流程圖如圖1所示。登錄功能流程圖如圖2所示。
![]() |
|
| 注冊功能流程圖 | 登錄功能流程圖 |
考慮到保護會員的隱私,保證密碼的安全性,在用戶注冊時直接對密碼進行MD5加密,通過MD5加密后的同一數據唯一,且不能夠被解密,因此即使是管理員也不能查看到會員的密碼。用戶登錄的時候,把用戶輸入的密碼也用MD5進行加密處理,然后再去和數據庫中保存的MD5值進行比對查詢,從而判斷密碼輸入是否正確。
登錄、注冊成功后,啟動session會話,將用戶ID和用戶名存入數組$_session中,供用戶再次以此身份對Web服務器提供要求時做確認,然后跳轉頁面,完成登錄注冊步驟。用戶退出登錄后,調用PHP中的unset()內置函數,清空session中的用戶信息,然后跳轉回登錄界面,等待用戶再次登錄。
2、用戶訪問權限
考慮到后台管理系統的安全問題,除了設置只有擁有管理員權限的用戶才能進入到管理系統之外,還要避免后台管理系統文件地址路徑的泄露。如果某個人知道了管理系統中某個文件的名稱和位置,那這個人就可以直接輸入該文件的路徑,打開該文件,進而訪問到管理系統中其它文件的內容。為了避免此情況的發生,給每個頁面都設置訪問權限,在管理員正確登錄管理系統之后,為他注冊一個新的session變量$_SESSION['admin_userid'],並在其它頁面中應用這個session變量進行判斷,只有登錄者的session變量與數據庫中的管理員ID相同時才允許其訪問該頁,否則將不允許訪問。
前台游客用戶和會員用戶的訪問權限也不同,為了確保會員個人信息的安全,只有會員自己可以看到個人中心信息、書架信息以及購物車中的聯系方式。在用戶正確登錄之后,為他注冊一個新的session變量$_SESSION['home_userid'],並在有會員個人信息的頁面中應用這個session變量進行判斷,只有登錄者的session變量與數據庫中的用戶ID相同時才允許其訪問該頁,否則將不允許訪問。
二、二手書顯示模塊的原理及實現
考慮到二手書的類目眾多,為了方便用戶選擇書籍,本系統在前台為用戶提供了二手書的分類分頁展示,用戶可直接使用關鍵詞搜索或高級搜索檢索到自己想找的圖書。
1、二手書分類顯示
網站前台顯示的二手書信息從數據庫中二手書信息表查找,不同欄目通過判斷二手書信息表中不同字段條件進行限制、查找和輸出。發布的二手書只有上架才可以在前台顯示,即上架字段shelf值為1。
首頁推薦圖書欄只顯示是否推薦字段recommend值為1的二手書,最新推薦通過對二手書編號字段id倒敘排列。熱賣圖書欄按銷售量字段sales正序排列。
用戶進入圖書分類頁面時,圖書會按照二手書類別編號字段class_id的值分欄顯示,欄目名稱根據class_id從二手書類別表中查找對應類別名稱顯示。
2、二手書搜索
在網站首頁有一個搜索框,用戶輸入要搜索的二手書關鍵字,便可以查找出相關的二手書,方便用戶快速找到想要的二手書。如果用戶知道所找二手書的書名和作者,還可以在高級搜索處精確查找。
本站的二手書搜索,通過like關鍵字執行SQL模糊查詢語句,用兩個通配符%表示搜索關鍵字前后兩個位置處的0個或多個字符。使用高級搜索時,用戶可以輸入兩個查詢條件,兩個條件同時滿足時才能查詢出結果。因為用戶輸入搜索條件數量不固定,所以利用數組和PHP內置函數explode()構建一個動態的SQL語句。
三、二手書購物車模塊的原理及實現
用戶想要購買指定的二手書,必須要先把二手書加入購物車,通過購物車存儲所有要購買的二手書,確定數量和聯系方式后,提交訂單,完成訂購。在購物車中,用戶可以修改購物車中的二手書數量、移除購物車中的某本二手書、清空購物車、查看購買二手書的總價格等。
因為購物車中的二手書最終用戶不一定購買,為了避免浪費數據庫服務器的硬盤空間,將購物車信息臨時存儲到session變量中,當用戶提交訂單后,購物車中的信息會存入數據庫的訂單表,考慮到在不關閉瀏覽器的情況下登錄不同賬號的為同一用戶,設置保留前一登錄賬號的購物車信息,如果用戶沒有提交訂單,購物車中的二手書會隨着用戶瀏覽器的關閉而清空。
二手書購物車系統的功能流程圖如圖所示:
![]() |
| 購物車功能流程圖 |
1、添加二手書至購物車
用戶單擊“加入購物車”按鈕時,將二手書編號傳給添加二手書至購物車頁面(cart/insert.php),頁面接收傳遞過來的二手書編號,根據二手書編號查詢出二手書相關信息,並保存到一個二維數組中,在將這個二維數組保存到session中,從而保證用戶購買的二手書信息在不同頁面存在。為二維數組中的每一個二手書元素新增一個數量變量,第一次購買時默認為1,如果用戶重復購買,則在原購買數量基礎上加1。
用戶查看購物車時,從session中取出二手書信息的數據,輸出到網頁顯示。
2、修改二手書數量
當用戶單擊按鈕“+”或“-”時,將二手書編號傳給增加或減少二手書數量頁面(cart/add.php,cart/cut.php),頁面接收傳遞過來的二手書編號,根據二手書編號在session中修改對應二手書元素的數量變量。判斷數量變量的值,如果值小於1,則設置值等於1,如果大於對應二手書的庫存量,則設置值等於庫存量。數量變量值改變之后,重定向至購物車頁面,等待再次操作。
當用戶單擊“清空購物車”超鏈接時,清空購物車頁面(clear.php)為購物車的session變量賦值為空數組,銷毀session變量。
3、生成訂單
當用戶單擊“提交訂單”按鈕時,將聯系方式編號、支付方式編號以及郵寄方式編號傳給提交訂單頁面(cart/commit.php),頁面接收傳遞過來的編號,使用時間戳和隨機數隨機生成一個唯一的訂單號,通過session變量獲取當前用戶的id,遍歷session變量中的二手書元素數組獲得購物車中所有的二手書信息,執行SQL插入語句,將二手書信息插入到訂單信息表中。如果插入語句執行成功,接着執行兩次SQL更新語句,將對應二手書編號的二手書信息表中的庫存量減去數量變量的值,銷售量加上數量變量的值。最后,清空購物車,提示訂單號信息,重定向到個人中心的查看訂單頁面,完成購物車的步驟。
四、會員個人中心的設計要點
為了方便個體商戶的經營管理,提升用戶體驗,網站會員個人中心提供了個人信息修改、二手書發布與管理、聯系方式管理以及用戶訂單、客戶訂單管理這四個功能。
1、二手書發布與管理
二手的發布與管理,主要實現包括二手書查看、添加二手書、修改二手書和刪除二手書的功能。
實現二手書添加功能時通過創建兩個頁面,添加二手書頁面(salesadd.php)和保存添加二手書頁面(insert.php),添加二手書頁面負責收集二手書信息,保存添加二手書頁面負責接收二手書信息並執行insert語句將信息添加到數據庫二手書信息表(book)。
保存添加二手書頁面在接收上傳圖片時將圖片上傳到服務器的指定文件夾(uploads)中,同時調用公共函數頁面(function.php)中的圖片縮放函數thumb(),將圖片縮放為指定大小的縮略圖,把縮略圖保存到同一文件夾中,在數據庫中保存原圖和縮略圖的路徑。
添加二手書界面如圖所示:
![]() |
| 添加二手書界面 |
單擊“查看我的圖書”超鏈接,跳轉到二手書編輯管理頁面(salelist.php)。在二手書編輯管理頁面可以查看二手書、修改二手書和刪除二手書。二手書編輯管理頁面通過select查詢將二手書信息從數據庫二手書信息表中查找出來,因為這里時會員用戶個人發布的二手書管理,所以,通過session變量獲取到當前用戶的用戶id,只查找二手書信息表中供貨商字段supplier值等於用戶id值的二手書,顯示到頁面中。
用戶單擊二手書編輯管理頁面中的“刪除”超鏈接時,將要刪除的二手書的編號和圖片傳給二手書刪除頁面(delete.php),二手書刪除頁面根據二手書編號執行delete語句將二手書刪除,同時根據獲得的二手書圖片,得到原圖和縮略圖的文件地址,使用unlink()函數刪除服務器文件夾中的二手書原圖和縮略圖。
用戶單擊二手書編輯管理頁面中的“修改”超鏈接時,將要修改的二手書的編號傳給修改二手書頁面(change.php),修改二手書頁面根據接收的二手書編號在頁面中顯示出二手書的相關信息。當用戶修改完二手書信息后,單擊“修改”按鈕,將二手書新的信息提交給保存二手書修改頁面(update.php),保存二手書修改頁面通過執行update語句完成二手書的修改。
二手書發布與管理的功能運行圖如圖所示。
|
| 二手書發布與管理功能運行圖 |
2、訂單管理與評論的實現
因為用戶同時可以是買家,也可以是賣家,所以訂單管理分為兩個部分:用戶訂單管理和客戶訂單管理。
用戶訂單管理,主要實現功能包括查看訂單、確認訂單、開通評論功能和撰寫評論。用戶在購物車中點擊“提交訂單”按鈕之后,或在個人中心點擊“查看我的訂單”超鏈接后,頁面會跳轉到用戶訂單編輯管理頁面(myorder.php),頁面通過select查詢,並使用group by根據訂單號分組聚合地將用戶同一訂單中的二手書信息從數據庫訂單表(indent)和二手書信息表(book)中查找出來,顯示到頁面上。
當用戶點擊“訂單號”超鏈接時,將要查看的訂單的訂單號傳遞給用戶訂單詳情頁面(mycode,php),頁面根據傳過來的訂單號,執行select語句,從數據庫訂單表(indent)和二手書信息表(book)中查找到與對應訂單號相同的所有的二手書信息,顯示到頁面中。
當訂單為未確認狀態時,對應訂單的訂單詳情頁中的“評論”超鏈接禁用,並且用戶訂單編輯管理頁面中顯示“確認”超鏈接,用戶單擊時,將要確認的訂單的訂單號傳遞給確認訂單頁面(confirm.php),頁面設置確認變量值默認為1,然后根據傳過來的訂單號,執行update語句將數據庫中訂單表(indent)對應訂單的確認字段confirm賦值為確認變量值,最后重定向到用戶訂單詳情頁(mycode,php)中,等待用戶對已確認的訂單二手書進行評論,此時訂單詳情頁中的“評論”超鏈接啟用。
當訂單為確認狀態時,對應訂單的訂單詳情頁中的“評論”超鏈接啟用,並且用戶訂單編輯管理頁面中會開通評論功能,顯示“評論”超鏈接,用戶單擊時直接跳轉到用戶訂單詳情頁(mycode,php)中等待用戶對訂單二手書進行評論。
查看用戶訂單界面如圖所示:
![]() |
| 查看用戶訂單界面 |
客戶訂單管理,主要實現功能包括查看訂單、修改訂單和刪除訂單。用戶在個人中心點擊“查看客戶訂單”超鏈接后,頁面會跳轉到客戶訂單編輯管理頁面(gukeorder.php),頁面首先通過session變量獲得當前登錄用戶的id,然后執行select語句,從數據庫訂單表(indent)和二手書信息表(book)中,查找到供貨商字段supplier值等於用戶id值的二手書信息,使用group by根據訂單號分組聚合地將查找出來的客戶同一訂單中的二手書信息,顯示到頁面上。
客戶訂單的修改和刪除與二手書管理中的修改和刪除原理相同,這里不做重復。
查看客戶訂單界面如圖所示:
![]() |
| 查看客戶訂單界面 |
五、后台管理系統的設計要點
本站開發后台管理系統供管理員訪問和操作數據庫。后台管理系統主要提供管理員管理、用戶管理、二手書類別管理、二手書管理、評論管理、訂單狀態管理、訂單管理、廣告管理這八個功能。
后台管理系統采用模塊化開發的方式,每一個管理模塊的增、刪、改、查分別放在一個以模塊名命名的文件夾中。因為大部分模塊的實現原理與會員個人中心的二手書管理相同,所以這里不做重復。
二手書管理模塊與會員個人中心的二手書管理有一些不同。因為會員在個人中心只能管理自己發布的二手書,而管理員要管理本站發布的全部二手書,其中包括用戶個體商戶發布的二手書和本站官方發布的二手書。因此在二手書管理模塊中設置了分類查看,具體分為:查看本站供書、查看用戶供書、查看上架圖書和查看下架圖書這四類。
查看本站供書頁面(index.php)和查看用戶供書頁面(useroffer.php)通過判斷二手書信息表中供貨商字段supplier的值進行select查詢,如果值為0,在本站供書頁面顯示,否則在用戶供書頁面顯示。查看上架圖書頁面(putaway.php)和查看下架圖書頁面(soldout.php)通過判斷二手書信息表中是否上架字段shelf的值進行select查詢,如果值為1,在上架圖書頁面顯示,否則在下架圖書頁面顯示。
查看用戶供書界面如圖所示:
![]() |
| 查看用戶供書界面 |
六、部分前端交互效果實現要點
為了優化網站的用戶體驗,結合用戶交互存在的一些不足,在網站前端實現了包括:星空粒子移動、網頁異步通訊和分頁顯示這三個功能。
1、星空粒子移動功能
網站引導頁中,使用JavaScript編寫的WebGL第三方庫Three.js實現星空粒子移動效果。當用戶加載引導頁時,頁面通過定義的makeParticle()方法隨機生成粒子,其中使用THREE.Particle構建粒子,使用THREE.ParticleCanvasMaterial生成canvas材質,添加鼠標監聽,定義particleRender()方法生成粒子渲染器渲染canvas繪制的圓形粒子。
粒子移動的實現是主要通過調用函數updateParticles()遍歷每個粒子,設置粒子在Z軸方向上向前移動的速度依賴於鼠標在平面Y軸上的距離。當用戶移動鼠標時,調用函數onMouseMove()跟蹤用戶鼠標的位置mouseX和mouseY,實現星空粒子的移動速度隨着用戶鼠標在Y軸上距離的增大而減小直至停止的3D效果。
相關代碼如圖所示。
![]() |
| 星空粒子移動功能的代碼實現 |
2、網頁異步通訊功能
在登錄注冊時,為了減少用戶的等待時間,需要實現在不刷新頁面的情況下,客戶端與服務端異步通訊。功能主要通過使用AJAX技術實現,下面以登錄時的網頁異步通訊為例:
![]() |
| 網頁異步通訊功能的代碼實現 |
3、分頁顯示功能
網站有很多地方用到了分頁顯示的功能,如二手書分類分頁顯示、二手書搜索結果分頁顯示、個人中心信息分頁顯示。
用戶進入頁面時,首先執行查找的SQL語句找到所有符合條件的記錄,然后設置每頁顯示的條數,通過SQL語句中的Limit關鍵字限制顯示記錄的條數,默認從第一條開始顯示。如果查找到的記錄總條數與規定的每頁顯示條數相除余數為0,當前頁頁碼顯示為相除結果,否則顯示為相除結果值加1。如果沒有查找到記錄,或查找到的記錄總條數小於規定的每頁顯示條數,當前頁頁碼默認顯示為1。
注:轉載請注明出處









