PHP程式設計

Download Report

Transcript PHP程式設計

PHP的由來
在古早古早的時候,也就是1994年。當時有個叫Rasmus Lerdorf的人,
他用Perl寫了一些後端的程式,記錄有哪些人看過他的線上履歷表。慢慢
地,一些網友對他所寫的程式碼產生興趣。於是,Rasmus Lerdorf就整理
這些程式碼,包裝成一個叫作 ”Personal Home Page”的工具。基於個人的
興趣,Rasmus Lerdorf又寫了一個腳本語言的核心引擎。然後,又加上了
能處理HTML表單輸入的工具,稱作 “Form Interpreter”簡稱FI。在1995年
完成的這個版本,當時稱作 “PHP FI”,也有人稱之為 ”PHP2”。
PHP/FI開發出來之後,受到網站開發者的極大的回響,使用PHP/FI來開發
網站程式的人越來越多。在1997年中的時候,PHP從Rasmus Lerdorf個人維
護的開發專案,轉變成一個重要的網站開發技術。PHP的開發與維護也轉由
一個由Rasmus Lerdorf本人和Andi Gutmans、Zeev Suraski、Stig Bakken、
Shane Cavaveo、以及Jim Winstead等人所組成的團隊來負責。在1998年6月
的時候,Zeev Suraski和Andi Gutmans改寫了PHP語言的解析器,並公佈這新
的版本,稱之為PHP3。
PHP簡介



PHP代表:超文本預處理器(PHP:
Hypertext Preprocessor)。
PHP是開放源碼的通用腳本語言,特別適
合用來開發網站程式,可以內嵌在HTML
碼。
PHP程式的原始碼是純文字,所以可以用
任何可處理純文字檔的文字編輯器,如:
記事本、vi、emac等,來撰寫PHP程式。
讓網頁活起來
傳統網頁:1.靜態的(Static),內容固定不變
2.不容易更新與維護
純HTML碼的網頁
動態網頁:1.內容是動態的
2.內容可以自動更新
3.互動性高
PHP,ASP, JSP, VB Script, Java Script, DHTML 等
HTML如何運作?
步驟1:要求瀏覽網頁 A.htm
步驟2:下載A.htm
伺服端
網頁伺服器
用戶端
瀏覽器
HTML碼不受保護
步驟3:瀏覽器翻譯後顯示
PHP如何運作 ?
步驟1:要求瀏覽網頁 A.php
步驟3:下載A.htm
伺服端
Apache網頁伺服器
用戶端
瀏覽器
PHP程式受到保護
要瀏覽PHP網頁,而不是開啟PHP網頁
步驟2:伺服器執行PHP程式並轉換成純HTML碼
何謂HTML?
Hyper Text Markup Language(HTML)
HTML本身並非程式設計,只不過是標示
(Markup)、強調及組織一般性的文字。
WWW上製作HomePage的語言,是一
種標記語言。需透過瀏覽器翻譯標記後方可呈現 。

HTML 標準之原始資料
(HTML 4.0, 1997/11, W3C)
除標準HTML標記外,各瀏覽器廠商也自訂專屬的標記
何謂標記語言?
Tag Language
製作HTML文件的過程中必須加入所謂的標記【T
AG】,好讓瀏覽器知道該如何處理及呈現原始文件
的內容。
在HTML語法中,除了少數例外,大都是以:<XX>
開始,以</XX>結束;其中XX就是HTML的標記。
Web Server vs. Browser
Client 端
Web Server
下載 HTML文件,
由客戶端瀏覽器執行
*.htm
瀏覽結果會因Browser不同而不同
*.htm
HTML標記
有頭有尾,中間夾住所要顯示的文字或圖形
純文字檔(使用一般的文字編輯器就可以作業)
無大小寫之分
檔名需要是.HTM或是.HTML
<標籤名稱 屬性 =“設定值”> ..要顯示之文件資料.. </標籤名稱
>
<Tag Attributes ="Value"> ..Document Of Display.. </Tag>
HTML標記類別
文件結構標籤(Document Structure Tags)
區段格式標籤(Block Formatting Tags)
字元格式標籤(Character Formatting Tags)
清單標籤(List Tags)
連結標籤(Anchor Tag)
多媒體標籤(Multimedia Tag)
表格標籤(Table Tags)
表單標籤(From Tags)
常見HTML編寫工具
 OFFICE
 FrontPage(我們選用這個)
 Dreamweaver
 Coreldraw
 Macromedia系列 : Flash, Director, Authoware
