47
PHP&MySQL 教學手冊 目錄 第一章 下載及安裝 XAMPP 說明.................................................................................. 2 第二章 設定與測試 PHP、MySQL 環境........................................................................ 4 第三章 MySQL 資料庫與資料表基本操作................................................................... 9 第四章 查詢與資料維護語法.................................................................................... 14 第五章 圖形介面操作、匯出資料庫........................................................................ 18 第六章 撰寫 PHP 程式................................................................................................ 28 第七章 網頁程式範例................................................................................................ 33 第八章 日期的處理.................................................................................................... 37 第九章 Cookie 與 Session 的應用與介紹............................................................... 39 第十章 Q&A.................................................................................................................. 42 附錄 A: 編輯工具....................................................................................................... 43 附錄 B: Apache 因 Port 被占據而無法啟動處理方法............................................ 44 附錄 C: PHP PDO 語法................................................................................................ 46

PHP MySQL 教學手冊 - db.cs.ntou.edu.t · PHP、MySQL的架站工具XAMPP之 32bits版本 的安裝檔 ,而 64位元的電腦 也可以直接使用,以下教學也將以這版本介紹。

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

PHP&MySQL 教學手冊

目錄

第一章 下載及安裝 XAMPP說明.................................................................................. 2

第二章 設定與測試 PHP、MySQL環境........................................................................ 4

第三章 MySQL資料庫與資料表基本操作................................................................... 9

第四章 查詢與資料維護語法.................................................................................... 14

第五章 圖形介面操作、匯出資料庫........................................................................ 18

第六章 撰寫 PHP程式................................................................................................ 28

第七章 網頁程式範例................................................................................................ 33

第八章 日期的處理.................................................................................................... 37

第九章 Cookie與 Session 的應用與介紹............................................................... 39

第十章 Q&A.................................................................................................................. 42

附錄 A: 編輯工具....................................................................................................... 43

附錄 B: Apache 因 Port被占據而無法啟動處理方法............................................ 44

附錄 C: PHP PDO 語法................................................................................................ 46

第一章下載及安裝 XAMPP說明

1. 連結至 https://www.apachefriends.org/zh_tw/download.html 下載整合

PHP、MySQL的架站工具 XAMPP 之 32bits 版本的安裝檔,而 64位元的電腦

也可以直接使用,以下教學也將以這版本介紹。

2. 原則上安裝過程,勾選皆使用預設值、預設路徑即可(本學期主要是用到

Apache, MySQL, PHP, phpMyAdmin等)。

安裝的成功畫面如下↓

3. 安裝完成後,即可啟用 XAMPP Control Panel。

4. 無論是 html或是 php文件,都是純文字文件格式,同學可自行使用

Windows 所附的記事本或是使用 NotePad++ 等文件編輯器。(參見附錄 A)

第二章 設定與測試 PHP、MySQL環境

接下來我們要對 PHP及 MySQL做一些必要的設定,才可使將來編寫的 PHP網

頁正常工作。

1. 安裝完後,要使用 phpMyadmin前,每次開機都必須先開啟 XAMPP Control

Panel,再手動開啟 Apache 及 MySQL,若因 Port: 80被占據 Apache 無法

啟動,請參閱附錄 B。

2. XAMPP 預設是將網頁放置於 C:\xampp\htdocs 目錄下,同學可直接在瀏覽

器中輸入 http://localhost 位址,若看到下面畫面表示 PHP環境安裝成

功。

3. 點選左欄 Security

再點選畫面中紅框處的連結↓

4. 進入設定密碼填妥後送出,此為 MySQL 帳號"root"的密碼。

5. 將命令提示字元移至桌面當捷徑:

6. 在命令提示字元上點選右鍵,設定開始位置為 XAMPP 的安裝位置(預設路徑

為: C:\xampp\mysql\bin,如下圖),如此編輯程式時就不用辛苦在 DOS

模式下切換目錄。

7. 進入命令提示字元,輸入 mysql -u root -p

跳出輸入 password,輸入剛剛設定的密碼後即可進入 SQL指令模式。

