2.12k likes | 2.68k Views
PHP+MySQL 應用研習. 新竹縣立博愛國中 曾琳富 hs1600@nc.hcc.edu.tw. 線上教材: http://vod.pajh.hcc.edu.tw/moodle 備用網站 : http://dyna.idv.tw/moodle. 課程綱要. PHP+MySQL 環境建置 PHP 基本語法 MySQL 資料庫管理使用 SQL 語法介紹 PHP+MySQL 開發應用 ADODB 物件與 PEAR 應用. PHP+MySQL 環境建置. 先備知識. Linux/FreeBSD 基本操作知識 竹縣楊錦昌老師 APT
E N D
PHP+MySQL應用研習 新竹縣立博愛國中 曾琳富 hs1600@nc.hcc.edu.tw 線上教材:http://vod.pajh.hcc.edu.tw/moodle 備用網站:http://dyna.idv.tw/moodle
課程綱要 PHP+MySQL環境建置 PHP基本語法 MySQL資料庫管理使用 SQL語法介紹 PHP+MySQL開發應用 ADODB物件與PEAR應用
先備知識 Linux/FreeBSD 基本操作知識 竹縣楊錦昌老師APT http://apt.nc.hcc.edu.tw 鳥哥的 Linux 私房菜 http://linux.vbird.org/ 藍色泡泡 http://ohaha.ks.edu.tw/ HTML 基本製作知識 網站建置百寶箱 http://dob.tnc.edu.tw/ HTML 入門 http://content1.edu.tw/publish/jackson/ material/593084/webpg1203/html/index.htm
參考書籍 參考書籍 PHP+MySQL 快速入門,松崗,吳弘凱 PHP&MySQL完全架站攻略第二版,上奇 PHP徹底研究新編第二版,博碩 專業PHP5程式設計指南,上奇 MySQL 學習手札,上奇 MySQL 徹底探索 ,博碩 參考網站 http://www.php.net http://www.mysql.com http://www.php5.idv.tw http://vod.pajh.hcc.edu.tw/moodle/
傳統網頁與動態網頁 傳統網頁執行方式 動態網頁執行方式 要求網頁,如index.htm 回應網頁(HTML) IE、FireFox Web Server Apache / IIS <html> <head></head> <body> <?php echo date(“Y-m-d”) ?> </body> </html> 要求網頁,如index.php 回應網頁(HTML) IE、FireFox Web Server <html> <head></head> <body> 2008-04-12 </body> </html> DB PHP 解譯器 MySQL
PHP是什麼? PHP為(Personal Home Pages)簡稱,PHP 是一種 server-side HTML-embedded 的 script 語言,由Rasmus Lerdorf 於1994發展至今,目前版本PHP 4.4.7 (2007年底停止發展)及PHP 5.2.3 其它類似產品 Microsoft ASP(ASP.NET) Adobe(Macromedia) ColdFusion SUN JSP
PHP的特色 開放原始碼而且是免費 跨平台(作業系統、Web伺服器) 功能強大,支援各種資料庫、網路連結、檔案系統、Java、COM、XML等 支援物件導向(PHP 5 較為完整) 快速發展週期及活躍支援社群
PHP的應用 動態網頁程式設計 如留言版、討論區、公告、電子相簿等 腳本檔 (Shell Script) 如與Crontab 結合可定時執行程式(PHP) 視窗應用程式 (Window Application) 如視窗應用程式般執行如PHP-GTK
建構 Apache +PHP +MySQL環境 Linux 平台 建議以APT方式安裝 FreeBSD 平台 建議以Ports方式安裝 Windows 平台 建議以Xampp 或 AppServ 套件安裝
php.ini校調 244 max_execution_time = 60 每個Script最大執行時間 245 max_input_time = 60 表單輸入最大時間 246 memory_limit = 16M 記憶體最大限制 409 post_max_size = 64M 表單輸入最大檔案大小514 upload_max_filesize = 32M 上傳檔案大小最大限制 以xamp為例,在瀏覽器網址列上鍵入http://localhost,選擇左邊選單的phpinfo() 找到php.ini所在位置C:\xampp\apache\bin\php.ini 以PSPad 編輯 並修正以下設定值
php.ini校調 292 error_reporting = E_ALL & ~E_NOTICE 顯示程式執行中的所有錯誤除了NOTICE等級 299 display_errors = On 顯示程式執行中的錯誤 101 output_buffering = Off 緩衝區輸出當程式會出現下列訊息時可以將 output_buffering 設成ON Warning: Cannot modify header information - headers already sent by (output started at XXX ) 12
建立開發PHP的環境 在Windows 底下開發及測試之後在上傳至伺服器 安裝Xampp( Apache+PHP+MySQL+phpMyAdmin) PHP編輯器 PSPad Dreamweaver Topstyle Homesite Zend Studio 1.支援PHP語法 2.強大的視覺化網頁編輯、程式碼半視覺化編輯 PSPad Dreamweaver 主要文字編輯器 Topstyle CSS編輯器
第一個 PHP 程式 <html> <title>第一個PHP程式</title> <body> Hello Word !<p> <?php echo "我的第一個PHP程式 <br>" ; ?> </body> </html> PHP程式碼開始符號 程式碼以分號作為結束 echo 為PHP指令(將後面的訊息顯示在螢幕上) PHP程式碼結束符號
PHP 程式碼標記 PHP程式碼標記方式的四種寫法 <? echo “第一種" ;//這種寫法必須將php.ini中的short_open_tags設定為On才可以使用 ?> <script language="php"> echo “第二種" ; </script> <% echo “第三種”; // 這種寫法必須將php.ini中的asp_tags設定為On才可以使用 %> <?php echo “第四種" ; ?> 請選擇這種寫法
PHP的註解 <?php // echo “單行註解" ; //兩個雙斜線表示後面一行是註解, 不會被顯示出來 /* echo "多行註解" echo “在/* 與 */ 之間為註解, 不會被顯示出來" ; */ ?>
變數與常數 變數是會變動的資料(可以包括),尤其在程式執行階段,可以任意變換內容的值 變數必須以$開頭 第二個字元必須為英文字母或底線(_) 第二字元以後可以為(底線、 大小寫字母、 數字)的任意組合 變數是有區分大小寫,$a1 與$A1是不同變數 例如 $num = 10; $msg=‘歡迎光臨’; 常數是不會變動的數,即使在程式執行階段也不會改變其內容 常數前面不加$ 習慣上常數用大寫表示 例如 define(PI,3.14);
基本輸出指令 <?php echo “Hello!<BR>"; print “Hello!<BR>"; print(“Hello !<BR>"); echo "<hr width=50%>“; $msg="I am fine." ; echo "1: msg變數的內容是 $msg <BR>"; echo '2: msg變數的內容是 $msg <BR>' ; ?> 雙引號內若有變數則會被取代,單引號則否
PHP 與 HTML <?php echo "我的第一個PHP程式 <br>" ; ?> <html> <title>第一個PHP</title> <body> Hello My Friend! <p> </body> </html> <html> <title>第一個PHP</title> <body> Hello My Friend! <p> <?php echo “我的第一個PHP程式”; ?> </body> </html> 1.嵌入HTML 2.獨立存在 3.在HTML標籤外 <?php echo "我的第一個PHP程式 <br>" ; ?>
布林型態 語法 True|False 由來 為了紀念提出此概念的十八世紀法國數學家 George Boole 大小寫視為相同 範例 $a = true; $b = FALSE; 通常用於判斷式,例如 • if($a ) {//若$a 為真 ,則執行括號內的指令 • ….. • }
整數型態 語法 [+|-] [0|0x] 數值 範例 $a = 456; //正整數 $b = -123; //負整數 $c = 045; //八進制 $d = 0x4A; //十六進制
浮點數型態 一般浮點數 例如:1.345 科學記號浮點數 例如:1.23e2、1.45e-4
字串型態 字串是文字串列的組合,可用雙引號或單引號前後括號起來 $a = “PHP研習課”; $b = ‘PHP研習課’; 在字串中遇到特殊符號需加個反斜線(\),如反斜線、單引號、雙引號、$字號等 $a = “I\’ll be back”; $b = ‘I love \“PHP\” ‘; 在雙引號中的變數才會被置換,單引號則不會 echo “\$a = $a” ; echo ‘\$b = $b’ ; \n \r \t的使用(只對網頁原始檔有效) \n 換一行 \r 與\n 相同 \t 跳一個定位點
Heredoc 定界符 在區塊內可以不使用反斜線,就可以直接顯示反斜線、單引號、雙引號、$字號這些字元 語法 例如 • $變數=<<<Heredoc標籤 • …. • …. • …. • Heredoc標籤; Heredoc 標籤之前不可空白 • $a = “hi”; • $msg=<<<doc • {$a} I’ll be back ! I love “PHP” • doc; • echo $msg;
陣列型態 陣列是變數的集合,陣列中的每一個元素各有自己的值,用索 引可參照到陣列中的元素,其中 1.陣列索引由0開始。 2.陣列中的元素可包含不同的資料類型 語法 陣列名稱[指標] 範例 $a[0] = 0; //一維陣列 $a[1] = 10; $a[2] = 20; $c[“國文”] = 85; //關連式陣列 $c[“數學”] = 95;
陣列型態(一維) 語法 陣列名稱[索引]= 陣列值; Array(索引1=>陣列值1,索引2=>陣列值2); 範例 $a[0] = 0; //一維陣列 $a[1] = 10; $b[] = “忠”; //未指明索引值,將從0開始 $b[] = “孝”; 把陣列中每個元素都取一個名字,方便存取其中元素的名字叫做關鍵字 (key)元素的內容叫做值(value) $c[“國文”] = 85; //關連式陣列 $c[“數學”] = 95; $a=array(0=>0,1=>10,2=>20); $a=array(0,10,20);
陣列型態(二維) 範例 $class[1][1] = “一年忠班”; //二維陣列 $class[1][2] = “一年孝班”; $class[2][1] = “二年忠班”; $class[2][2] = “二年孝班”; $class[3][1] = “三年忠班”; $class[3][2] = “三年孝班”; • $class=array( • 1=>array(1=>’一年忠班’,2=>’一年孝班’), • 2=>array(1=>’二年忠班’,2=>’二年孝班’), • 3=>array(1=>’三年忠班’,2=>’三年孝班’) );
物件型態 所謂的物件,就是類別(Class)實體化之後的資料型態 語法: //宣告類別 class 類別名稱{ var資料成員; function成員函數(){ 成員函數內容; } } //產生物件 $a = new類別名稱; //存取成員函數 $a->showcolor();
物件型態 //宣告物件 class table { var $color ; function set_color($new_color){ $this->color=$new_color ; } function show_color() { echo $this->color; echo "<br>\n" ; } } //使用物件 $T = new table() ; $D = new table() ; $T->set_color("Red") ; $D->set_color("Blue") ; echo "T table color is " ; $T->show_color() ; echo "D table coloe is " ; $D->show_color() ; this 是個關鍵字代表本物件
資源型態 //建立MySQL連線 $conn = mysql_connect(‘localhost’,’root’,1234’); //選擇資料庫 mysql_select_db(“user”,$conn); //執行SQL語法 $res = mysql_query(“select * from user”); //擷取每一筆資料 while($row = mysql_fetch_array($res)){ echo $row[“name”]; } //關閉MySQL連結 mysql_close($conn);
NULL 型態 Null表示變數中沒有值 以下三種情況變數將會被視為Null 1.變數被設成Null 2.變數未定義 3.變數被unset()後
變數初始值 PHP 不需要事先設定變數型態,由初始值的資料型態決定,程式執行中會將 $a = 10; $b = 12.3; $a =“今天好嗎?”; PHP指派變數方式,等號右邊運算完後指派給等號左邊 $A = 30; $B = $A + 30; $C = $C + 30;
傳值與傳址 <?php $A = 10 ; // $A的值為10 $B = $A ; // $A的值複製給$B $C = &$A ; // $A的記憶體位置給$C echo "執行計算前 <br>"; echo "A=$A <br>" ; echo "B=$B <br>"; echo "C=$C <p>"; $B=$B+10 ; // $B的值加10 $C=$C+20 ; // $C的值加20 echo "執行計算後:<br>" ; echo "A=$A <br>"; // 顯示$A,$B,$C的值 echo "B=$B <br>" ; echo "C=$C "; ?>
變數種類 區域變數 在函數內宣告的變數為區域變數,可視範圍只限於函數中,在函數中若想使用全域變數,需將變數宣告成global 全域變數 在PHP Script 中(排除函數內)所宣告的變數 靜態變數 在函數中宣告成靜態變數(static),重複呼叫該函數,其變數會保留其值
變數種類 動態變數(變數的變數) <?php $name="John" ; $$name="Lee" ; echo $John; ?> 最後會顯示 Lee
超級全域變數 超級全域變數($_SESSION、$_GET、$_POST、$_COOKIE、$_FILES、$_REQUEST) 當切換網頁時,用來記錄與接收的變數 (一) GET 瀏覽器網址列:http://localhost/test.php? user=hs1600 <html><head><title>接收URL變數</title></head><body><?php echo $_GET[‘user’]; ?></body></html> test.php
超級全域變數 (二) POST– 以表單傳遞變數 <form action="test.php" method="post"> <input type=“files" name="frm_name"> <input type="submit" value="送出"> </form> <body><?php echo $_POST[‘frm_name’];? ></body> REQUEST: 同時接收在自GET與POST變數
超級全域變數 (三) FILES– 上傳單一檔案 <form action="test.php" method="post“ enctype="multipart/form-data" > <input type=“file" name="frm_up"> <input type="submit" value="送出"> </form> test.php <?php echo $_FILES[‘frm_up’][‘name’];//上傳檔案名稱 echo $_FILES[‘frm_up’][‘type’]; // 檔案類型 echo $_FILES[‘frm_up’][‘size’]; //檔案大小 echo $_FILES[‘frm_up’][‘tmp_name’]; //暫存檔檔名 echo $_FILES[‘frm_up’][‘error’]; //錯誤訊息 ?>
超級全域變數 (三) FILES– 上傳單多檔案 <form action=“test.php” method=“post“ enctype=”multipart/form-data” >檔案1 : <input type=“file" name="frm_up[]"> 檔案2 : <input type=“file" name="frm_up[]"> <input type="submit" value="送出"> </form> test.php <?php echo $_FILES[‘frm_up’][‘name’][0];//上傳檔案名稱1 echo $_FILES[‘frm_up’][‘tmp_name’][0]; //暫存檔檔名1 echo $_FILES[‘frm_up’][‘name’][1];//上傳檔案名稱2 echo $_FILES[‘frm_up’][‘tmp_name’][1]; //暫存檔檔名2 ?> ? >
超級全域變數 (四) SESSION : 儲存在伺服器中,用來記錄客戶端一些資料 session_start(); //啟用session 超級全域變數 $_SESSION[‘county’] = “台中縣”;//宣告$_SESSION[‘county’] 變數 並指定值 $country = “台中縣”; session_register(“countruy”); 1.php session_start() ; //啟用session 超級全域變數 echo $_SESSION[‘county’] ; //顯示session 變數 unset ($_SESSION[‘county’] ); //釋放$_SESSION[‘county’] 變數 session_destory(); //釋放所有 SESSION 變數 session_unregister(“county”); session_unset(); 2.php
超級全域變數 (五) COOKIE: 儲存在客戶端電腦中,用來記錄客戶端一些資料 Cookie的限制: 每個使用者的瀏覽器只能支援(存取)300個Cookie 每個瀏覽器只能針對同一個伺服器存取20個Cookie 每個Cookie的大小最多僅4k Bytes的容量 有些瀏覽器可以把Cookie的功能關掉,若關掉後Cookie就不能使用 //儲存user的COOKIE變數於客戶端,其值為Peter,保存時間為1小時 setcookie("user", "Peter", time()+3600); 1.php //顯示COOKIE[‘user’]的值 echo $_COOKIE[‘user']; 2.php
超級全域變數 (六)SERVER: 系統變數 echo $_SERVER[‘PHP_SELF’]; //顯示目前執行Script的檔案 echo $_SERVER[‘REMOTE_ADDR’]; //顯示客戶端IP echo $_SERVER[‘HTTP_USER_AGENT‘]; //顯示客戶端的瀏覽器 //當有Proxy Server 時取得客戶端IP if($_SERVER["HTTP_X_FORWARDED_FOR"] == "") $your_ip = $_SERVER["REMOTE_ADDR"] ; else $your_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
常數 語法: define(常數名稱,常數值) 例如: <?php define(PI,3.14); echo PI; ?>
字串運算子 $a = ‘今天日期為:’; $b = ’97年4月13日’; $c = $a . $c; echo $c // 顯示結果為今天日期為:97年4月13日