资源描述
厶厥老巢板權所有第一章PHP&MySQL網頁製作如果你選擇了 Linux作爲你的伺服器,那使用PHP&MySQL製作網頁資料庫是 最自然不過的。這樣的組合,就像是你使用NT作爲伺服器,那你就會選擇 ASP+SQL製作網頁資料庫一樣,當然,天空是無限寬廣的,明天也許會有更好 的選擇,但今天,這樣的選擇應該是最自然的。第一項 測試PHP&Mysqlapache的設定我們在Linux中已經介紹過了,這裡不再重述。要測試PHP是否已經提供服務,只需在網頁的目錄中,建立一個副檔名爲.php 的檔案,再透過瀏覽器瀏覽該網頁是否能夠正確的顯示。測試PHP請依底下步驟新增檔案:1.cd/var/www/html2.vi phpinfo.php3.輸入內容後儲存離開,如下:呼叫 phpinfo()函數4.使用瀏覽器瀏覽該網頁,例如:localhostZphpinfo.php如果可以看到有顯示PHP的相關訊息,就表示它已經啓動服務了。另,由於RedHat 7.0之前是使用PHP 3的套件,所以網頁的副檔名存成.php3,而RedHat 7.0之後使用的版本是PHP 4,所以網頁的副檔名存成.php。測試MySQL測試MySQL是否啓動,直接輸入:mysqlshow如果有看到Database的表格出現,就表示MySQL已經啓動,但是,還沒有設定 使用者的帳號、密碼,所以任何使用者都可以刪除其中的重要資料,因此,必須 先執行類似mysqladmin-u使用者password 密碼的動作來新增系統管 理員的帳號、密碼:mysqladmin-u root password 1234www.kingbig.idv.tw1PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有設定之後,若需要檢視資料庫的話,就必須加上帳號及密碼囉!例如:mysqlshow-p 1234這種方式的安全性較高或者是mysqlshow-pl234我使用root登入,因此省略帳號第二節 CGI&PHP第一項cgi在網頁上要使用表單通常是在server端要有cgi(Common Gateway Interface)程式負責接受資料、處理資料。通常撰寫cgi的程式會使用C、perl,我們可以 將它當做是dos下的批次檔、Linux下的shell script檔案,都是在主機上執行的 程式。cgi不能算是程式語言,它只是interface 是使用其它的程式語式所撰寫的程式,我們現在所學習使用的PHP,就可以使用PHP來撰寫cgi的程式。第二項PHP使用PHP撰寫cgi程式有幾個優點:簡單:撰寫程式比較簡單,處理資料的方式也簡單;原來使用perl撰寫的程 式在處理特殊符號、中文時,實在很麻煩,而PHP幫我們解析、簡化這些 動作了。支援豐富:PHP提供了大量的函數,可以支援使用的產品有很多,例如資料 庫、電子郵件都可以透過PHP使用。效能:使用PHP處理資料的效能要好的多。www.kingbig.idv.tw2PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第二章簡簡軍車的學PHPPHP的程式是內埃式的程式語言,和我們一般知道的VBScript JavaScript類似,都是直接加在HTML的網頁中,不同的是VBScript、JavaScript都是在Client 端執行的描述語言,而PHP則是在Server端執行的描述語言;前者是連著HTML 網頁一起交給瀏覽器解讀,後者是在Server由PHP解讀後送至Apache,再經由 Apache將HTML傳回到瀏覽器,它是一個單純的HTML文件,另外,由於PHP 是在Server處理,所以對Server的負載會比較大。第一LiPHP程式凯PHP和HTML有些類似,,學過HTML後再來學PHP 一定會覺得很容易的。PHP 的程式必須放在或的標籤之中。舉個例子:檔案名稱記得要存成.php或.php3勺,現在的日期時間是:一般的HML標籤 THP結束第一項結束符號在PHP之中,每一行敘述的結束,都必須加上;,做爲該行敘述的結束符號。如果沒有加上結束符號,會使PHP產生錯誤訊息,而且,會顯示是第幾行產生 的錯誤訊息。同時,請你檢查看看它的上一行是不是因爲忘了加上;符號所 引起的錯誤。第二項echo由於在?標籤中的內容實際上都是由PHP程式來負責處理,而不是 Apache,因此,在PHP中運算、處理的結果都只是存放在PHP之中,我們必須 使用echo敘述,將內容傳回去給Apache,再由Apache將HTML文件傳回給使 用者的瀏覽器。所以,echo是將資料輸出到HTML文件的敘述,這樣子,訪客才可以看到PHP www.kingbig.idv.tw3PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有所產生的網頁。echo除了輸出文字內容之外,還可以同時輸出標籤,例如:echo“輸出標籤及內文”;第三項date()這是PHP所提供的一個函數,主要的功能在傳回系統的日期、時間。函數,就像數學上的函數類似,例如:f(x)=x2+2x+l其中的f(x)就是函數,我們只需要指定其中的X是多少,自然就可以得到 x?+2x+l的値。電腦中的函數也是一樣,給它一個値(或多個、也有些函數不需要),函數會將 計算的結果傳回來給我們。在echo date(Y-m-d H:i:s);敘述中,我們給date()函數的値是Y-m-d H:i:s,而date()函數在運算後將2001-08-09 16:22:15的結果傳回來,因此,這一行 的敘述就會像是echo 2001-08-09 16:22:15;囉。使用函數的優點在於,函數每次執行時,可能因爲條件不同、或執行的時間不同,而會有不同的結果,這個也就是函數好用的地方。第四項 使用PHP的畤機另外,PHP的標籤不是只能有一組,只要有需要,我們可以在HTML文件中的 任何位置使用標籤,加上PHP的程式,例如我們將上面的例子修改如下:lPHP和HTML 一樣,可以放在同一行今天的日期是:p現在的時間是:我相信,再加上CSS樣式,也沒有問題的,例如:今天的日期是:現在的時間是:我們已經學過css 了,因此,在往後的程式中,你隨時可以透過css將呈現出 來的網頁內容,在樣式上做些變化。www.kingbig.idv.tw4PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第二節變數變數的作用可以是代表目前運算的結果、也可以是代表某一個字串、也可以記錄 某些特定資料,總言之,就是爲了讓程式能更方便、更靈活,而使用變數來代表 特定的値、或資料。在PHP中,只要看到英文字前面有加上$的就是變數了,而PHP的變數使 用起來很靈活,沒有太多的限制,就當成是不定型變數來使用就行了。舉個例子來看看變數的使用:今天的日期是:印出$x的値現在的時間是:印出$y的値在程式語言中使用=的方式和數學上的意義、功能不同,在這裡,使用=是將右邊的値指定給左邊的變數。底下的例子在數學上是不合理的,但是,在程 式中我們常常會拿來運用:$z=10;指定$z等於10$z=$z+1 右邊$Z+1的結果是11,再指定給左邊的$2$z=$z+5 右邊$z+5的結果是16,再指定給左邊的$2在PHP中的變數是有分大小寫的,這點請千萬注意!第三節遞送資料給PHP第一項get附加在網址後面傳送,簡單,但可傳送的資料較少。我們做個實際的例子,就會明白的,如下:存檔:t3.php3國文分數是:p漬文分數是:www.kingbig.idv.tw5PHP&MySQL講義VZ4一王旅民山賊老巢版權所有數學分數是:p三科總分是:p平均分數是:至於$ca,$cb,$cc三個變數的値,是透過網址以這種形式傳送:localhost/t3.php3?ca=l00&cb=90&cc=80使用?表示網址後面是附帶的資料,使用ca=100表示傳遞資料的名稱是 ca、傳遞的値等於100,使用&來區隔不同的名稱、値。傳遞到PHP的程式中,直接在名稱前面加上$,就可以當做變數來使用,因 此我們可以直接使用$ca,$cb,$cc這三個變數。要特別注意的是,由於在Linux系統中英文大小寫是有分別的,因此,在網址後 面附加資料傳遞給PHP程式、PHP程式將資料當做變數使用,二者間的英文名 稱大小寫要相同。第二項post使用表單方式傳送,可以傳送大量資料。我們建立一個表單,和剛才建立的PHP網頁一起配合運作,表單內容如下:存檔:forml.htm成績輸入表單國文分數:英文分數:數學分數:pxINPUT type=submit value二”送出資料“INPUT type=reset value=清除重來按下送出資料後,注意看一下網址,會發現表單會將資料送至action指定的 PHP網頁處理,再由PHP網頁將資料以HTML形式呈現出來。這個例子中我們是以method=post方式來傳送資料,如果,我們在網頁中是 使用method=get來傳送資料,結果也是一樣,只是,如果表單中有較大量的 資料要傳送時,就一定要使用method=post的方式來傳送。第三項圖像式的傳送鎧如果你覺得平常的傳送鈕太過單調,還可以使用影像來代替,使用的方式如下:www.kingbig.idv.tw6PHP&MySQL講義VZ4一王旅民山賊老巢版權所有資料傳送到action所指定的網頁時,除了各個欄位的資料傳送過去之外,另外,還同時傳送名稱_x、名稱_y這二個變數,分別代表在圖像式的按鈕上點下 的X軸、Y軸的位置,例如,前面指定的name是sub)因此,就有sub_x,sub_y 這二個變數,如下:X:无卩出 X 軸位置Y:无卩出 Y 軸位置要記得這二個變數名稱是依(input type=image src=image.gifname=sub 之中的name名稱而改變的。www.kingbig.idv.tw7PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第三章PHP程式設計基礎第一項字串符號在”雙引號之中的內容會被當成是字串,但是PHP在遇到$符號時,還 是會將變數換成變數所代表的値(變數前後要空格),這個功能在我們撰寫PHP 網頁時很有幫助,可以使我們在製作PHP網頁更簡單、更清楚,就不必再使用 太多的字串連結符號。看看底下的例子:$a=Helloecho$a;會輸出成 Hello 另外有一個,單引號,也是字串符號,它比較強力,被單引號包圍的都是文 字,不再具有其它意義,例如:echo$a;會輸出成$a 1第二項字串連接符號要連接二個字串,可以使用字串連接符號.,將二個字串連接成一個字串,來 看看一個簡單的例子:$a=Hello$b=$a,World!;l$b=Hello World!echo$b;$a=Hello$a,=World!;等於$a=$a.World!”=Hello World!echo .$a;輸出Hello World!再來看一個例子,這二行輸出的結果是相同的:echo H.$a;echo H$a;和上一行的功能相同,但沒有加.至於在”雙引號之中的.就不是字串連接符號,而只是單純的句點了!www.kingbig.idv.tw8PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第三項常數可以在程式中隨時指定新値,我們稱爲變數,相反的,常數的値就是固定不變的,PHP中已經存在幾個常數,例如:常數說明_FILE_代表目前瀏覽的檔案,以絕對位置的方式呈現。前後均 有二個底線。_LINE_顯示這一行script由上算下來是第幾行。前後均有二個底 線。PHPVERSION顯示PHP執行的版本PHP OS顯示作業系統的名稱除此之外,我們還可以自己定義常數,定義常數的方式如下:defme(PI,3.1415926);定義常數PI=3.1415926define(HA,Hello World!);定義常數 HA=Hello World!”爲了區隔其它的敘述、變數,因此,在習慣上我們都會將常數部份以大寫英文字 母表示;另外,和變數不同的是,常數的前面不需加$符號。來看看底下這 個例子:檔案是 目前是第 行 PHP 版本是 作業系統是 常數PI 是 常數HA是 第四項變數的變數變數的變數是PHP中很有趣的一個功能,舉個例子來看比較容易理解:?$x=100;$y=x;$z=Hy;echo .$x;www.kingbig.idv.tw9PHP&MySQL講義VZ4一王旅民山賊老巢版權所有echo .$y;$y之中的$y先展開成x,就成爲$xecho .$z;,同上,$z$工,$y 9$x?這個例子的三個輸出結果都是100,這是因爲$Z之中的$z=y,因此$z 就展開變成$y,而其中的$y=x,因此$y就會展開變成$x,而$x=100,因此就輸出結果是100。變數的變數應用在實際的程式中,可以節省很多的力氣,在未來實務操作時,一 定會實際應用到的。第五項陣列PHP中的陣列和變數一樣,很自由,和其它的程式語言比較,PHP的陣列不需 事前宣告、隨時可以改變大小、陣列的索引除了數字之外還可以是字串。陣列的功能提供我們對於需要大量使用變數的狀況,有一個很好的解決方案,我 們來看看底下這個簡單的例子:?$al=123;這就是一個以數字爲索引的陣列$a2=456;$a3=789;echo$al;echo$a2;echo$a3;?底下這個例子也是一個陣列,但它是以字串爲索引的陣列,一樣可以使用,而且,就某一方面而言,它更人性化一些:?$a name=王大;以字串爲索引的陣列$aweb=;$aemai1=kingbig;echo-.$aname;置於雙引號的外面,用字串連接方式輸出echo .$aweb;echo .$aemail;?底下這三種設定陣列的方式(實際上應該只有二種),得到的結果是完全相同的,第二種設定陣列的方式是使用array。函數,比較方便一些,但是要注意,使用 array。函數之前若有指定陣列的索引、値的話,都會被清除,array。函數之後再 指定陣列新的索引、値,則沒有關係,最好的方式是單純用一種你習慣的方式:$al=123;第一種設定陣列方式$a2=456;$a3=789;www.kingbig.idv.tw10PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有$a=array(1=123,2=456,3=789);第二種設定陣列方式$a=array(和第二種設定陣列方式一樣,也可以分行1=123,2=456,3=789);最後加上;結束在使用array。函數時,要記得在每個元素之間使用,分隔。第六項二維陣列二維陣列使用的地方很多,例如學生成績單、通訊錄、以及將來我們使用的資料 庫等,都可以用二維陣列表示,底下是一個二維陣列的例子:,設定二維陣列$al2=120;$al3=13O;$a2l=210;$a22=220;$a23=230;echo .$all;輸出二維陣列echo .$al2;echo .$al3;echo .$a2l;echo .$a22;echo .$a23;我們也可以這樣子定義二維陣列:$a=array(l=array(1=110,2=120,3=130),千萬別忘了這裡有個逗號2=array(1=210,2=220,3=230);echo .$all;echo .$al2;echo .$al3;echo .$a2l;echo .$a22;echo .$a23;三維陣列、及多維陣列的設定方式,和二維陣列的設定方式大同小異,有機會的 話試試看吧!$all=110;www.kingbig.idv.tw11PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第七項自訂函數使用自訂函數的功能可以將一些比較常用、具有特定功能的敘述集合起來,以便 隨時可以呼叫函數,例如:function double($i)return$i*2;)$x=3;$y=double($x);echo$x;echo$yn;自訂一個名爲double。的函數,將傳入的値運算後,傳回變數$y接收函數傳回的値使用函數,通常會同時傳入某些參數,就如例子中的$y=double($x)敘述,是 將$%的値傳送到函數,而在function double($i)的敘述中,是由變數$1來接收$x所傳送過來的値,並且使用變數$i在函數中運算,再透過return敘述將結 果傳送回來。如果說要傳遞的參數是陣列的話,其實也只需要當做一般變數使用即可,參考底 下的例子:array(l=110,2=120,2=array(l=210,2=220,);$c=doub1e a r r ay($a);echo .$c2l.?接收的陣列置於$b之中也可以將$b陣列直接傳回定義一個$a的二維陣列 3=130),3=230)傳遞$a陣列,並由$c接收傳回値.$c22.,.$c23;自訂函數時,也可以同時就設定參數的預設値,例如:function sum($a,$b=60,$c=60)設定參數的預設値$sum=$a+$b+$c;echo”總計:”.$sum;)$x=sum(80);只傳送一個參數www.kingbig.idv.tw12PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有使用函數的預設參數時,要記得將具預設參數的部份靠右,沒有預設參數的部份 靠左。這是因爲我們在呼叫函數,傳入的參數値是由左邊一個一個傳送到函數之 中,因此,若我們省略某些參數時,也只有函數的左邊的參數會取得傳入値,右 邊的參數就會發生狀況,因此,才必須將具預設參數的部份置於右邊。第八項Global宣告在PHP網頁中,變數的有效範圍是在同一個PHP網頁的全部範圍,有需要時隨 時可以拿來使用。唯一需要注意的是函數(自訂函數)中,由於在函數之內是屬於獨立的區域,因 此,在函數內的變數都是區域變數,即使在函數之中擁有和PHP網頁相同的變 數名稱,也不會互相干擾。反過來說,如果希望函數內與函數外的變數是同一個,就必須使用global宣告,來看看global宣告的例子:function globaltest()global$x;echo”變數 x=.$x;echo 變數 y=.$y;宣告$x是全域變數$x=100$y沒有指定,是空値$x=100;$y=99;$z=globaltest();使用global宣告變數時,最好將它放在函數一開始的地方,在經過global宣告後,就可以隨時指定新的値給變數了。第九項GLOBALS變數若在每個函數中都要使用global宣告變數,那會相當麻煩,因此,PHP提供了一(請注意大小寫)的陣列變數,讓我們可以使用比較輕鬆的方式存取PHP中的變數,看看底下的例子:function globaltest()echo”變數x=.$GL0BALSx;使用變數名稱做爲陣列索引echo”變數 y=”.$GL0BALSHy;)$x=100;$y=99;$z=globaltest();www.kingbig.idv.tw13PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有使用$GLOBALS陣列時,是以PHP網頁中的變數名稱做爲陣列索引,而得到的 値就是原本變數的値。若是二維陣列,就沒有辦法使用$6丄08厶1陣列,還是必須使用global宣告哦!第十項跳脫字元變數的前面都會加$符號,那,如果我們希望在使用echo輸出資料,而其中 包含$符號時,PHP也會將緊接在後面的字串當成是變數。來看看底下的錯 誤的狀況:echo”加上$的符號表示變數;,$符號之後的文字會被當成變數echo 企這裡是重點,要特别注意!;字串需包含在同一組”之間我們必須加上跳脫字元來避免這種情況發生,因此,應該修改如下:echo 加上$的符號表示變數;echo D這裡是這重點,要特别注意!;有一些具有特殊意義的符號,像是$表示變數、表字串符號,如果加上 跳脫字元,可以使這些符號暫時跳脫原本代表的意義、功能。底下表格列出 一些常用到的特殊符號:符號說明nlinefeed,換行;就像上個例子,直接使用echo將標籤及 文字都置於其中,當我們使用瀏覽器的檢視原始檔案 時,會看到那二行是列在同一行的,對於我們在除錯時,是很不方便的,因此,可以撰寫成:echo”加上$的符號表示變數n;echo 這裡是重點,要特别注意!;那麼,透過瀏覽器檢視原始檔案時,就會變成獨立的二 行了。rreturn,歸位字元;較少使用。ttab,定位;使用的時機和n一樣。backslash,印出倒斜線。$dollar sign*印出$符號。double-quote,印出雙引號。www.kingbig.idv.tw14PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第二節他動須知道的期能第一項 includeinclude函數可以讓我們將某個檔案包含到目前的網頁之中,這個功能對於一般 撰寫網頁有很大的幫助。例如,我們有一個檔案,它的完整內容就只有以下數行(不用包含、.等其它的標籤):檔案名稱:menu.php山賊老巢山賊圖書館A href=www.ez-台東易購網接下來製作首頁,其中包含二欄一列的表格,所有的資料都放置在表格之中,左 邊的儲存格使用include包含menu.php這個網頁,而右邊的儲存格中置入應該要 顯示的網頁內容,參考如下:檔案名稱:index.php這裡請輸入你的內容使表格的內容都靠上對齊包含menu.php這個網頁這個儲存格輸入要顯示的內容這樣做完之後,可能你還沒發覺這有什麼好處,但是,如果接下來的其它幾個網 頁(例如01.php 02.php、O3.php.),都依這個結構製作,左邊是menu.php*而右邊是網頁顯示的內容,那麼,你會清楚的知道,你只需要更改menu.php的 內容時,所有網頁左邊顯示的超連結,都會一起變更,用來建置網站,算是幫我 們省了很多維護與管理的動作,而且,還可以給訪客一致性的瀏覽操作環境。包含其它網頁的函數其實可以分成四種函數:include()require()include_once()www.kingbig.idv.tw15PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有require_once()其中,include與require最大的差異在於前者可以置於迴圈及判斷式,而後者不 行,因此5 include的方式比較靈活。至於加上_once的函數是PHP4新增功能,可以取代原本的函數,新函數在 呼叫時會先刷斷是否已經呼叫過了,若已經呼叫過的話,就不會再呼叫一次,建 議大家使用新函數來包含檔案。第二項網頁重新導向使用以下方式,可以將某一個網頁的連結,重新導向到另一個網頁:檔案名稱:redir.php使用header函數有個注意事項,不能在header函數之前有任何的資料輸出到瀏 覽器的網頁。也就是說,不能使用echo輸出、不能有任何HTML的標籤、連空 行或空格都不行,底下是個錯誤例子,是我曾犯的錯誤,花了我好久的時間才知 道問題那麼簡單,希望你不要犯下同樣的錯誤:W我多空了這一行,這也是輸出,不行!第三項網頁重新讀取我們在之前的HTML部份曾經介紹可以定時重新讀取網頁的功能,PHP也提供 這個功能,一樣很簡單,參考如下:由於也是使用header函數,一樣也不能在header之前有任何輸出動作。另外,如果希望能在重新讀取時,導向至另一個網頁,可以另外再加上url的敘述,參 考以下例子:header(refresh:5;url=);echo 五秒後連結到山賊老巢”;www.kingbig.idv.tw16PHP&MySQL講義VZ4一王旅民山賊老巢版權所有?第四項cookie如果你希望你的網站能夠和訪客之間有良好的互動,那你就一定得知道 cookie。簡單的說,cookie就是讓server端的電腦在你的電腦中存入一些資 料、也可以取出這些資料,這些資料是很小量,而且,也只能存取自己所建立的 cookie 咅6份 在PHP中建立cookie、以及取出cookie的資料,都幫我們簡化很多,我們來看 個例子,就很容易明白cookie的操作。fbrm2.htm網頁在於建立登錄的表單,並將登入的資料傳送到cookiel.php網頁:檔案名稱:form2.htm登入表單帳號:密碼:pxINPUT type=submit value=登入 INPUT type=reset value=清除/HTMLcookiel.php網頁原本的功能應該是要先判斷輸入的帳號(變數$id)及密碼(變 數$卩255(1)正確時,才將資料透過setcookie函數存成訪客的cookie,但由於我 們還沒有學到條件的判斷及資料庫存取,就暫時略過條件判斷的部份,直接將傳 過來的$userid變數,存成名稱是loginname的cookie:檔案名稱:cookiel.phpcookie2.php網頁的功能,是實際的將存入的cookie,提出來使用。我們所存的 cookie名稱是loginname,所以要提出來使用時,就使用$loginname的變數,就 這麼簡單:檔案名稱:cookie2.phpwww.kingbig.idv.tw17PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第五項設定有效期限的cookie前面練習的cookie有效期限,是在瀏覽器開啓的時候,如果瀏覽器關閉結束,那麼當時所建立的cookie也會同時結束。如果有需要我們可以延長cookie 的有效期限,例如底下的例子,可以記錄訪客瀏覽這個網頁的次數:這是你第 次光臨!cookie的有效期限是以秒爲單位,因此,上面的例子有效期限是24小時內,只 要訪客在24小時內來訪,就可以顯示訪客來訪的次數,同時再將有效期限延長 24小時。如果訪客是在24小時後才再次瀏覽這個網頁,之前的記錄會失效,再重新來過,因此,你可以視情況決定,要將cookie的有效期限設定多久。第六項cookie的限制一個cookie儲存資料的最大容量是4KB,一台伺服器最多可以在訪客的電腦中 建立20個cookie,所有伺服器所建立的cookie總數最多是300個。訪客瀏覽網頁時所建立的cookie是存放在記憶體中噹訪客關閉瀏覽器時,cookie 也同時結束,至於尙未到期的cookie就會被儲存在cookies.txt的檔案中(使用 win2000的話則是放在使用者目錄的cookies目錄中)。我們去檢視這些檔案時,會發現它是以使用者名稱網域名稱方式儲存,類 似電子郵件的格式,不過,這當然不是我們的電子郵件,而是那些留下cookie 的伺服器的網域名稱,換句話說,某個伺服器也只允許存取自己所建立的 cookie,不能存取其它伺服器所建立的cookie資料。第七項檔案上傳檔案上傳,很棒吧!而且,還很簡單。設計檔案上傳的表單,有幾點要注意的:1.表單的method要用post2.在標籤中要再加上enctype=multipart/fdrm-data”的敘述3.使用type=file的輸入欄位,就會有一個瀏覽按鈕,選擇使用者硬碟中 的資料,其中name=upfile中的upfile是我們給這個輸入欄位所建立的欄 位名稱www.kingbig.idv.tw18PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有upload.htm網頁負責建置使用者瀏覽、選取檔案的表單:檔案名稱:upload.htmH1上傳檔案選取檔案:INPUT type=submit value=傳送upload.php是負責接收檔案,並將上傳的檔案儲存在/tmp目錄中,而且是以$upfile爲檔案名稱,這並不是原來的檔名,而是PHP暫時建立的檔名,而 且,會在這個PHP網頁執行結束時,就將檔案移除,因此,我們必須在PHP網 頁執行結束前,得先將檔案複製備份才行。透過$upfile_name、$upfile_size這二個變數(依原本欄位名稱而產生的二個變 數),可以所得檔案真正的穡名、及檔案大小,再使用copy函數就可以將檔案複 製下來了。檔案名稱:upload.php?echo$upfile;echo$upfile_name;echo$upfile_size;THP建立的暫時檔名檔案真正的檔案名稱檔案的大小,以byte爲單位copy($upfile,upload/$upfile_name);?我使用copy($upfile,upload/$upfile_name);j 敘述,是將$upfile 檔案複製到 upload.php這個網頁相對的upload目錄中,並且使用$叩理6_皿1116將檔案重新命 名爲原來的檔案名稱。你也可以使用絕對路徑來複製檔案例如copy($upfilej7tmp/$upfile_name);。無論是使用相對路徑或絕對路徑來複製檔案,該目錄的權限都要設版777,檔案 才能存進去。檔案上傳的限制在/etc/php.ini之中有限制上傳檔案的大小是2MB,你可以自行調整。開啓/etc/php.ini檔案之後,可以找到以下二行的內容:;Maximum size of POST data that PHP will accept.post_max_size=8M;Maximum allowed size for uploaded files.upload_max_filesize=2Mwww.kingbig.idv.tw19PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有依你的需求調整upload max filesize的値就可以了。第三運算符號底下列出一些常用到的運算符號,和其它的程式語言比較,絕大多數都是類似的。第一項算術運算符號說明+加號;例如:$a+$b-減號;例如:$a-$b*乘號;例如:$a*$b/除號;例如:$a/$b%餘數;例如:$a%$b第二項位元運算針對變數的位元做運算,請參考底下二個表格:符號及範例說明$a&$band;當二個位元皆爲1時,結果爲1 否則爲0$a|$bor;二個位元只要有一個是1,結果爲1,二個都是0時,結果才是0$a A$bxor;二個位元不同,結果是1,如果二個都是0、或都 是1,則結果爲0$anot:反相 原來是1則變爲0,原來是0則變爲1由於這些運算是針對變數的位元來處理,因此,我們需要將變數放大,來看看它 的。與1之間運算的結果,假設A、B分別代表0或1的狀況,我們可以得到如 下的表格(通常稱爲真値表):ABNot AAAndBAOrBAXorB110110100011011011001000www.kingbig.idv.tw20PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有第三項比較運算主要是用在條件式的判斷、或迴圈流程的判斷,以控制程式的運作。這些比較式 所得到的結果都是成立、不成立二種結果。符號說明$a=$b等於,是二個等號;比較$a是否等於$6它和=不同,一個等號代表的是指定,也就是將右方 的値指定給左方的變數,例如$a=$b是將變數$6的値 指定給變數$a,因此,$a、$b二個變數的値會是一樣的。至於二個等號是表示是否相等,因此得到的結果會是 相等(成立)、或不相等(不成立)。$a=$b等於,三個等號,只適用於PHP4;比較$a是否等於$6 除了會比較値是否相等之外,還會比較型別是 否相等。例如:$a=123;$b二那麼,$a=$b的結果是成立,而$a=$b的結果 是不成立,前者是因爲PHP自動轉換型別,所以比較的 値是一樣的,而後者因爲型別不同,所以結果 就是不成立。$a!=$b不等於;比較$a不等於$b$a!=$b不等於,適用於PHP4;比較$a與$6的値不等於,而且 連型別也不同$a$b大於;比較$a大於$b$a=$b大於等於;比較$a大於或等於$b第四項邏輯運算邏輯運算主要在判斷多個運算式比較的結果爲何。實際上,前面提到的位元運 算也就是邏輯運算,是針對位元,而底下表格的邏輯運算是對於前後的結果來 比較,只需要將前面提到的真値表之間的1與o分別代換成True與False。AB!AA And B A&BAOrB A|BAXorBTTFTTFTFFFTTFTTFTTFFTFFFwww.kingbig.idv.tw21PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有舉個例子,假設:有三個變數:$a=10,$b=12,$c=14而運算式是:($a$b)and($b$b)echo a 大於 b;或者,也可以寫成這樣if($a$b)echo”a 大於 b”;這個敘述的意思,你可以解釋成假如變數a大於變數b的話,就列印出“a大 於b”,那,如果a沒有大於變數b的話,當然就不會列印了。這就是條件式在比較時,會有成立、或不成立的二種不同狀況,以及是 否執行後面的敘述。會了嗎?就是這麼簡單。再來看看另一個例子:if($a$b)echo a 大於 b;echo a=$a,b=$b;這個例子在條件式成立時,做了比較多的事情,因此使用將這些敘述包 含著。你可以解釋成假如變數a大於變數b的話,就列印出、大於b”,而 且繼續列印“a=$a,b=$b”同樣的,如果變數a沒有大於變數b的話,這些敘 述就都不會被執行囉!第二項ifelse再來看個比較完整的if使用方式,如下:if($a$b)echo a 大於 b;www.kingbig.idv.tw22PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有 else echo a沒有大於b;)加上了 else的敘述我們可以解釋成假如變數a大於變數b的話,就列印出“a大於b”,如果沒 有的話,就列印“a沒有大於b”。加上else敘述之後,我們就同時可以處理條件式成立、與不成立時的狀 況,是很完整的if使用方式了。第三項ifelseifelse如果還有更多的條件要判斷時,還可以這樣子:if($a$b)條件式1echo a 大於 b;elseif($a=$b)條件式2,使用elseif敘述echo a 等於 b;else 前面條件都沒有符合時echo a 小於 b;我們可以解釋成假如變數a大於變數b的話,就列印出、大於b”,又,如 果變數a等於變數b的話,就列印出“a等於b”,都沒有條件符合的話,就列 印“a小於b”。elseif可以增加不同條件式的判斷,只要程式有需要增加條件的判斷,我們可以 再繼續增加elseif的判斷。第四項while只要條件式成立,就執行迴圈。來看看底下的例子:$i=1;while($i 0);先列印$1,再來判斷條件式,是否要繼續執行第六項for在for迴圈中,我們必須給它三個條件:初始値、條件判斷、步進値。其實和 while敘述很類似,來看個例子:for($1=1;$1=10;$i=$i+l)分别設定初始値、條件判斷、步進値echo$i;)$i=1是初始値,設定變數盼從1開始。$i=10是條件判斷,當條件式成立時,就繼續執行迴圈。$i=$i+1是步進値,每執行迴圈一次,就將變數盼加1。三個敘述之間要使用分號隔開。很多程式在介紹到for迴圈時,都會以九九乘法表做個例子,我們也來試試看吧!由於在網頁上不容易定位,因此我們就用表格來做列印定位的動作:echo;echo H;for($i=1;$i=9;$i=$i+l)echo;總共建立九個儲存格for($j=1;$j=9;$j=$j+1)每一個儲存格,都存放九行內容echo$i*$j=,$i*$j,;)echo;echo;echo;第七項foreach這是PHP4新增的功能,讓我們可以很輕鬆使用陣列的値、或索引運用在迴圈之 中。foreach迴圈的原型有以下二種方式:foreach(array_expression as$value)statement,只取出値foreach(array_expression as$key=$value)statement 取出値與索引www.kingbig.idv.tw24PHP&MySQL講義VZ4一王旅民厶厥老巢板權所有其中的array_expression表示某個陣列,$value表示陣列其中的値,$key表示陣 列索引。foreach迴圈是判斷陣列中有多少個索引(或者是有多少個値),就會由 第一個開始,執行多少次迴圈。來看個例子:110,2=120,3=130);建立陣列foreach($b as$bkey=Sbvalue),由陣列中取出key及 value echo$b 陣列,索引=$bkey,値=$bvalue;)?$b陣列由於有
展开阅读全文