PHP網站設計思路

本文是對《PHP and MySQL Web Development》 第5版27章中項目的總結。

1.分析所需功能

列出主要功能模塊:登錄、註冊、忘記密碼、重設密碼、登出、書籤瀏覽、書籤增加、書籤刪除、書籤推薦

確定模塊之間的先後轉移關係:

在這裏插入圖片描述

2.分解所需模塊

將模塊的邏輯和內容分開:

  • 內容寫在function_form.php中
  • 邏輯寫在function.php中

設置專門文件用於:

  • 連接數據庫
  • 輸入數據檢驗
  • 用戶身份驗證
  • 瀏覽器輸出

該項目所有文件可以分爲以下幾類:

1.數據定義文件:bookmarks.sql

用於建立所需數據庫和數據表。

2.數據庫連接文件:db_fns.php

用於連接數據庫。保存着數據庫用戶的用戶名和密碼。

3.輸入數據檢驗文件:user_auth_fns.php

用於檢驗輸入數據。檢驗POST變量的值是否爲空,email輸入是否合法。

4.用戶身份驗證文件:user_auth_fns.php

用於驗證用戶是否能夠註冊、登錄、修改密碼、重設密碼,以及用戶是否已經登錄。

由多個相應功能的函數組成,函數接收參數,連接數據庫進行查詢,返回查詢結果或拋出異常。

5.書籤操作文件:url_fns.php

用於對書籤url進行查詢、增加、刪除與推薦。功能實現方法與上一類相似。

6.瀏覽器輸出文件:output_fns.php

用於顯示所有種類的瀏覽器輸出:

網頁名稱、頁內標題、各種表單、頁內URL、網站信息、用戶菜單、頁尾。

每個函數實現一個種類部位的瀏覽器輸出,函數根據需要可以接收參數,在HTML中插入php顯示,也可以通過php輸出HTML元素。

7.包含常被引用文件集的文件:bookmark_fns.php

8.9.表單文件及對應的邏輯處理文件

表單文件 login.php change_passwd_form.php register_form.php forgot_form.php add_bm_form.php
邏輯處理文件 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文件中函數的引用(即一些瀏覽器輸出函數)

2.對於登錄後才能填寫的表單,包含會話開始函數session_start()和檢驗用戶是否已註冊會話函數check_valid_user()

邏輯處理文件的特點: 處理表單提交的數據

1.包含對bookmark_fns.php中output_fns.php文件中函數的引用(即一些瀏覽器輸出函數)

2.包含會話開始函數session_start()

3.接收POST變量的信息。

4.對錶單是否填滿、輸入是否合法進行判斷。

5.繼而調用用戶身份驗證函數,如果驗證通過,則顯示相關信息。

6.捕捉所有拋出的異常,合理的顯示在瀏覽器上。

3.主要模塊關鍵思路

1.數據庫連接模塊:

連接數據庫,返回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.輸入數據檢驗模塊:

//檢驗每個變量都有一個值
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.用戶身份驗證模塊:

先連接數據庫,然後執行查詢語句(最好使用參數化查詢方法),根據查詢結果返回相應的值。

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數據表一共有兩列,bm_URL和username。

$query = "select bm_URL
			from bookmark
			where username in
				(select distinct(b2.username)
					from bookmark b1, bookmark b2
					where b1.bm_URL = b2.bm_URL
						and b1.username != b2.username
						and b1.username = '".$valid_user."')
			and bm_URL not in
				(select bm_URL
					from bookmark
					where b1.username = '".$valid_user."')
			group by bm_URL
			having count(bm_URL)>".$popularity;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章