產生html碼容易,不過你要看的懂才有辦法修改
與加入新的東西
標準HTML之架構
<HTML>
<HEAD><TITLE>瀏覽器抬頭列顯示的訊息</TITLE></HEAD>
<BODY>
網頁主體內容
</BODY>
</HTML>
HTML
表格標籤
表格元件
1. 用以定義以橫列與直欄構成的表格。
2. 包含許多選擇性元件與屬性。
<Table> …… </Table>
基本表格樣本
<TABLE>
<CAPTION>表格標題</CAPTION>
<TR>
<TH>標題一<TH>標題二
<TR>
<TD>第一列,內容一<TD>第一列,內容二
<TR>
<TD>第二列,內容一<TD>第二列,內容二
</TABLE>
畸形表格的產生
ColSpan 與 RowSpan 屬性
ColSpan=3
RowSpan=2 ColSpan=2
HTML
表單標籤
提供使用者輸入傳送資訊
表單需必須配合著CGI、JAVA Script程式或
是ASP程式來運作,不然表單單獨存在的
意義並不大。
您的網頁將擺脫單向呈現,而開始邁入和
使用者互動的階段!
表單基本格式
<FORM method=post或get action=處理表單程式>
不同表單類型 ….
送出/重寫按鈕
</FORM>
填寫完畢按下送出按鈕
表單
.htm或.php
送回結果 .htm
處理程式
Abc.php
表單與處理程式可以是同一個檔案
文字輸入列
每個表單之所以會有不同的類型,原因就在於
TYPE=“表單類型”設定的不同而已,我們就先
來看看第一個類型:文字輸入列。
文字輸入列的形態就是TYPE="TEXT,其使用方法如下:
呈現結果
原始碼
姓名:
<FORM>
姓名:<INPUT TYPE="TEXT" NAME="NAME" SIZE="20">
</FORM>
單選核取表單
利用TYPE=“RADIO”就會產生單選核取表單,
單選核取表單通常是好幾個選項一起擺出來供
使用者點選,一次只能從中選一個,故為單選
核取表單。
呈現結果
原始碼
性別:男
女
<FORM>
性別:
男 <INPUT TYPE="RADIO" NAME="SEX" VALUE="BOY">
女 <INPUT TYPE="RADIO" NAME="SEX" VALUE="GIRL">
</FORM>
複選核取表單
利用TYPE=“ CHECKBOX ”就會產生複選核取表單,
複選核取表單通常是好幾個選項一起擺出來供使用者
點選,一次可以同時選好幾個,故為複選核取表單。
呈現結果
原始碼
喜好:
電影
看書
<FORM>
喜好:
<INPUT TYPE="CHECKBOX" NAME="SEX" VALUE="MOVIE">電影
<INPUT TYPE="CHECKBOX" NAME="SEX" VALUE="BOOK">看書
</FORM>
密碼表單
利用TYPE=“ PASSWORD ”就會產生一個密碼表單,
密碼表單和文字輸入表單長得幾乎一樣,差別就在於
密碼表單在輸入時全部會以星號來取代輸入的文字,
以防他人偷窺。
呈現結果
原始碼
請輸入密碼:
<FORM>
請輸入密碼:<INPUT TYPE="PASSWORD" NAME="INPUT">
</FORM>
送出/重寫按鈕
通常我們表單填完之後,都會有一個送出按鈕以及清除
重寫的按鈕,分別是利用TYPE=“ SUBMIT ”及
TYPE=" RESET "來產生,相當的簡單易用。
呈現結果
原始碼
送出資料
重新填寫
<FORM>
<INPUT TYPE="SUBMIT" VALUE="送出資料">
<INPUT TYPE="RESET" VALUE="重新填寫">
</FORM>
大量文字輸入元件
有時候我們會希望讓使用者輸入比較大量的文字,此時,
文字輸入列就顯得不敷使用,因此我們就可以利用
<TEXTAREA></TEXTAREA>來產生一個可以輸入大量文
字的元件,夾在兩個標籤中的文字會出現在框框中,可作
為預設文字。
請輸入您的意見:
呈現結果
原始碼
<FORM>
請輸入您的意見:<BR>
<TEXTAREA NAME="TALK" COLS="20" ROWS="3"></TEXTAREA>
</FORM>
下拉式選單
下拉式選單令整個網頁看起來有很專業的感覺,我們
只要利用<SELECT NAME=“名稱”>便可以產生一個下
拉式選單,另外,還需要配合<OPTION>標籤來產生選
項,這樣才算完整喔!
呈現結果
原始碼
您喜歡看書嗎?:
<FORM>
您喜歡看書嗎?:
<SELECT NAME="LIKE">
<OPTION VALUE="非常喜歡">非常喜歡
<OPTION VALUE="還算喜歡">還算喜歡
<OPTION VALUE="不太喜歡">不太喜歡
<OPTION VALUE="非常討厭">非常討厭
</SELECT>
</FORM>
非常喜歡
隱藏欄位
表單中有時有些東西因為某些因素,不想讓使用者看到,
但因程式需要卻又不得不存在,此時,我們就可以利用
TYPE=" HIDDEN "來產生一個隱藏的欄位。
呈現結果
原始碼
隱藏欄位: 看不到
<FORM>
隱藏欄位:<INPUT TYPE="HIDDEN" NAME="NOSEE" VALUE="看不到">
</FORM>
PHP
基本語法介紹
PHP基本語法




