可以將部落格想成「只有一人」能新增文章的留言版。
Step1. 規劃產品路由與功能
頁面
- 部落格首頁
index.php - 註冊頁面
register.php - 登入頁面
login.php - 導覽列
navbar.php:獨立出 navbar,可避免重複撰寫 - 管理後台頁面
admin.php - 新增文章頁面
create_post.php - 新增文章頁面
update_post.php - 瀏覽全文頁面
post.php
功能
- 常用函式
utils.php:getUserFromUsername()、escape()
使用者相關
- 註冊功能
handle_register.php - 登入功能
handle_login.php - 登出功能
logout.php - 驗證權限功能
check_permission.php
文章相關
- 新增文章功能
handle_create_post.php - 編輯文章功能
handle_update_post.php - 刪除文章功能
handle_delete_post.php
Step2. 規劃資料結構:建置資料庫
blog_users:使用者相關資料
- id
- role
- username
- nickname
- password
- created_at
blog_posts:文章相關資料
- id
- username
- title
- content
- is_deleted
- created_at
Step3. 實作部落格
PHP 相關語法
var_dump():印出變數的相關訊息strpos(): 查找該字串首次出現的位置<?php // 獲得回傳的網址列 $url = $_SERVER['REQUEST_URI']; // strpos(): 查找該字串首次出現的位置 $isAdminPage = (strpos($url, 'admin.php') !== false); $isLoginPage = (strpos($url, 'login.php') !== false); ?>substr():取得部分字串,可設定字串長度,共有三個參數:$strting:原始的字串$start:開始擷取的位置$length:要擷取的字串長度
mb_substr():和substr()用法相同,但多了第四個參數:$encoding:判斷的編碼,通常使用"UTF-8"substr($string, $start, $length); mb_substr($string, $start, $length, $encoding);
intval(): 將字串轉換為數字$id = intval($_GET['id']);$_SERVER['HTTP_REFERER']:獲取前一頁面的 URL 地址<!-- 透過 POST 來獲得前一頁面的 URL --> <form action="handle_update_post.php" method="POST"> <input type="hidden" name="page" value="<?php echo $_SERVER['HTTP_REFERER'] ?>"> </form>
include、require、include_once、require_once 的差別
include 和 require 達成的效果幾乎相同,均為「引入」外部檔案,差別在於「執行原理」以及「報錯程度」。
include
- 執行到
include()時,每次皆會讀取檔案 - 常用於流程控制,例如:條件判斷、迴圈
- 適合引入動態的程式碼,會在用到時加載
- 執行時,若引入的檔案發生錯誤,會顯示警告(Warning),但不會立刻停止程式
require
- 執行到
require()時,只會讀取一次檔案 - 常放在程式開頭,檔案引入後 PHP 會將網頁重新編譯
- 適合引入靜態的程式碼,會在一開始就加載
- 執行時,若引入的檔案發生錯誤,會直接報錯(Fatal error)並終止程式
後面若加上 _once,代表「只會引入一次」。PHP 會檢測檔案是否有重複引入,避免重複執行浪費效能,因此較推薦使用。
include_once
- 和
include用法基本相同 - 若發生錯誤,
include_once不會停止程式的執行,只會丟出警告訊息 - 避免重複引入
- 以引入 navbar 為例:
<!-- 把 header 獨立出來,就不需每個檔案都重複撰寫 -->
<?php include_once('navbar.php')?>
require_once
- 和
require用法基本相同 - 若發生錯誤,
require_once會立刻中止程式 - 避免重複引入
參考資料:
- PHP:require V.S. include « 程式初學者
- [PHP]include 與require 的差別 - Syun