Professional Documents
Culture Documents
• AMP 整合套件
– XAMPP 1.6.7
• 開發工具
– EmEditor
– PSPad
– Dev-PHP
– PHP Designer 2007
Hello
<html>
<head>
<title>First program</title>
</head>
<body>
<?php echo “Hello ! ";?>
</body>
</html>
程式的執行
<?php
// 單行註解,同 C++ 語法
/* 多行註解,
本例採用行的註解方式
*/
?>
常數與變數
• 常數 圓周率 ..
• 變數 $x , $y , $z..
常數型態
• 一經程式定義後不會因為程式的執行而改變其內容 ( 值 ), 這
種形式的資料,我們稱之為常數。
預設常數
自定常數
1: <html> 第 5 行
2: <title>PHP 預設常數 </title> PHP_VERSION 是
3: <body> PHP 的預設常數代表
4: <?php PHP 的版本。如圖 程
5: echo "PHP 的版本是 " . PHP_VERSION . "<P>" ; 式執行後會顯示你所使
6: echo " 目前工作平台的作業系統是 ". PHP_OS 用的 PHP 版本編號。
7: ?> 第 6 行顯示目前工作
8: </body> 平台的作業系統 .
9: </html>
上面瀏覽器連接到 Windows
2000, 而下面瀏覽器是連接到
Linux Server 。在不同伺服器
上執行 PHP_OS 的內容都不
同。 另外 , 讀者是否有注意
到預設常數的名稱前面並沒
有加上 "$", 而且常數名稱也
一定要大寫才可以 , 如果寫
成小寫就不是預設成數了 ,
讀者請勿混淆。
自定常數
• 程式設計者要自行定義常數時,可使用
define() 函數。
• define() 的格式如下:
define ( 常數名稱 , 常數值 , [case_insensitive])
第一個參數是設定常數的名稱 ,
第二個參數是設定常數的內容 ,
第三個參數是一個是否視大小寫為相同的選項 .
1: <?php
2: define (HELLO_MSG,"Good morning") ;
3: ?>
4: <html>
5: <title> 自定常數 </title>
6: <body>
7: <?php
8: echo "Hi, ". HELLO_MSG ."<p>" ;
9: echo hello_msg . " everyone" ;
10: ?>
11: </body>
12: </html>
第 2 行定義常數的時第三個選項設定為 1, 這個意思表示常數的名稱不分
大小寫。也就是說 , HELLO_MSG 和 hello_msg 都會被看成是同一個定義
過的常數。所以第 8-9 行兩個 echo 都可以正確地顯示出我們所想要顯示
的訊息。第 10 行 PHP_VERSION 並沒有設定在第 1-3 行中 , 為什麼沒
有產生錯誤 ? 因為 PHP_VERSION 是 PHP 的預設常數 , 所以不需要定
義就可以使用 .
變數的規則
– 變數以 ‘ $’ 開頭
– 變數不用宣告型別
但可用 cast 或者 settype() 明確的設定
– 變數的型別
整數、浮點數、字串、陣列和物件﹍等 ( 詳見
下一頁 )
– 物件用 new 來產生
– 英文字母大小寫會被視為不同
$A 和 $a 是兩個不同的變數
( 變數 ) 資料型態
名稱 型態 範例
Boolean 布林型態 $a=True;
‘PHP_SELF’ 目前執行的檔案名稱
‘SERVER_NAME’ 伺服器的名稱
‘SERVER_SOFTWARE’ 伺服器使用的軟體
‘DOCUMENT_ROOT’ 文件的根目錄
‘HTTP_USER_AGENT’ 使用者相關資訊
‘REMOTE_ADDR’ 遠端使用者的位址
‘REMOTE_PORT’ 遠端使用者的連線埠
‘ PHP_AUTH_USER’
‘PHP_AUTH_PW’
在取得變數內容時 , 以變數名稱為陣列指標即可取得資訊 . 例如
SERVER_NAME 則可以以 $_SERVER[‘SERVER_NAME’] 取得資訊
.
使用 PHP 預設變 數
1: <?php
2: echo " 目前執行的檔案名稱 ". $_SERVER['PHP_SELF']. "<br>";
3: echo " 伺服器使用的軟體 ". $_SERVER['SERVER_SOFTWARE']. "<br>";
4: echo " 文件的根目錄 ". $_SERVER['DOCUMENT_ROOT']. "<br>";
5: echo " 使用者相關資訊 ". $_SERVER['HTTP_USER_AGENT']. "<br>";
6: echo " 遠端使用者的位址 ". $_SERVER['REMOTE_ADDR']. "<br>";
7: echo " 遠端使用者的連線埠 ". $_SERVER['REMOTE_PORT']. "<br>";
8: ?>
變數的使用
• $mystring = " 我是字串 ";
$WilsonPeng = " 真是認真的作者 ";
$NewLine = " 換行了 \n";
• $int1 = 38;
$int2 = 49;
$hexint = 0x10;
• $float1 = 1.732;
$float2 = 1.4E+2;
• $MyArray1 = array(" 子 ", " 丑 ", " 寅 ", " 卯 ");
$MyArray2 = array(
" 地支 " => array(" 子 ", " 丑 ", " 寅 ", " 卯 "),
" 生肖 " => array(" 鼠 ", " 牛 ", " 虎 ", " 兔 "),
" 數字 " => array(1, 2, 3, 4)
);
資源型態 (Resource)
• 資源型態是一種特殊的資料型態 , 不同於之前的資料型態 ,
資源型態變數是負責維持與外部資源的聯繫 .
– 例如開啟的一個檔案 , 資料庫連線 , PDF, 影像等等
• 資源型態變數不可以直接操作 , 如果需要操作資源型態變數
則必須藉由特殊的函數才可以操作 .
• 例:
MySql 對 PHP 來說是一個外部資源 , 因此當 PHP 需要操作
資料庫時就必須藉由 PHP 中的 MySql 函數來操作 .
$m=mysql_connect(‘localhost’,’root’,’1234’);
NULL 型態
• NULL 也是一個比較特殊的型態 . 一個變數如果被設定成
NULL 就表示這個變數裡沒有任何的值 .
• 有三種情形會被認定變數的值為 NULL
$n1=NULL;
unset($n2);
echo $n1;
echo $n2;
echo $n3;
$n1 直接設定為 NULL, 所以 $n1 為 NULL. unset() 函數會清除
變數的內容 , 所以 $n2 為 NULL. $n3 沒有任何的設定和預先的處
理 , 所以 $n3 的內容也為 NULL. 結論是上面的例子中 3 行 echo
都不會有任何的輸出 .
運算符號
• 算術運算
• 字串運算
• 指定運算
• 邏輯運算
算術運算
符號 意義
+ 加法運算
- 減法運算
* 乘法運算
/ 除法運算
% 取餘數
++ 累加
-- 遞減
算術運算範例
• <?php
$a = 8;
$b = 2;
$c = 3;
echo $a+$b."<br>\n";
echo $a-$b."<br>\n";
echo $a*$b."<br>\n";
echo $a/$b."<br>\n";
echo $a%$c."<br>\n";
$a++;
echo $a."<br>\n";
$c--;
echo $c;
?>
字串運算
• 就是 .
• 善用「 .= 」 ( 幫幫忙,不是 =.=)
字串運算範例
<?php
$a = ‘ 清華大學讀書會,’ ;
$b = ‘ 歡迎各位加入!’ ;
echo $a.$b;
?>
輸出結果為 清華大學讀書會,歡迎各位加入!
指定運算
符號 意義
= 將右邊運算式所得的值指定給左邊變數 ( 記憶體位址 )
+= 將右邊的值加到左邊
-= 將右邊的值減到左邊
*= 將左邊的值乘以右邊
/= 將左邊的值除以右邊
%= 將左邊的值對右邊取餘數
.= 將右邊的字串連結到左邊
指定運算範例
<?php
$a = 5;
$a += 2; // 即 $a = $a + 2;
echo $a."<br>\n";
$b = " 哇 ";
$b .= " 哈 "; // $b = " 哇哈 ";
$b .= " 哈 "; // $b = " 哇哈哈 ";
echo "$b<br>\n";
?>
邏輯運算
符號 意義
< 小於
> 大於
<= 小於或等於
>= 大於或等於
== 等於
!= 不等於
&& and 而且 (And)
|| or 或者 (Or)
xor 互斥 (Xor)
! 不 (Not)
邏輯運算範例
<?php
$a = 5;
if ($a != 5) {
echo ’$a 不是 5’;
} else {
echo ’$a 是 5’;
}
?>
讀取外部變數
•互動式網頁最大的特色就是和使用者溝通
, 最重要的問題就是如何取得使用者的輸
入的資訊。
•讀取使用者輸入的資訊只是 PHP 由外部
輸入變數的其中一種功能而已。
•除了取得使用者資訊外 , 伺服器資訊、
Cookie 、 Session 等等對 PHP 來說都是
屬於外部變數或是全域變數。
全域變數陣列
陣列名稱 說明
$GLOBALS 目前程式碼範圍中有效的變數。
$_SERVER 和伺服器有關的變數 ,
$_GET 利用 HTTP GET 方式傳回的變數
$_POST 利用 HTTP POST 方式傳回的變數
$_COOKIE 利用 HTTP COOKIE 方式傳回的變數。請參閱第 18
章
$_FILES 上傳檔案時的變數
$_ENV 環境變數。請參閱 phpinfo() 中 PHP Variables
$_REQUEST 讀取任何一種使用者輸入方式的變數
$_SESSION 讀取已註冊的 SESSION 變數 。請參閱第 18 章
互動式的網頁製作
•由使用者端輸入所需的資訊
• HTML 表單輸入
• PHP 的 $_GET 及 $_POST 陣列
<html>
<title> 表單輸入 </title>
<body>
<b> 凱文瑞克公司線上訂購系統 <p></b> 輸入公司名稱、電話號
======= 客戶資料 =======<p> 碼和訂購數量。
<form action="extra.php" method="get">
公司名稱 <INPUT TYPE=TEXT NAME=company SIZE=20><p>
公司地址 <INPUT TYPE=TEXT NAME=address SIZE=20><p>
訂購產品數量 <INPUT TYPE=TEXT NAME=amount SIZE=5><p>
<INPUT TYPE=SUBMIT value=" 填好了 ">
<INPUT TYPE=RESET VALUE=" 重填 ";
</form>
</body>
</html>
在輸入完畢後三個資料分別以
company 、 address 和 amount 三個名稱
傳回伺服器中給表單所指定的 PHP 程
式
1: <html>
2: <title> 取得外部變數 </title>
3: <body> 取得外 部傳回的變 數值
4: <?php
5: echo $_GET['company'] ." 您好 : <p>" ;
6: echo " 感謝貴公司訂購本公司產品 ". $_GET['amount'] ." 個 ," ;
7: echo " 貨款共 ".($_GET['amount']*100)." 元整 .<p>" ;
8: echo " 貨品將於三日內送達 $_GET['address']<p>" ;
9: echo " 再次感謝您的愛護 .<p>" ;
10: echo " 凱文瑞克公司 敬上 " ;
11: ?>
12: </body>
13: </html>
由執行結果可以看到三個變數
我們並沒有設定其初始值 , 而
其內容是由 HTML 表單所傳
回來的資料存入。當然在
PHP 程式中變數的名稱必需
和 HTML 表單中的名稱相同。
確認網頁中顯示公司的名稱、
公司的地址以及訂購的數量 ,
並依訂購的數量計算出應付的
貨款。
1: <html>
2: <title>Text</title>
3: <body>
4: <form action="8-24.php" method=get>
5: <input type=text name=str1><p>
6: <input type=text name=str2 size=30><p>
7: <input type=text name=str3 size=50 value="Hello my friend"><p>
8: <input type=submit value=" OK ">
9: <input type=reset value="Reset">
10: </form>
11: </body>
12: </html>
輸入 3 個文字串 , 分別是
str1 、 str2 和 str3 。其中分別
設定 size 和 value 屬性。 表
單以 GET 的方式傳送給 8-
24.php 。
範例 8- 24
1: <?php 接收 8-23.htm 傳來的資料。
2: echo "str1 = ".$_GET['str1']." <br>"; 因為是採用 GET 的方式所以
3: echo "str2 = ".$_GET['str2']." <br>"; 要用 $_GET['str1'] 取得 外部
4: echo "str3 = ".$_GET['str3']." <br>"; 變數 $str1 的內容。同樣的
5: ?> Password 也可以讀的到。
1: <html>
2: <title>Text</title>
3: <body>
4: <form action="8-24.php" method=get>
5: <input type=text name=str1><p>
6: <input type=text name=str2 size=30><p>
7: <input type=text name=str3 size=50 value="Hello my friend"><p>
8: <input type=submit value=" OK ">
9: <input type=reset value="Reset">
10: </form>
11: </body>
12: </html>
1: <html>
2: <title>Radio</title> 8-25.htm
3: <body>
4: <form action=8-26.php method=get>
5: <input type=radio name=r1 value=1> 選項 A <br>
6: <input type=radio name=r1 value=2> 選項 B <br>
7: <input type=radio name=r1 value=3> 選項 C <br>
8: <p>
9: <input type=radio name=r2 value=1> 選項 X <br>
10: <input type=radio name=r2 value=2> 選項 Y <br>
11: <p>
12: <input type=radio name=r3 value=1 checked> 選項 O <br>
13: <input type=radio name=r3 value=2> 選項 P <br>
14: <input type=radio name=r3 value=3> 選項 Q <br>
15: <input type=submit value=" OK ">
16: <input type=reset value=" Reset ">
17: </form>
18: </body>
19: </html>
以上範例是採用 method=get
所以我們都採用 $_GET[] 陣列
來取得變數值。如果
meth0d=post 請記得要用
$_POST[] 陣列來取得變數值。
PHP 的控制指令
• php 沒有 goto 、不使用 main()
因為只要碰到 <?php ?> 就跑囉…
• If…else 判斷
• switch 判斷
• for 迴圈
• foreach 迴圈 ( 僅對「陣列」 )
• while 迴圈
• break & continue 中斷
• exit & die 結束
if..else 判斷的語法
– if (expr) { statements }
• expr 判斷式,例如 “ $a<=1”
• statements 該執行的程式
• 若程式只有一行,可以省略大括弧 {}
– if (expr) { statements1 }
else{ statements2 }
– if (expr) { statements1 }
elseif { statements2 }
elseif { statements3 }
…
else { statements_other }
if..else 判斷的範例
<?php
$a = 9;
$b = 5;
if ($a > $b){
echo "a 比 b 大 ";
}elseif ($a == $b) {
echo "a 等於 b";
}else{
echo "a 比 b 小 ";
}
?>
switch 判斷的語法
switch (expr) {
case expr1: statement1; break;
case expr2: statement2; break;
default: statementN;
}
注意條件出現的優先性
switch 判斷的範例
<?php
switch (date("D")) {
case "Mon":
echo " 今天星期一,猴子穿新衣 ";
break;
case "Tue":
echo " 今天星期二,猴子肚子餓 ";
break;
case "Wed":
echo " 今天星期三,猴子去爬山 ";
break;
case "Thu":
echo " 今天星期四,猴子看電視 ";
break;
case "Fri":
echo " 今天星期五,猴子去跳舞 ";
break;
default:
echo " 今天放假,不管猴子了 ";
}
?>
If vs switch
<?php <?php
switch (date("D")) { if(date("D")==“Mon”)
case "Mon":
echo " 今天星期一,猴子穿新衣 "; echo " 今天星期一,猴子穿新衣 ";
break;
case "Tue": elseif(if(date("D")==“Tue”)
echo " 今天星期二,猴子肚子餓 "; echo " 今天星期二,猴子肚子餓 ";
break; elseif(if(date("D")==“Wed”)
case "Wed":
echo " 今天星期三,猴子去爬山 "; echo " 今天星期三,猴子去爬山 ";
break; elseif(if(date("D")==“Thu”)
case "Thu":
echo " 今天星期四,猴子看電視 "; echo " 今天星期四,猴子看電視 ";
break; elseif(if(date("D")==“Fri”)
case "Fri":
echo " 今天星期五,猴子去跳舞 "; echo " 今天星期五,猴子去跳舞 ";
break; else
default: echo " 今天放假,不管猴子了 ";
echo " 今天放假,不管猴子了 ";
} ?>
?>
for 迴圈的語法
for (expr1; expr2; expr3) { statements };
expr1 設定初始條件之用
expr2 設定繼續 ( 終止 ) 的條件
expr3 statement 執行完畢後,用來改變條件
,
以供下次的迴圈判斷 (expr2)
statements 迴圈內需執行的程式片段 ( 指令
群)
若程式只有一行,可以省略大括弧 {}
0001 <?php
0002 echo "<pre>";
0003 for($i=1;$i<=9;$i++){
0004 for($j=1;$j<=9;$j++){
0005 $k=$i*$j;
0006 printf("%dX%d=%2d ",$j,$i,$k);
0007 }
0008 echo "<br>";
0009 }
0010 echo "</pre>";
0011 ?>
• foreach 專門使用在陣列的操作。
• 二種格式分述如下:
1) foreach (array_expression as $value)
2) foreach (array_expression as $key => $value)
1) foreach (array_expression as $value)
• 格式
foreach ( 陣列名稱 as $value){
迴圈敘述 ;
}
• 在執行時陣列的 index 先歸零 , 意即
index 指向陣列第 0 個元素 ( 因為陣列從
0 開始 ), 然後每次迴圈依序將陣列元素的
內容放入 $value 變數中 , 直到陣列中每
一個元素都執行一次。
1: <html>
2: <title>foreach</title>
3: <body>
4: 月份縮寫 : <br>
5: <?php
6: $month = array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug',
7: 'Sep','Oct','Nov','Dec') ;
8: foreach ($month as $value)
9: echo "$value <br> " ;
10: ?>
11: </body>
12: </html>
• 格式
foreach ( 陣列名稱 as $key => $value) {
迴圈敘述 ;
}
• 第二種方式除了會將陣列元素依序存入
$value 外 , 也會將陣列指標 index 同時存
入 $key 中。
1: <html>
2: <title>foreach</title>
3: <body>
4: <?php
5: $A = array (0,10,20,30,40,50,60) ;
6: foreach ($A as $key => $value){
7: echo "\$A[$key] : " ;
8: echo "$value <br> " ;
9: }
10: ?>
11: </body>
12: </html>
}
函式的使用
<?php
function add2num($a, $b)
{
return $a+$b;
}
?>
PHP 內建函式
• http://linux.tnc.edu.tw/techdoc/php/php_big5/funcref.html
PHP 手冊
• http://www.php5.idv.tw/modules.php?mod=books&act=index&cid=2
PHP5 網管實驗室
1. 建議先從下列幾個函式庫先看
Array 陣列函式庫
Date 日期與時間函式庫
MySQL 函式庫
Strings 字串函式庫
2. 並不是所有的函式庫裝好之後就有支援,可以查看 phpinfo()
3.MySQL 函式庫在往後的內容會有介紹
4. 往後的內容會介紹如何安裝支援其他函式庫
網頁之間 ( 網址 ) 傳值的原理
• test.php?font=5&color=red
– ? 掛入變數串
– Font 、 color 變數
– 5 、 red 變數的值
– & 串起變數
網址傳值原理
• 觀摩網址傳值
• 先寫 HTML
• 改寫成 PHP
• 測試
– 用 web server 唷 !
PHP 程式練習
(1) 假設學生成績的分數與等級的關係為:
80 分以上 A
70 ~ 79 分 B
60 ~ 69 分 C
50 ~ 59 分 D
49 分以下 F
寫一程式來輸入分數,並轉換成等級印出。