8. 輸入 show databases;,可顯示目前資料庫有哪些;輸入 \q 可以離開

MySQL 環境。

第三章 MySQL 資料庫與資料表基本操作

1. 建立、顯示、刪除與使用資料庫:

(1)在 mysql> 中輸入

create database mytest;

即可建立一個 “mytest"資料庫

(2)在 mysql> 中輸入以下命令即可顯示目前所建立的所有資料庫

show databases;

(3)若我們再建立一個“mytest2"資料庫,並要刪除該資料庫,則輸入

drop database mytest2;

即可刪除 mytest2 資料庫。

(4)由於在 MySQL資料庫管理系統中,可能會有許多個資料庫存在,因此我們在

使用時,要先指定預設的資料庫為何,現在假設我們要使用已經建立好名為

“mytest"的資料庫,則輸入:

Use mytest;

2. 資料表基本操作:

(1) 建立資料表的描述如下:

Create table 資料表名稱(

欄位名稱 1 資料型別, //加上『,』逗號分隔其他欄位

欄位名稱 2 資料型別,

……..

欄位名稱 n 資料型別 //最後一個欄位記得不要加『,』逗號

);

Create table t1(

no integer,

name char(8),

class1 integer,

class2 integer,

class3 integer

);

(2) 資料表的查詢

使用

show tables; //可查詢資料庫中所定義的資料表

show columns from t1; //可顯示資料表 t1的定義

(3) 資料表的刪除

執行

drop table t2;

可以刪除 t2資料表(t1資料表先不要刪除)

可看到只剩下 t1資料表。

3. Foreign Key 與 Check語法

(1). Foreign Key: 在建立新的一筆資料時,會 reference(參考)到其他

table的 primary key。若是沒有該筆資料在被 reference的 table 裡,建立新

的資料將會失敗。

如:

create table account

(account_number char(10),

branch_name char(15),

balance integer,

primary key (account_number),

foreign key (branch_name) references branch(name) );

在 account table 中,branch_name這個欄位 reference到 branch table 裡的

primary key ,也就是 name。

假設現在新增一筆資料(‘A’, ‘B’, 10)在 account table裡,若是 B這欄

位值並不存在於 branch table 裡,則新增(‘A’, ‘B’, 10)這筆資料將會失

敗。

(2). Check: 在建立一筆資料時,會檢查該筆資料的某個欄位的值是否在

一開始定義的範圍之內。如:

CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (P_Id>2));

在 Persons table 裡,限定 P_Id 必須大於 2,若是輸入的值小於零,則會導致失

敗的情況。***目前實測後的結果,Check 語法目前在 MySQL 中不支援,如下

圖 P_Id 為 1 仍然可以新增。

第四章 查詢與資料維護語法

1. 新增紀錄

所謂紀錄,即表示資料表中的內容,要新增紀錄的方式,使用以下語法

insert into 資料表名稱(欄位名 1, 欄位名 2,….,欄位名 n)

values(值 1,值 2,….,值 3);

其中因為姓名的部份是字串,所以前後加上『’』單引號。另外,我們亦可使

用下列的精簡指令,以同時輸入多筆資料

2. 查詢紀錄

使用 select指令,可以查詢資料,語法格式為

select * from t1;

而加上 where條件判斷敘述,可以顯示出所要尋找的特定資料,例如我們

要找 class1 成績大於 75分,可輸入下列判斷式( 編號 2的 Mary class1<75

故被過濾掉了 ):

3. 更新記錄

要更新記錄時,語法格式為

update 資料表名稱 set 欄位名稱 = 新的值

例如要將 Mary的成績 class2由 65改成 70,我們可以結合上述的 where指

令作修正

4. 刪除記錄

刪除記錄的語法如下

delete from 資料表

不過上述語法會刪除資料表中所有資料,因此在刪除的時候,通常都會結合

where 指令作條件篩選,下例中,我們刪除座號為 3的資料。

delete from 資料表 where 欄位=數值

5. Outer Join 語法

(1) 利用 Left Outer Join 串連兩個資料表。

標準語法:Select * from 資料表 1 Left Outer Join

資料表 2 On 資料表 1.欄位 1=資料表 2.欄位 2

實例語法:Select * from t1 Left Outer Join

t3 On t1.name=t3.name

假設現有 t1及 t3兩個資料表,內容如下:

在此使用 Left Outer Join 指令實作如下:

(2) Right Outer Join,則是跟 Left Outer Join 剛好相反。Right

Outer Join 是以右邊的資料表作為根據的,一樣是結合兩個資料

集。。

標準語法:Select * from 資料表 1 Right Outer Join

資料表 2 On 資料表 1.欄位 1=資料表 2.欄位 2

實例語法:Select * from t1 Right Outer Join

t3 On t1.name=t3.name

這個跟 Left Outer Join 非常相似,只是把關鍵字換成了 Right Outer Join。

由於換了關鍵字,變成根據右邊的資料庫串連。

執行結果:

第五章 圖形介面操作、匯出資料庫

1. 在安裝完 XAMPP 後,在網頁上輸入 http://localhost 就可登入自身的網頁

中。點選左欄 phpMyAdmin,即可進入資料庫當中( 在這裡使用者名稱預設

為 root,密碼為當初在 Security 中所設定的密碼 )

PS: 若使用 win7無法登入 http://localhost/phpMyAdmin,

則請用管理者權限啟用「記事本」開啟舊檔 C:\WINDOWS\system32\drivers\etc\hosts

加入一行 127.0.0.1 localhost

參閱 http://taichunmin.pixnet.net/blog/post/35484003

2. 新建資料庫: 在左側按下「新增」

**注意 : 資料庫名稱必須為英文、建議全部為英文小寫(減少錯誤率)

輸入新的資料庫名稱以及編碼排序方式後,按下「建立」鍵,

編碼選取方式如下圖所示,一般建議選取 utf8_general_ci 以便於輸入中文之欄

位值,其他詳細說明可以參考以下連結:

http://www.chinaz.com/program/2010/0225/107151.shtml

http://www.geocities.jp/jpcutes/mysqlcheck/index.htm

3. 新建資料表: 在左側資料庫選單,先點選資料庫,如「project」,輸入新的

資料表名稱以及欄位數量,再按右下方的「執行」。

4. 在「欄位」部份輸入每一個欄位的名稱( **注意: 欄位名稱必須謹慎輸

入,下圖欄位名稱為範例 ),型態若是純數字則可選擇 INT型態,若是字元

型態則選擇 VARCHAR。屬性的部份 INT可選擇是正整數或是包含負數。

輸入完成後按下右下方的儲存,就完成資料表的建立。

5. 新增資料: 點選左側一個資料表後,直接點選上排的「新增」即可開始新增

資料。將下方的欄位值填寫完後,按下最下方的執行,即可新增所有資料。

若要新增更多筆資料可以在最下方的下拉式選單選擇「繼續新增 ?? 列」。

6. 瀏覽資料表內容: 點選左側一個資料表後,直接點選上排的「瀏覽」即可看

到資料表的內容。

7. 顯示資料表結構: 點選左側一個資料表後,直接點選上排的「結構」即可看

到資料表的結構。(如果點選「結構」後有當掉的情形,可以在每次要選資

料表的「結構」時,在結構上按右鍵,開啟新分頁或新視窗,即可解決該問

題。另一個方法是,點選如下圖左側的房子圖回到首頁,然後將語系改為

English,即可正常。)

8. 設定主鍵: 點選結構後,直接點選右方鑰匙圖示就能設定主鍵。( 建構好資

料表可以不定義主鍵,但定義了之後就一定要有一個為主鍵,不能取消,只

能更換 )

若選擇 Id當主鍵,按下主鍵的鑰匙圖示後,如下圖所示。

9. Foreign key 的操作方式

在下面的例子,資料表 Students的 Name要 reference到 teacher 的

t_Name,先確認 t_Name在 teacher表格是 primary key。在圖形化的操作

上如果 Name本身不是 primary key但要 reference到其他表格,需先把他

建成索引(index),如下圖所示:

(1)索引的操作

在「結構」下點擊+索引後,會跳出一個小視窗,自己給定一個索引名稱,

索引類型選 index,column是定義這個 index是建在哪個欄位上,這裡是建

在 Name 上。

(2)在 students 的「結構」下點擊「關聯清單」,如下圖的方框所示。

(3)按下「關聯清單」後會跳出下圖畫面,針對要設定 reference的欄位做出

如下圖框框內的設置,完成後按儲存(Save),即會顯示是否成功。( 如點

選「關聯清單」無反應,在「關聯清單」上按右鍵開啟新分頁或新視窗即

可 )

10. 匯出資料庫: 選定左側的一個資料庫後,如「project」,點選上排的「匯

出」後,匯出方式: 選擇 ●快速、格式: SQL,按下執行即可。

匯入資料庫: 注意**: 匯入前必須先創立一個資料庫,要與匯出的資料庫名稱

相同。選定欲匯入的資料庫後,如「project」,點選上排的「匯入」後,匯入

方式: 選擇資料庫 sql檔,選擇檔案編碼 utf-8,選擇格式 SQL後,按執行即

可進行匯入。

第六章 撰寫 PHP程式

本節介紹如何以 php架設網站。請注意,PHP程式碼必須寫在

<?php

?>

之內。

1. 首先我們做個簡單的網頁並使用 PHP程式:

(1)打開任意文書編輯程式,輸入下列程式碼

<html>

<head>

<title>HelloWorld</title>

</head>

<body>

<?php

echo "This Is My First PHP page !!";

?>

</body>

</html>

(2) 將檔案存成 “helloworld.php",置放路徑為 “C:\xampp\htdocs"

(3) 在瀏覽器中輸入 http://localhost/helloworld.php 位址,即可看到執

行結果。

2. 接下來我們將結合 PHP與 MySQL,將資料庫應用於網頁當中。

若在網路上找一些 PHP連接資料庫的範例,大多會看到的寫法都是 PHP最

早期提供給 MYSQL 的 API,例如 mysql_connect(),mysql_query(),mysql_se

lect_db()等等。由於 PHP版本的更新,自從 PHP5.5.0之後不會再支援以上

的 api。

目前在 PHP5中提供了兩種連接資料庫的 API: PDO_MYSQL和 MYSQL

IMPROVED EXTENSION(MySQLi)。在本章中我們使用 MySQLi的用法為例,而

後者的範例請參見附錄 C。

PDO_MYSQL 和 MySQLi差別主要在於 PDO_MySQL 提供多種資料庫連接,例

如:MySQL、PostgreSQL、MS SQL Server、SQLite等等都可以使用 PDO對

應並擴展。反之,MySQLi只支援 MySQL,對只使用一種資料庫連線的使用者

極為方便,但是要想使用別種資料庫改動會非常大。

(1) 連接資料庫的範例(db_conn.php):

資料庫連線所使用到的 api如下:

db為一個 MySQL連線的物件。

1) $db = mysqli_connect(localhost,user,password,database,port,so

cket);

開啟和 MySQL的連線。

localhost 為主機名或 IP位址、user 為 MySQL使用者名稱、password

為 MySQL使用者密碼、database為 Database 名稱、port為連結 MySQ

L Server 使用的埠號(非必填)、socket 為使用的 socket(非必填)。

2) mysqli_connect_errno();

回傳連線錯誤代碼,沒有錯誤回傳 0。

3) mysqli_connect_error();

回傳字串並描述連線錯誤的原因,沒有錯誤回傳 NULL。

4) mysqli_set_charset($db,charset);

設定字元編碼成功回傳 true,失敗回傳 false。

charset為預設字元編碼設定。

5) mysqli_select_db($db,database);

選擇資料庫成功回傳 true,失敗回傳 false。

6) mysqli_close($db);

關閉與 MySQL連線。

<?php

$localhost = 'localhost';

$user = 'root';

$password = 'pass';

$database = 'test';

//進行連線

$db = mysqli_connect($localhost, $user, $password, $database);

if (mysqli_connect_errno()) {

printf "Connect failed: ".mysqli_connect_error();

exit();

}

mysqli_set_charset($db,"utf8");//設定編碼

mysqli_select_db($db,"test"); //連線狀態中更換資料庫

//mysqli_close()//斷掉連接

?>

(2) 新增資料範例:

新增資料所使用到的 api如下:

db為一個 MySQL連線的物件。

query為 SQL語法。

stmt對應到一個 SQL執行後的物件。

escapestring 為需將特殊字元去除的輸入字串。

1) $stmt = db->prepare($query);

提前準備 SQL query,回傳 statement。

2) stmt->bind_param("isiii",$no,$name,$class1,$class2,$class3);

指定需要對應的變數型態。

i變數型態為 integer、d變數型態為 double、s變數型態為 string、

b變數型態為 blob。

3) stmt->execute();

執行 SQL 語法。

4) mysqli_query($db,$query);

執行 SQL 語法。

5) mysqli_real_escape_string($db,$escapestring);

回傳處理後的逃脫字串,第一個參數可省略。

<?php

include "db_conn.php";

$query = ("insert into t1 value(?,?,?,?,?)");

$stmt = $db->prepare($query);

$stmt->bind_param("isiii",$no,$name,$class1,$class2,$class3);

$stmt->execute();

//為了防止 sql injection 才有上面感覺上很複雜的寫法

//還有一種簡單的寫法是直接下 query

$full_query = "insert into t1 values (6,'ivan',90,95,100)";

//query成功回傳 true,失敗回傳 false

$full_query = mysqli_real_escape_string($full_query);

mysqli_query($db,$full_query);

?>

(3) 查詢資料範例:

查詢資料所使用到的 api如下:

stmt 為一個 SQL執行結果集合。

result 為結果的其中一列。

1) $result=mysqli_fetch_object($stmt);

回傳物件,將$stmt 的第一列資料取出來,若無資料則回傳 NULL。

<?php

include "db_conn.php";

$query = "SELECT * FROM t1";

if($stmt = $db->query($query)){

while($result=mysqli_fetch_object($stmt)){

echo "#".$result->no." name: ".$result->name." class1:

".$result->class1." class2: ".$result->class2." class3:

".$result->class3;

}

}

?>

除了 mysqli_fetch_object 外,mysqli_fetch_row 會回傳具有屬性位

置的陣列(以數字抓取資料)、mysqli_fetch_assoc 會回傳具有屬性名

稱的陣列(以字串抓取資料)、mysqli_fetch_array 則提供以上兩種方

式,其詳細用法請自行查閱相關網站。

(4) MYSQLI 刪除資料範例:

刪除或修改資料的方式大致如同 insert,以下顯示利用 prepared

statement的方式刪除資料。

<?php

include "db_conn.php";

$stmt = $mysqli->prepare("DELETE FROM t1 WHERE no=?");

$stmt->bind_param("i", $num);

$num = 6;

$stmt->execute();

?>

第七章 網頁程式範例

I. 範例 1:在 HTML 中呼叫 PHP程式

執行結果:

1. 解決從 PHP輸入資料進資料庫後呈現亂碼的一道指令。

2. center 標籤: 在瀏覽器上執行會自動將網頁置中,通常放於<html>中的

</head>之後。

3. Form 提供畫面讓使用者輸入,action代表動作,須將送出資料後要執行的

php 程式寫在 action 中,利用 post方式將變數帶過去該 php檔;而在網

頁端按下確認送出後就會跳轉頁面,以上範例為實作 form 傳送變數,會

將 no、name、class1、class2、class3 傳到 ininsert.php中。

4. 在 body中直接輸入文字 如「座號: 」,就會在網頁上直接顯示;而「name

= “no"」是在指定對應輸入資料的變數為 no,而 type為 text 則代表輸