內嵌在HTML標籤中,使用
<?php php程式 ?> 或
<? php程式 ?> 或
<% php程式 %> 或(ASP亦使用此表示,要設定
php.ini )
<script language=“php”>php程式</script>
標示
需要經由Apache Server轉譯後才可以動作
副檔名為 .php或 .php3
每個命令結尾需要加上;
PHP基本語法


程式註解,使用
// 表示單行註解
/* 中間文字是註解 */ 表示多行註解
註解內不可以再出現註解符號
PHP不像HTML可以直接使用瀏覽器執行
PHP基本語法-基本輸出

輸出指令
echo
單引號與雙引號對變數處理的方式不同
使用echo會比print略有效率。

PHP與HTML
嵌入HTML標籤中
在HTML標籤外
獨立存在
PHP
資料型態
PHP資料型態





在PHP中,變數之前必需加$的符號
PHP的大小寫是有差別的,所以在使用變
數時,須注意大小寫是否一致
變數使用前不需要事先宣告
使用變數時被指定的值的型態就是變數的
型態
PHP共有 8 種資料型態
PHP資料型態
名稱
Boolean
型態
布林型態
範例
$a=True;
Integer
Float
String
Array
整數型態
浮點數型態
字串型態
陣列型態
$a=10;
$a=1.2345;
$a=“Hello !!”;
$a[0]=20;
Object
Resource
Null
物件型態
外部資源
Null型態
$a=new Objectclass;
$a=mysql_connect();
$a=NULL;
Boolean布林型態



只有真(True)與假(False)兩種值
可以直接設定
$a=True;
$b=False;
其他型態轉換成布林型態
Integer整數型態


10進制,8進制(0)與16進制(0x)三種
表示方法
[+|-] [0|0x] 數值
$a=123;(10進制)
$b=-456;(10進制)
$c=0123;(8進制相當於10進制的83)
$d=0x45;(16進制相當於10進制的69)
Double浮點數型態


一般與指數二種表示法
表示方法
$a=12.3456;(一般)
$b=-123.456;(一般負浮點數)
$c=1.23e-2;(指數)
$d=1.23e2;(指數)
String型態


文字的串列組合
在 PHP 中有三種指定字串的方法:
雙引號(“)
單引號(‘)
heredoc 語法(<<<)(補充)
String型態-雙引號




包含在雙引號裡頭的可以是一般文字字串。
如果含有變數的話,會以該變數的值代入。
與 C、Perl 一樣,PHP 也允許以「\」代表跳脫(escape)字元,
在雙引號中加入具有特殊用途的符號,如:
\n:換行(newline)
\r:送出 CR(carriage)
\t:跳位(Tab)
\\:反斜線(backslash)
\$:錢字號(dollar sign)
\“:雙引號(double-quote)
\[0-7]{1,3}:八進位表示法的 regular expression
\x[0-9A-Fa-f]{1,2}:十六進位表示法的 regular expression
例:<?
$str_1 = ”I am here!“;
$str_2 = ”str_1 : $str_1“;
echo $str_2;
?>
輸出的結果將是:str_1 : I am here!,原先被包含在雙引號中的
變數($str_1)以其值代入了。
String型態-單引號




使用單引號要注意的是,在單引號中的變數不會
以變數值代入。
另外,可以被 escape 的字元只有兩個:\‘ 與 \\。
例:<?
$str_1 = 'I am here!';
$str_2 = 'str_1 : $str_1';
echo $str_2;
?>
輸出的結果將是:str_1 : $str_1,原先被包含在單
引號中的變數($str_1)不會被其值所取代。
String型態

兩個字串可以以”.”符號進行連接。

附錄字串函數(課本好像沒有?)
http://www.peterpanstudio.com/ver_two/cgi/in
dex_php.htm
http://tw2.php.net/manual/en/funcref.php
String型態-heredoc synex



這種設定字串的方法只在 PHP4 提供,主要用於引用一整
段文字,如: <?
$a = “abc”;
$str = <<< CHENSH
中文“測試”有雙引號<br>
中文‘測試’ $a 有單引號與變數
CHENSH;
echo $str;
?>
輸出的 HTML 碼:
中文“測試”有雙引號
中文‘測試’ abc 有單引號與變數
上述的 CHENSH 是用來標示文字段落起迄位置的
identifier,可自行命名。另外,結束的 identifier 一定要放
在該行的行首,否則將導致錯誤。
Array陣列型態

集合相同屬性的變數所成的集合。
$car0
$car1
$car2
$car3
$car4
$car[0] $car[1] $car[2] $car[3] $car[4]




可以是二維、三維或者多維陣列,其中的元素也很自由,
可以是 string、integer 或者 double,甚至是 array。
語法:$陣列名稱[指標]
陣列由第 0 個元素開始配置。
例:
$a[0] = 1234;
$a[1] = 567;
$a = array(1234, 567);
Object物件型態
類別(資料成員與成員函數)與物件(使用類別)。
 物件的使用上比較麻煩,要先宣告類別,甚至必須先要有
方法,方可使用物件。
 例:
<?
class foo {
function do_foo () {
先宣告類別
echo "Doing foo.";
}
}
$bar = new foo;
$bar -> do_foo ();
?>
執行結果:
Doing foo.

資源型態
負責與外部資源(檔案、資料庫、 影像等)
聯繫。
 不可以直接操作,需要透過特殊函數才能
操作。
 例如MySQL,需要透過MySQL函數來操作。

無法進行型態轉換
Null型態
表示變數裏沒有任何值,而不是0。
 例如:

$n1=NULL;
unset($n2);
echo $n1;
echo $n2;
echo $n3;
型態轉換



您可以強迫將變數的型態轉換,例如:
<?
$a = 10; // $a is an integer
$b = (double)$a; // $b is an double
?>
當字串被轉換成數值資料時,原則上是:
1. 如果字串含有 .、e 或 E,則當成是 double 型態,否則視為 integer。
2. 以字串的開頭字元能否辨識為準,無法辨識的均轉為數值 0。
例: <?
$foo = 1 + "10.5";
// $foo is float (11.5)
$foo = 1 + "-1.3e3";
// $foo is float (-1299)
$foo = 1 + "bob-1.3e3";
// $foo is integer (1)
$foo = 1 + "bob3";
// $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 1 + "10 Little Piggies"; // $foo is integer (11)
$foo = "10.0 pigs " + 1;
// $foo is integer (11)
$foo = "10.0 pigs " + 1.0;
// $foo is float (11)
?>
變數與常數
內定變數
在 PHP 執行時,有部份預設的變數可用,您可以執行
phpinfo( ) 以查看這些變數。例如:
SERVER_NAME:chensh.loxa.edu.tw
HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE
6.0; Windows NT 5.1; .NET CLR 1.1.4322)
SCRIPT_FILENAME:/home/chensh/php/A_4.php
變數與常數
• 如果 php.ini 中 register_globals 被設定為 on 的話,
上述的變數直接在前頭加上 $ 符號即可使用,例如:
$SERVER_NAME。
• 倘若 register_globals 被設定為 off(預設值)的話,
上述變數的讀取方法就不一樣了,它們被當作是
$_SERVER 陣列的一個元素,請用 $_SERVER['變數
名稱'] 的方式來讀取它,例如:
$_SERVER['SERVER_NAME']。
變數影響範圍
• 變數的影響範圍通常是 global,自啟用起,至該程式結束均
有效
• 在自定的函數中,變數的影響範圍是 local,只侷限在函數內
部。例: <?
$a = 1;
$b = 2;
function sum_test( ) {
return $a + $b;
}
echo sum_test( );
?>
執行結果為 0,因為 $a 與 $b 的影響範圍無法達到
sum_test( ) 內部。
變數影響範圍
• 若希望在自定函數內引用外部的變數,則使用關鍵字 global 宣告,或是
使用 global 變數陣列 $GLOBALS[ ]。
例:<?
$a = 1;
$b = 2;
function sum_test_1( ) {
global $a, $b;
return $a + $b;
}
function sum_test_2( ) {
return $GLOBALS[“a”] + $GLOBALS[“b”];
}
echo sum_test_1( );
echo sum_test_2( );
?>
sum_test_1( ) 與 sum_test_2( ) 的執行結果均為 3。
以變數為名的變數(Variable Variables)
在 PHP 中,變數的名稱也可以是變數,例如:
<?
$a = "hello";
$$a = "world";
echo $a . " " . $$a; // 輸出結果:hello world
echo $a . " " . ${$a}; // 輸出結果:hello world
echo $a . " " . $hello; // 輸出結果:hello world
?>
常數
在PHP中,常數的名稱一樣有大小寫之別,
但是前頭不必加上「$」字元,因此,若
將常數置於字串裡頭的話,將不會被系統
所辨識出來。
可以使用 define( ) 函數來自定常數。
__FILE__:/home/chensh/php/A_4.php
PHP_OS:FreeBSD
PHP_VERSION:4.3.3