Back-End
php
資料庫
本篇為 [BE101] 用 PHP 與 MySQL 學習後端基礎 這門課程的學習筆記。如有錯誤歡迎指正。
課程筆記:[week 9] 後端基礎 - PHP 語法、資料庫 MySQL
在開始實作留言板之前,需先進行前置作業:
index.php
register.php
login.php
handle_add_post.php
→ comments 資料庫handle_register.php
→ users 資料庫handle_login.php
logout.php
可分為前後端。通常會先切出前端頁面,再加入功能,從資料庫取出並資料串聯到頁面。
依照設計稿切出所需頁面,可參考留言板 DEMO。
接著就進入重頭戲,也就是替靜態網頁加上各種功能。
->
符號:取用物件中的變數
$conn->error
require_once();
:取用資料夾中其他 libraryecho
:印出變數、字串等
echo "hello World"
print_r()
;:印出物件、陣列
print_r($row);
var_dump
:印出變數型態,作用是輸出變數的詳細資訊fetch_array()
:讀取資料同時,以數字與欄位名稱各存一次在陣列中fetch_assoc()
:讀取的資料 Key 值設定為欄位名稱的陣列fetch_row()
:讀取的資料 Key 值設定為依序的數字若以 print_r($row);
印出上述程式碼,可知 $row
為陣列:
isset()
:檢查是否有此變數empty()
:檢查是否有值query()
:判斷資料庫查詢是否成功
exit()
和 die()
:兩者幾乎相同,均為輸出消息後退出程式sprintf()
:裡面可放入替代字元例如使用 sprintf()
做 SELECT:
用 sprintf()
做 INSERT INTO:
conn.php
連線資料庫【注意】由於
conn.php
放有帳號密碼等重要資料,因此在 commit 前需加入git.ignore
,不進行版本控制。
程式碼如下:
index.php
顯示所有留言首先要了解 Cookie 是什麼:
由於 HTTP 是一個無狀態協議,會把每一次收到的請求都視為獨立的行為。但伺服器能透過 response header 的 Set-Cookie
屬性,將使用者狀態記錄在 Cookie。
瀏覽器會在每次發送請求時,自動在 request header 帶上 Cookie 資料;伺服器即可藉由檢視 Cookie 內容,得知瀏覽器使用者的狀態。
但這麼做有個缺點,儲存在 client 端的 Cookie 是能夠被竄改的,因此不適合放機密或重要的資訊。這時有兩種解法:
也就是 Cookie-based session,把狀態加密後存在 Cookie。但如果加密方式以及密鑰被破解,往後仍有安全疑慮。
全名是 Session Identifier。如此 Server 只需在 Cookie 儲存一組亂數產生的 Session ID,其餘狀態資訊則存在 Server 端。
因此,Session 其實就是一種讓 Request 變成 stateful 的機制。
當 $_SEESION
儲存成功,會進行下列三件事:
set-cookie
: session-id
當 $_SESSION
讀取資料時,會進行下列三件事:
$_SESSION
參考資料: