PHP网站设计思路
本文是對《PHP and MySQL Web Development》 第5版27章中項目的總結(jié)。
1.分析所需功能
列出主要功能模塊:登錄、注冊、忘記密碼、重設密碼、登出、書簽瀏覽、書簽增加、書簽刪除、書簽推薦
確定模塊之間的先后轉(zhuǎn)移關系:
2.分解所需模塊
將模塊的邏輯和內(nèi)容分開:
- 內(nèi)容寫在function_form.php中
- 邏輯寫在function.php中
設置專門文件用于:
- 連接數(shù)據(jù)庫
- 輸入數(shù)據(jù)檢驗
- 用戶身份驗證
- 瀏覽器輸出
該項目所有文件可以分為以下幾類:
1.數(shù)據(jù)定義文件:bookmarks.sql
用于建立所需數(shù)據(jù)庫和數(shù)據(jù)表。
2.數(shù)據(jù)庫連接文件:db_fns.php
用于連接數(shù)據(jù)庫。保存著數(shù)據(jù)庫用戶的用戶名和密碼。
3.輸入數(shù)據(jù)檢驗文件:user_auth_fns.php
用于檢驗輸入數(shù)據(jù)。檢驗POST變量的值是否為空,email輸入是否合法。
4.用戶身份驗證文件:user_auth_fns.php
用于驗證用戶是否能夠注冊、登錄、修改密碼、重設密碼,以及用戶是否已經(jīng)登錄。
由多個相應功能的函數(shù)組成,函數(shù)接收參數(shù),連接數(shù)據(jù)庫進行查詢,返回查詢結(jié)果或拋出異常。
5.書簽操作文件:url_fns.php
用于對書簽url進行查詢、增加、刪除與推薦。功能實現(xiàn)方法與上一類相似。
6.瀏覽器輸出文件:output_fns.php
用于顯示所有種類的瀏覽器輸出:
網(wǎng)頁名稱、頁內(nèi)標題、各種表單、頁內(nèi)URL、網(wǎng)站信息、用戶菜單、頁尾。
每個函數(shù)實現(xiàn)一個種類部位的瀏覽器輸出,函數(shù)根據(jù)需要可以接收參數(shù),在HTML中插入php顯示,也可以通過php輸出HTML元素。
7.包含常被引用文件集的文件:bookmark_fns.php
8.9.表單文件及對應的邏輯處理文件
| 邏輯處理文件 | member.php | change_passwd.php | register_new.php | forgot_passwd.php | add_bms.php |
其它邏輯處理文件:
delete_bms.php、recommend.php
logout.php
表單文件的特點:
1.包含對bookmark_fns.php中output_fns.php文件中函數(shù)的引用(即一些瀏覽器輸出函數(shù))
2.對于登錄后才能填寫的表單,包含會話開始函數(shù)session_start()和檢驗用戶是否已注冊會話函數(shù)check_valid_user()。
邏輯處理文件的特點: 處理表單提交的數(shù)據(jù)
1.包含對bookmark_fns.php中output_fns.php文件中函數(shù)的引用(即一些瀏覽器輸出函數(shù))
2.包含會話開始函數(shù)session_start()。
3.接收POST變量的信息。
4.對表單是否填滿、輸入是否合法進行判斷。
5.繼而調(diào)用用戶身份驗證函數(shù),如果驗證通過,則顯示相關信息。
6.捕捉所有拋出的異常,合理的顯示在瀏覽器上。
3.主要模塊關鍵思路
1.數(shù)據(jù)庫連接模塊:
連接數(shù)據(jù)庫,返回mysqli對象。
function db_connect() {$db = new mysqli('localhost', 'username', 'password', 'database');if (!$db) {throw new Exception("Could not connect to database server"); }else {return $db;} }2.輸入數(shù)據(jù)檢驗模塊:
//檢驗每個變量都有一個值 function filled_out($form_vars) {foreach ($form_vars as $key => $value) {if ((!isset($key)) || ($value == '')) {return false;} } return true; } //檢驗email function valid_email($address) {if(preg_match('/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/', $address)) {return true;} else {return false;} }3.用戶身份驗證模塊:
先連接數(shù)據(jù)庫,然后執(zhí)行查詢語句(最好使用參數(shù)化查詢方法),根據(jù)查詢結(jié)果返回相應的值。
function login($username, $password) {$conn = db_connect();$results = $conn -> query("select * from user where username = '".$username."' and passwd = sha1('".$password."')");if (!$results) {throw new Exception('Could not log you in.');}if ($results -> num_rows > 0) {return true;} else {throw new Exception('Could not log you in.');} }4.登入登出模塊:
//登入成功,設置session $_SESSION['valid_user'] = $username; //登出,先保存用戶名,再注銷,通過判斷用戶名是否存在給出不同提示 $old_user = $_SESSION['valid_user']; unset($_SESSION['valid_user']); $result_dest = session_destroy(); if (!empty($old_user)) {if ($result_dest) {echo 'Logged out.<br />';}else {echo 'Could not log you out.<br />';} }else {echo 'You are not logged in ,so have not been logged out.<br />'; }5.url推薦模塊的sql語句:
如果兩個用戶收藏了相同的URL,那么可能他們有相似的愛好,就可以把其中一個用戶收藏的其它URL推薦給另一個用戶。
bookmark數(shù)據(jù)表一共有兩列,bm_URL和username。
$query = "select bm_URLfrom bookmarkwhere username in(select distinct(b2.username)from bookmark b1, bookmark b2where b1.bm_URL = b2.bm_URLand b1.username != b2.usernameand b1.username = '".$valid_user."')and bm_URL not in(select bm_URLfrom bookmarkwhere b1.username = '".$valid_user."')group by bm_URLhaving count(bm_URL)>".$popularity;總結(jié)
- 上一篇: 前端学习(1651):前端系列实战课程之
- 下一篇: 精选PHP毕业设计12套——源码+论文完