入的文字或值會存在 no這個變數內( 變數名稱可以自己取 )。

**注意: HTML 語法中,如果在屬性值和引號中間參雜空格,有可能會導致

變數無法被正確宣告而出了錯誤。

舉例: name=" no " 這樣就會出錯。

5. <input type="submit" value="確認送出">

意思為一個按鈕,而 value中就是放顯示在按鈕上的字串。

**注意: HTML 語言為巢狀式,先出現的標籤就必須最後結束,不可以把開

始、結束標籤交叉擺放,會執行出錯誤結果。

II. 範例 2:下圖為 ininsert.php的程式碼,此程式會接受使用者輸入的資

料,並以表格方式將資料庫內的資料呈現在網頁上。

於範例 1的表單中填入以下資料並執行:

執行結果:

執行前 執行後

更多 PHP 片段程式碼範例以及功能請參考以下網址:

http://www.w3schools.com/php/default.asp

第八章 日期的處理

若想要在網頁中取得使用者登入或者留言的時間,則所設計的資料庫亦要有時

間欄位,MySQL的時間欄位的資料型別如下:

在此範例中,假設要建立一個留言版,能夠記錄發言時間、使用者名稱、主

題,以 datetime為例,建立一新的資料表 t2

其內容為:

接下來,使用『date( )』函數撰寫 php:

<?php

include “db_conn.php";

date_default_timezone_set('Asia/Taipei');

$dt=date("Y-m-d h:i:s");

