###### tags: `Back-End` `php` # [week 11] 利用 PHP 實作陽春部落格 可以將部落格想成「只有一人」能新增文章的留言版。 ## 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= <?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"` ```php= substr($string, $start, $length); mb_substr($string, $start, $length, $encoding); ``` - `intval()`: 將字串轉換為數字 ```php= $id = intval($_GET['id']); ``` - `$_SERVER['HTTP_REFERER']`:獲取前一頁面的 URL 地址 ```php= <!-- 透過 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 為例: ```htmlmixed= <!-- 把 header 獨立出來,就不需每個檔案都重複撰寫 --> <?php include_once('navbar.php')?> ``` #### `require_once` - 和 `require` 用法基本相同 - 若發生錯誤,`require_once` 會立刻中止程式 - 避免重複引入 參考資料: 1. [PHP:require V.S. include « 程式初學者](http://code-beginner.logdown.com/posts/389687-phprequire-vs-include) 2. [[PHP]include 與require 的差別 - Syun](http://syunguo.blogspot.com/2013/04/phpinclude-require.html)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.