[書摘] 新觀念 PHP, MySQL & Ajax 網頁設計範例教本
PHP 是『 PHP : Hypertext Preprocessor』的簡稱,屬於一種通用和開放原始碼的腳本語言,常用於和 MySQL 資料庫搭配,進行網站應用程式開發。本書透過由淺入深的方式介紹如何運用 PHP 與 MySQL 建立網頁資料庫和其應用。大綱:
1. PHP 基礎與開發環境建立
2. 建立第一個 PHP 程式
3. HTML5 與 CSS3 實務
4. 變數、資料型態和運算子
5. 流程控制
6. 函數與錯誤處理
7. 陣列與字串
8. PHP 的狀態管理
9. 伺服器端檔案與電子郵件處理
10. MySQL 資料庫系統的基本使用
11. PHP 與 MySQL 建立網頁資料庫
12. SQL 結構化查詢語言
13. 物件導向與例外處理
14. PEAR、Smarty 與 jQuery
15. Mobile PHP 與 Ajax
16. 專案開發:航空公司定票系統
A. PHP 內建函數與正規表達式
B. 抽象類別、介面與多形
一、PHP 基礎與開發環境建立
WWW 係指全球資訊網,於 1989 年由 Tim Berners Lee 所領導的研究小組開發的主從式架構和分散式網路服務系統。為網際網路下的子集合和重要服務之一。透過 HTTP 通訊協定讓客戶端可以存取伺服端的使用資源。
HTTP 通訊協定(Hypertext Transfer Protocol)
HTTP 通訊協定是一種主從式架構應用程式,在客戶端使用 URL 萬用資源定位器指定連線的伺服器資源,傳送 HTTP 訊息進行溝通。
Step 1 客戶端要求連線伺服端
Step 2 伺服端允許客戶端連線
Step 3 客戶端送出 HTTP 請求訊息,包含 GET 指令請求取得伺服端的指定檔案
Step 4 伺服端以 HTTP 回應訊息來回應客戶端的請求,傳回訊息包含請求的檔案
* HTTP 通訊協定不會持續保持連線,只有當瀏覽器提出請求時才建立連線,在請求後就斷線等待回應,每一次請求和回應都需事先連線
* HTTP 因為 HTTP 通訊協定不會保持連線,所以在連線時,伺服端和客戶端互相知道對方,一旦請求結束,就互不相干,所以使用者狀態並不會保留,每一次連線都如同是一位新使用者
Web 應用程式是一組網頁和相關伺服端網頁技術的程式檔案集合(近來隨著 HTML5 的發展,純前端的肥客戶端應用程式也稱為 Web App)
PHP 最初是由 Rasmus Lerdorf 在 1995 年使用 Perl 開發的工具程式。如今已經大量使用在網站開發、整合資料庫操作等。其開發環境必須於伺服器有安裝 PHP ,一般會用 Appserv 、WAMP、LAMP 等包裝好的工具進行安裝。
二、建立第一個 PHP 程式
安裝 Sublime 或 Dev-PHP 開始第一個 PHP 程式。
<\?php 程式打在這裡 ?>三、HTML5 與 CSS3 實務
HTML5 是 HTML 的新標準,其頁面結構和舊版的 HTML,沒有什麼不同,不過 HTML5 語法沒有 XHTML 嚴謹,也提供語法容錯,讓其可以向後相容。
基本的 HTML5 結構:
<!doctype html> -> 指出文件內容類型和版本 <html lang="en"> -> HTML根元素,可以設定語言,方便資訊檢索 <head> -> 標題內容包含 <script>、<link>、<title>等 <meta charset="UTF-8"> -> 編碼 <title>Document</title> -> 文件標題 </head> <body> -> 網頁內容包含 標題文字、段落、換行、水平線、有序項目清單、無序項目清單、定義清單、圖片、超連結、表格、<div>、<span>、<nav>、<header>、<aside>、<article>、<section>、<footer> </body> </html>
CSS3 層級式樣式表
若說 HTML 是網頁的骨幹,CSS 則是影響網頁的外觀樣式。
其語法結構如下:
選擇器 {屬性:值}其使用方法主要有以下三種:
1. 局部套用 CSS(in-line)
於元素中設定屬性值 style,其影響範圍僅限該元素,但架構和外觀混合使用,不好維護和管理
2. 內建網頁的 CSS(embedded style sheet)
將 CSS 寫於 <head> 中的 <style> 標籤中,影響範圍為整個頁面,但架構和外觀混合使用,不好維護和管理
3. 外部連接的 CSS(external style sheet)
使用 <link> 元素引入外部 CSS 檔案,方便管理和維護
四、變數、資料型態和運算子
1. 程式敘述與結束符號:分號
2. PHP 註解:// or /* */
3. 太長程式碼:用 . 連接
4. 變數宣告:
(1) 不能使用關鍵字
(2) 使用英文字母或底點開頭
(3) 區分大小寫
5. 變數賦值:
(1) 複製(分配到不同記憶體位置)
(2) 傳位址
6. 動態變數(變數名稱是變數)
7. echo() 可以使用 . 連結,print() 不行使用
8. 常數宣告與使用
define('PI', '3.1415')9. PHP 資料型態:
(1) boolean
(2) integer
(3) float
(4) string
(5) array
(6) object
(7) resource:資源資料型態是一種特殊變數,其內容是外部資源的參考
(8) NULL:變數被指定為 NULL、變數尚未指定值、變數使用 unset()
10. PHP 運算子
(1) 算數運算子
(2) 遞增遞減運子
(3) 比較運算子
(4) 邏輯運算子
(5) 位元運算子
(6) 字串連接運算子
(7) 指定運算子
(8) 錯誤控制運算子
11. PHP 型態轉換
(1) 自動型態轉換
(2) 強迫型態轉換
(型態名稱) 運算式或變數五、流程控制
1. 條件敘述
條件敘述是一個選擇題,可能是單一選擇、二選一或多選一,依照條件運算式決定哪一個程式區塊的程式碼。
(1) if / else / elseif
//if.php
$grade = 75;
if($grade >= 90) {
echo "good!";
} elseif( $grade > 60 && $grade < 90) {
echo "soso";
} else {
echo "Fail!";
}
(2) switch(判斷多種對應值)
//switch.php
$gender = 'man';
switch($gender) {
case 'man':
echo "hi man!";
break;
case 'woman':
echo "hi woman!";
break;
case 'child':
echo "hi child!";
break;
default:
echo "hi hi";
}
(3) ? : (三元運算子)若為 True,變數值為前者,反之後者
//ternary_operator.php
$grade >= 60 ? "pass" : "fail";
2. 迴圈結構
迴圈結構可以重複執行程式區塊的程式碼,迴圈擁有結束條件可以結束迴圈的執行(進階為巢狀迴圈)。
(1) for 計數迴圈
//for.php
for(初始值; 判斷條件; 計數器) {
// 程式執行
}
(2) while(不知道明確次數)
//while.php
while(判斷條件) {
// 程式執行
// 自定計數
}
(3) do...while(至少執行一次)
//while.php
do {
// 程式執行
// 自定計數
} while(判斷條件);
(4) break, continue(break跳出迴圈,continue跳過這次迴圈)
//break_continue.php
for($i = 0; $i < 10; $i++) {
if($i == 6) {
break;
}
}
for($i = 0; $i < 10; $i++) {
if($i == 6) {
continue;
}
}
六、函數與錯誤處理
將大程式分解成一個個小問題,分頭解決,最後就可以完成大型的應用程式。在 PHP 的單位中小問題的解決是透過函數進行模組化程式設計。
1. 建立函數
函數使用關鍵字 function,並設定函數名稱
2. 執行函數
PHP 函數執行只是改變程式的執行順序
3. 函數參數與傳回值
傳址或傳值呼叫函數
(1) 傳值呼叫:將便數值傳入函數,並不會變更原變數值
(2) 傳址呼叫:將變數實際儲存位置傳入,當函數程式區塊變更參數值,也會同時變更傳入的變數值(使用&取出位址)
4. 函數變數與預設參數值
預設參數值
函數變數,呼叫變數值的函數,只需在變數後加上括號傳入參數就可以呼叫變數值的函數
5. 函數的變數範圍
(1) 區域變數
對於函數內指定的變數,變數只能在函數內使用,函數外的程式碼無法存取此變數。函數參數也是一種區域變數。
(2) 全域變數
如果變數是在函數外指定變數值,整個 PHP 程式檔的各個函數和其他程式碼都可以使用此變數,若在函數內使用請先宣告成 global 變數。
(3) 靜態變數
一種特殊的區域變數,執行完函數後,其值不會消失會保留。靜態變數因為配置有固定的記憶體位置,所以重複呼叫函數,靜態便數值都會保留。使用 static 宣告變數。
6. require() 與 include() 引入檔案
PHP 中的 require() 與 include() 並不是函數,而是 PHP 語言的建構子,在使用上和函數稍有不同,可以將外部檔案內容插入目前 PHP 程式檔案。
(1) require() 和 require_once() 的使用
require "函數庫檔案.inc";
require ("函數庫檔案.inc");
$file_name = "函數庫檔案.inc";
require $file_name;
(2) include 和 include_once() 的使用
PHP 中的 include() 和 require() 用法相似,只是 require() 引入檔一定需要存在,否則會產生執行錯誤,include() 引入檔如果不存在,只會顯示警告訊息,PHP 程式一樣可以繼續的執行
7. PHP 常用的內建函數
(1) 取得 timestamp 和日期時間
- time()
- mktime()
- getdate()
- checkdate()
(2) 日期時間格式與處理函數
- date()
- gmdate()
(3) 檢查資料型態函數
- empty()
- isset()
- unset()
- is_bool()
- is_null()
- is_string()
- is_int()
- is_float()
- is_array()
- is_object()
- is_rource()
(4) 資料型態函數
- gettype()
- getresource()
- settype
8. PHP 錯誤處理
- 環境錯誤(Environment Errors)環境錯誤也稱為外部錯誤,這是指程式執行環境導致的錯誤,而不是程式設計問題。例如:權限不足、檔案不存在等問題
- 程式錯誤(Programming Errors)程式錯誤是程式中有臭蟲,可能是語法錯誤、語意錯誤或是程式邏輯有誤
錯誤處理基礎
(1) Parse Errors
剖析錯誤是指 PHP 程式碼語法和語意錯誤,這是在執行前,直譯過程找出的錯誤
(2) Fatal Errors
致命錯誤是指 PHP 程式碼語法和語意錯誤,這是在執行前,直譯過程中找出的錯誤
(3) Warnings
警告錯誤是一種尚能補救和非致命的執行時錯誤,PHP 引擎會試圖繼續執行 PHP 程式碼
(4) Notices
注意錯誤是很小非致命錯誤,只是用來提醒程式碼可能有錯誤。例如:變數沒有初始值
9. exit() 和 die() 的錯誤處理
PHP 有基本的錯誤處理方式:不理會、終止程式顯示錯誤訊息、寫入記錄檔和使用自定錯誤處理進行補救
- 指定錯誤等級
error_reporting(E_ERROR | E_WARNING | E_NOTICE)
- 指定錯誤處理函數
- 將錯誤訊息寫入記錄檔
- 產生使用者自定錯誤
七、陣列與字串
1. 一維索引陣列
(1) 索引陣列
(2) 結合陣列
- 建立陣列
- 輸出陣列
- 新增陣列
- foreach
- 陣列運算子
- 函數的陣列參數
(3) 索引陣列相關函數
- array_pad()
- array_unique()
- array_splice()
- array_reverse()
- list()
2. 二維與結合陣列
(1) 建立二維陣列
(2) 存取二維陣列的元素
(3) 結合陣列
- 建立結合陣列
- 新增和刪除結合陣列元素
- 走訪結合陣列元素
- 預設從 0 開始,可以調整預設值
(4) 結合陣列相關函數
- array_keys()
- array_values()
- reset()
- current()
- key()
- next()
- end()
- prev()
- each()
(5) 函數的不定長度參數列
3. 陣列的搜尋與排序
(1) 排序的基礎
(2) 搜尋的基礎
(3) 陣列排序與搜尋函數
4. 字串處理函數
(1) 字串長度、剪裁與大小寫轉換
(2) 子字串與字元搜尋
(3) 子字串和字元處理
(4) 字串比較
(5) Web 使用的字串函數
八、狀態管理
1. PHP 預定變數
PHP 提供預定變數(Predefined Variables)可以讓網站各 PHP 程式在執行時存取,這是一組結合陣列變數,可以取得伺服器、Session、Cookie、環境和表單欄位資料等資訊(其為全域範圍的結合陣列)
(1) $GLOBALS
(2) $_SERVER
(3) $_GET
(4) $_POST
(5) $_COOKIE
(6) $_FILES
(7) $_ENV
(8) $_REQUEST
(9) $_SESSION
2. HTTP 標頭與輸出緩衝區處理
(1) 轉址到其他網頁或是 PHP 程式
(2) 定時更新網頁
(3) 設定輸出內容的資料類型
(4) 快取保留期限
(5) 輸出緩衝區的基礎
(6) PHP 輸出緩衝區處理函數
3. PHP 狀態管理基礎
(1) 客戶端狀態管理
- 表單欄位
- URL 參數
- Cookies
(2) 伺服端狀態管理
- Session 變數
- 文字檔案
- 資料庫
- XML 文件
4. 表單處理與 URL 參數
(1) HTML 表單
(2) $_POST 與 $_GET 結合陣列變數
5. Cookies 的處理
(1) HTTP 標頭的 Cookie 資料
(2) Cookie 的基本應用
(3) 新增 Cookie
(4) 取得 Cookie
(5) 刪除 Cookie
6. 交談期追蹤與 Session 變數
(1) Session 變數基礎
(2) 交談期追蹤
7. 建立購物車
九、伺服器端檔案與電子郵件處理
1. 檔案操作
(1) 路徑處理
(2) 檢查檔案是否存在
(3) 檔案複製
(4) 檔案更名
(5) 刪除檔案
2. 檔案讀寫
(1) 開啟檔案
(2) 關閉檔案
(3) 寫入資料到文字檔案
(4) 新增文字到文字檔案
(5) 讀取整個文字檔案
(6) 讀取檔案到陣列
3. 檔案上傳
(1) 上傳單一檔案
(2) 同時上傳多個檔案
4. 寄送電子郵件
5. PHP 留言板、計數器
十、MySQL 資料庫系統的基本使用
大部分的 PHP 應用都屬於網站資料庫應用,在伺服器端提供資料來源的資料庫系統
1. 資料庫系統
資料庫系統是由資料庫和資料庫管理系統所組成的,亦即一套管理資料庫的應用程式
2. 關聯式資料庫
關聯式資料庫是由一個或多個資料表組成,於多個資料表之間使用欄位值來彼此聯繫
3. 關聯式資料庫的組成:資料表、記錄(一列)與欄位(分類)、主鍵
以下為 PHP 和資料庫互動的示意圖:
瀏覽器 --> (PHP 程式) Web 伺服器 <--> PHP 直譯器 <--> 資料庫系統 <--> 資料庫
<-- (HTML網頁)
4. MySQL 資料庫系統
MySQL 關聯式資料庫提供多執行序、多使用者和標準 SQL 語言的資料庫伺服器,其支援多項程式語言。其中 phpMyAdmin 為圖型化的資料庫管理系統介面
(1) 建立新帳戶,不要使用 root
(2) 建立資料庫
(3) 建立資料表
(4) 新增資料
(5) 修改資料
(6) 讀取資料
(7) 刪除資料
十一、PHP 與 MySQL 建立網頁資料庫
於 PHP 5 和 MySQL 4.1 之後的版本,使用 ext/mysqli 擴充成是當做 PHP 和 MySQL 之間橋樑
1. 開啟與關閉 MySQL
2. 開啟指定資料庫
3. 獲取 MySQL 伺服器資訊
4. 查詢資料表
5. 釋放欄位值空間
6. 讀取單筆記錄的索引陣列
*使用 HTML 表格分頁顯示記錄資料
*MySQL 錯誤處理
*網站登入
十二、SQL 結構化查詢語言
SQL 是結構化查詢語言(英語:Structured Query Language,縮寫為SQL),為『ANSI』標準的資料庫語言,是一種用於資料庫中的標準資料查詢語言,目前有多種關聯資料庫都支援
1. SQL 指令種類
(1) 資料定義語言(Data Definition Language)
建立資料表、索引、檢視表和定義資料表欄位等
(2) 資料操作語言(Data Manipulation Language)
屬於資料表記錄查詢、插入、刪除和更新指令
(3) 資料控制語言(Data Control Language)
資料庫資訊安全相關管理
2. SQL 語言的資料庫查詢
(1) SELECT
(2) WHERE
(3) AND
(4) ORDER BY
(5) BETWEEN / AND
(6) IN / NOT
(7) LIMIT
3. SQL 子查詢、合併查詢與聚合函數
(1) 聚合函數
-COUNT
-AVG
-MAX
-MIN
-SUM
(2) 子查詢
(3) 內部合併查詢 INNER JOIN
(4) 外部合併查詢 OUTER JOIN
4. SQL 資料庫操作
(1) INSERT
(2) UPDATE
(3) DELETE
*通訊錄管理
十三、物件導向與例外處理
物件是資料與使資料相關操作結合在一起的組合體。在現實生活中物件包含:狀態、行為、識別字等特性。封裝、繼承、多形
1. 類別與物件
- 成員資料
- 成員函數
2. 成員變數存取
- private
成員變數或方法只能在類別本身呼叫或存取
- protected
成員變數或方法可以在類別本身和其子類別存取或呼叫
- public
成員變數或方法可以讓外部呼叫和存取
3. 類別常數和靜態成員
PHP 例外處理
產生例外物件
throw exception
try...catch
4. 例外處理程式敘述
5. 物件導向介面資料庫存取
(1) 使用物件導向介面的資料庫存取
(2) 使用 Prepared Statement 執行 SQL
*網路商店
十四、PEAR、Smarty 與 jQuery
1. PEAR 是一個擴充 PHP 的套件來源,常用套件如下:
(1) MDB2
(2) Mail
(3) Net_Socket
(4) Net_SMTP
(5) XML_Parser
2. Smarty
Smarty 是一種 PHP 樣板引擎,其主要目的是將 PHP 程式檔案的 HTML 標籤抽出,將外觀和邏輯分離,讓程式碼較易維護
商業邏輯 + 展示邏輯
3. jQuery
jQuery 是 JavaScript 函數庫,方便開發者可以更輕易的操作 DOM。
(1) jQuery 選擇器
(2) jQuery 事件處理
(3) jQuery 動畫效果
*附檔郵件處理
十五、Mobile PHP 與 Ajax
1. 行動裝置偵測
2. jQuery Ajax 方法
(1) load()
(2) getScript()
(3) get()
(4) post()
(5) getJSON()
(6) ajax()
*關鍵字建議清單
十六、 專案開發:航空公司定票系統
A. PHP 內建函數與正規表達式
B. 抽象類別、介面與多形
參考文件:
1. 新觀念 PHP, MySQL & Ajax 網頁設計範例教本