$sql=$db->query("insert into t2(date, name,subject)

values($dt,'Joe','DB class')");

?>

其中,我們先設定時區,然後將 date的資料暫存於 “$dt"變數中,

$sql=$db->query指令裡加入資料,執行後,查詢 t2資料表的內容,可以發

現,時間、留言者、主題的欄位已被寫入了。

第九章 Cookie與 Session的應用與介紹

1. Cookie 介紹

(1) 當 Server想要保存使用者的某些狀態,如登入資訊,頁面風格時,會發送

Cookie 給 Client。Cookie通常是一份數對,有 Cookie名與相對應的值,

而 Cookie會在使用者本地端的電腦系統裡保存。之後當使用者瀏覽同一網

頁時,Cookie 值便會隨著請求發送,如此 Server就能根據 Cookie 值進行

操作。舉例來說,許多購物網站均擁有購物車的功能,當使用者在已選取

商品但未結帳前就關閉瀏覽器時,下次再登入時上次的購物車資訊仍會存

在,讓使用者不用再重新去點選。

(2) 在使用 Cookie 時,最主要的問題在於 Cookie是以明文的方式在網際網路

上傳輸及在客戶端電腦儲存,因此我們建議儘量避免使用 Cookie 儲存敏感

的資料。但別因此就捨棄 Cookie不用,相對於 Session來說,使用

Cookie 能減輕 Server的負擔,所以要是當資料的內容不是很重要,像是

用戶的個人設定,仍然可以使用 Cookie。

圖片解釋:browser 的某些資料如"member",如果 Server端沒有這些資料

(NULL),Server就會儲存以便下次使用,以此類推

2. SESSION 介紹

Session 與 Cookie 最主要的差異在於 Session 是保存在 Server 端,而不是

Client端。舉例來說,當我們在網站中填入登入的表單後通常會將使用者的帳

號及相關資料存在 Server端的 Session中,即使當使用者的電腦遭竊取,也無

法取得 Session的相關資料。

3. 範例

(1)方法一: 在驗證帳號密碼無誤後,以 COOKIE 存放使用者的帳號作為是否已

登入的辨識。

第一步、啟用 cookie

啟用前我們先了解 cookie 的基本語法

setcookie("變數名稱","變數值","存活時間","路徑","網域","安全性")

參數 描述

name變數名稱 必需。規定 cookie 的名稱。

value 變數值 必需。規定 cookie 的值。

expire存活時間 可選。規定 cookie 的有效期。

Path 路徑 可選。規定 cookie 的服務器路徑。

domain 網域 可選。規定 cookie 的域名。

secure安全性 可選。規定是否通過安全的 HTTPS 連接來傳輸 cookie。

變數名稱可自訂,存活時間就是你希望這個 cookie 在用戶端電腦儲存多久,

請使用時間參數 time()+秒 【time()為以 int的型態取得當前時間,date()則

是以 string 型態取得】

<?php

/* 假設先前已經有判斷是否為正確的帳號密碼 */

setcookie("account", "james", time()+3600); //此段變數是存在 Client

端瀏覽器內

?>

這樣的寫法是說我們有一個變數叫 account,值是 james,儲存的時間為 3600

秒。

第二步、讀取 cookie

<? php

if($_COOKIE['account ']==True)

echo "你的帳號是".$_COOKIE['account '];

else

echo "尚未登入";

?>

需要注意的地方是 $_COOKIE 必須用大寫英文字母唷!不然沒辦法讀取。

第三步、刪除 cookie

如果你要把 cookie 刪掉的話可以直接使用 setcookie,然後變數值給空値就

可以了,時間記得一併減掉比較保險。

<?php

setcookie("account", "", time()-3600);

?>

(2)方法二: 在驗證帳號密碼無誤後,以 SESSION 存放使用者的帳號作為是否已

登入的辨識。

第一步、啟用 session : session_start()

在你使用 session 來記錄用戶的資訊前,要先用 session_start() 這個函

式,告訴系統準備開始使用,請記住 session_start() 一定要放在網頁的最上

方還沒有輸出任何東西之前,也就是類似下面的範例,如果前面出現了任何的

輸出可是會出錯的唷!這也是一般人常碰到的問題。

第二步、給變數值並記錄在伺服器上

我們設定了一個 account 的變數,並給他一個值為"james",接著這個

account= james的 session設定就存在伺服器上了。

<?php

/* 假設先前已經有判斷是否為正確的帳號密碼 */

session_start(); //此變數是存在 Server 端內

$_SESSION['account']="james"; //此變數是存在 Server端內

?>

第三步、取得 session 的值,使用 $_SESSION["變數名稱"];

<?

if($_SESSION['account ']==True)

echo "你的帳號是".$_SESSION ['account '];

else

echo "尚未登入";

?>

第四步、刪除 session

其實預設伺服器會自動刪除超過有效時間的 session,但有的情況是必須讓用

戶操作的時候可以自己刪除,像是會員登出,希望做到主動清除後馬上變成登

出狀態,這個時候可以使用以下兩種方式清除:

unset($_SESSION['變數名稱']);

session_destroy();

第一種方法是直接給變數名稱,單獨刪除該筆記錄,第二種方法則會將全部的

session 清除。

在前兩個範例中你可以發現程式碼與結果應該都相同,但其中差別即是範例 1

存在 COOKIE 內的變數可能被駭客竄改或竊取,而範例 2的 SESSION 只要伺服器

維護方有做控管維護,使用者就不需擔心被竊取與盜用。

第十章Q&A

1. IIS 和 Apache有辦法併存嗎?

A:IIS 和 Apache都是以 Port:80為預設值,只需要把 Port值設定成不同值

即可,不過通常都會選擇其中一個 Web Server 使用,請參照附錄 B 的說明。

(Ex:Apache 的 Port:80然後把 IIS的 Port 設定成其他值即可)

2. PHP 如何 check error

A:PHP 的語法比較自由、寬鬆,並不像其他程式語言那麼嚴謹,若是要檢查哪

一行指令有語意錯誤(semantic error)或語法錯誤(syntax error)有下列三個

方法來檢查錯誤。

1. 把 PHP檔放到 XAMPP路徑 C:\xampp\底下的 htdocs資料夾,再用瀏覽器

去執行即可。

2. 使用 dreamweaver 編輯 PHP,即可預覽顯示。

3. 若是資料庫相關錯誤,可參照第六章的說明使用相關的 API,如:

mysqli_connect_errno()、mysqli_connect_error()。

3. 開啟 skype時會造成 AppServ的 http://localhost 無法連入使用?

A:因為 skype會佔用 80/443 Port來對外連線,把預設項目關閉即可同時使用

skype及 XAMPP Control Panel。

附錄 A: 編輯工具

Notepad++

輔助小工具 Notepad++,可取代記事本,可幫 PHP縮排,標顏色,體積輕巧

不佔系統記憶體,支援多分頁功能。

官方網站:http://notepad-plus-plus.org/zh/

Aptana Studio3

為網頁開發者所使用的軟體,支援大部分的網頁語言編輯撰寫功能。

官方網站:http://www.aptana.com/products/studio3/download

附錄 B: Apache 因 Port 被占據而無法啟動處理方法

如 Apache 因 Port:80 被占據而無法啟動,請參照以下方式處理:

方法一:若是和 Windows內建的 IIS衝突(都是 80 port),可至[控制台]-

>[系統管理工具]->[電腦管理]中的[服務與應用程式]執行以下步驟

若是 Windows 8 以前的系統,選擇[Internet Information Service

(IIS)管理員],停止服務後重啟 Apache。

若是 Windows 10,則是在服務中選[World Wide Web Publishing

Service Properties],將此服務停止,或者至[控制台]->[程式集]-

>[程式和功能]->[開啟或關閉 Windows 功能],關閉[Internet

Information Service]功能,再重啟即可。

方法二:

1. 開啟 XAMPP Control Panel,點選「Config」按鈕之後選擇

「Apache(httpd.conf)」選項。

2. 將#Listen 12.34.56.78:80 下的 Listen 改為 8888或其他 Port,就能排除

問題。

注意:如有更改 Port,連上系統網址皆須加上自己更改的 Port,例如原網址為

http://localhost,若將 Port改為 8888,在此須將網址改為

http://localhost:8888,同樣,若要前往的網址為

http://localhost/phpmyadmin,網址則須改為

http://localhost:8888/phpmyadmin。

附錄 C: PHP PDO語法

以下為 PHP Data Objects (PDO)的使用方式,補充第六章。

連接資料庫的範例(db_pdo_conn.php):

<?php

$user = 'root'; //資料庫使用者名稱

$password = 'pass'; //資料庫的密碼

try{

$db = new

PDO('mysql:host=localhost;dbname=test;charset=utf8',$user,$pa

ssword);

//之後若要結束與資料庫的連線,則使用「$db = null;」

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

}catch(PDOException $e){ //若上述程式碼出現錯誤,便會執行以下

動作

Print “ERROR!:" . $e->message();

die();

}

?>

新增資料範例:

<?php

//連接資料庫

include_once "db_pdo_conn.php";

//設定想要新增入資料庫的資料內容如下

$no = 6;

$name = "ivan";

$class1 = 90;

$class2 = 95;

$class3 = 100;

//設定要使用的 SQL指令

$query = ("insert into t1 values(?,?,?,?,?)");

$res = $db->prepare($query);

//執行 SQL 語法

$res->execute(array($no,$name,$class1,$class2,$class3));

//以上寫法是為了防止「sql injection」

//一般直接下 query的寫法

$full_query = "insert into t1 values (6,'ivan',90,95,100)";

$db->query($full_query);

?>

查詢資料範例:

<?php

include "db_pdo_conn.php";

$query = "SELECT * FROM t1";

$res = $db->query($query);

$row = $res-> fetchAll();

for($i=0; $i<count($row); $i++){

echo "#".$row[$i]['no'].' '.

"name:". $row[$i]['name'].' '.

"class1:".$row[$i]['class1'].' '.

"class2:". $row[$i]['class2'].' '.

"class3:". $row[$i]['class3'].' '.

'<br>';

}

?>

刪除資料範例:

<?php

include "db_pdo_conn.php";

//使用 prepare 的寫法

$res = $db->prepare("DELETE FROM t1 WHERE no=?");

$no = 6;

$res->execute(array($no));

//直接 query 的寫法

$db->exec("DELETE FROM t1 WHERE no=6");

?>