SlideShare una empresa de Scribd logo
1 de 36
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-1
國立清華大學資訊基礎教育
教學改進計畫
PHP 基本介紹
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-2
課程大綱
◙ 淺談 PHP
◙ 設定環境
◙ 基本語法
◙ 建立資料庫網站
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-3
淺談 PHP
◙ 由 Rasmus Lerdorf 所創的“個人主頁工具”
( Personal Home Page Tools )
 test1.html 和 test1.php 所顯示的資料是完全
一樣的
 由這個例子可以知道所有的網頁都可以藉由
php 產生
 藉由 php 可以動態產生網頁內容
這個程式可以傳回瀏覽網頁的人,所使用的 IP
Address
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-4
設定環境
◙ 可以經由 PHP 的官方網站下載 PHP 的
安裝套件
◙ 常見的搭配組合是
 Apache web server – 網頁伺服器
 MySQL – 資料庫伺服器
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-5
設定環境 ( 續 )
◙ 建議先安裝 MySQL
 除了設定路徑,一直按下一步就可以了
◙ 其次安裝 Apache
 若無 hostname 請用 ip address 代替
◙ 最後安裝 php
 必須先確認網頁伺服程式 (Apache) 已經 動啟
 必須修改 php.ini 中的參數
 必須修正 Apache 的 httpd.conf
 詳情請參考下載下來的 install.txt
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-6
基本語法 (1)
◙ 以 “ <?php” 或者
是 “ <?” 開始
結束符號是 “ ?>”
◙ 每行末加分號
“ ;” 結尾
◙ 注釋方法  和 C
一樣
 //  單行註解
 /* */  段落註
解
<?
echo "123456";
// 第一行
echo "123 n 456";
// 想用 'n' 換行 但沒法成功
echo "123"; ?> <br> <? echo"456";
// 用 html 中的 <br> 換行
/* 注意最後一行 ,
php 可以隨處中斷 ,
隨處開始
*/
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-7
基本語法 (2)
◙ 引用文件
 require
 通常放在 PHP 程式的最前面
 會先讀入指定的文件,使它變成 網頁的一部份
 常用的函數,可以這個方法將它引入網頁中
 引入的文件若有錯誤,網頁將停止執行
 include
 一般是放在流程控制的處理部分中
 讀到 include 的文件時,才將它讀進來
 這種方式,可以把程式執行時的流程簡單化
 若讀入的文件有錯,網頁將提出警告,仍會繼續執行
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-8
基本語法 (2) – 引用文件
<?
require “getenv_remote_addr.php”;
// 此程式可以取得使用者的 ip 並存在 $ip 中
echo "I like who come from " . $ip . "!!";
?>
<?
$i = 2;
if ($i == 1) {
echo "I like who come from ";
include “getenv_remote_addr.php”; // 此時這行將不會被讀入
}
else {
echo "Oh!! NOOOOOOO...";
}
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-9
基本語法 (3)
◙ 變數
 以 ‘ $’ 開頭
 不用宣告型別
可用 cast 或者 settype() 明確的設定
 有下列型別
整數、浮點數、字串、陣列和物件
 物件用 new 來產生
 英文字母大小寫會被視為不同
$A 和 $a 是兩個不同的變數
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-10
基本語法 (3) – 變數
<?
$string = " 字串 " ;
$int = 438 ;
$float1 = 13.37908816 ;
$float2 = 1.414E+2 ;
$TestArray = array( "A" , " 乙 " , " 寅 " , "d" ,
$int, $float1, $float2, $string);
// array 中可以有不同型別的變數
echo $TestArray; // 由於沒指定位址 所以會列印出 ‘ Array’
echo $TestArray[0] . $TestArray[1] . $TestArray[2] . $TestArray[3];
echo $TestArray[4] . $TestArray[5] . $TestArray[6] . $TestArray[7];
?>
<br>
<br>
<?
sort($TestArray); // 可以對 array 進行排序
echo $TestArray[0] . $TestArray[1] . $TestArray[2] . $TestArray[3];
echo $TestArray[4] . $TestArray[5] . $TestArray[6] . $TestArray[7];
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-11
基本語法 (3) – 變數
<?
class foo
{
var $_num = null; // 物件中的參數必須先加 var
function get_seed($i) // 物件的 method
{
$this->_num = $i; // this 是 “本物件” 的意思
}
function do_foo ()
{
echo $this->_num;
echo "Doing foo.";
}
}
$bar = new foo;
$bar->get_seed(88); // 也可以傳入 浮點樹 或 字串
$bar->do_foo();
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-12
基本語法 (4) – 運算符號
◙ 數學運算
 ‘+’ 、 ‘ -’ 、 ‘ *’ 、 ‘ /’  加、減、乘、除
 ‘ %’ 取餘數 、 ‘ ++’ 累加 、 ‘ --’ 遞減
◙ 字串運算 – ‘ .’
 $a = “PHP”; $b = “ 真利害”
$a.$b  “PHP 真利害”
◙ 邏輯運算
 < 、 > 、 <= 、 >=
 == 等於 、 != 不等於
 ‘&&’ 、‘ and’ 都是‘而且’;‘ ||’ 、‘ or’ 都是‘或’;
 ‘xor’ 就是 ‘ Xor’ ; ‘ !’ 就是 ‘不’
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-13
基本語法 (5) – 流程控制
◙ if..else
 if (expr) { statements }
expr  判斷式,例如 “ $a<=1”
statements  該執行的程式
若程式只有一行,可以省略大括弧 {}
 If (expr) { statements }
else { statements }
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-14
基本語法 (5) – 流程控制 __ if..else
<?
if ( $x > $y ) {
echo “x 比 y 大” ;
}
elseif ( $x == $y ) {
echo “x 等於 y”;
}
else {
echo “x 比 y 小” ;
}
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-15
基本語法 (5) – 流程控制
◙ switch
 switch (expr) {
case expr1:
statement1s;
break;
case expr2:
statement2s;
break;
default:
statement_ds;
break;
}
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-16
基本語法 (5) – 流程控制 __ switch
<?
switch ( date ( "H" ) ) {
case 5: case 6: case 7: // 多個值一起
echo “Good morning.”; // 上午說早安
break;
case 8: case 9: case 10: case 11: case 12:
case 13: case 14: case 15: case 16: case 17:
echo “Have A Nice Day!”; // 工作時說日安
break;
case 18: case 19: case 20: case 21:
echo “Good Night.”; // 晚上說晚安
break;
default: // default 設定其餘的狀況該如何
echo “Have A Good Dream.”; // 其餘祝您好眠
break;
}
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-17
基本語法 (5) – 流程控制
◙ for
 for (expr1; expr2; expr3) { statements }
expr1  設定初始條件之用
expr2  設定繼續執行的條件
expr3  statement 執行完畢後,用來改變條件,
供下次的迴圈判斷 (expr2)
statements  該執行的程式
若程式只有一行,可以省略大括弧 {}
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-18
基本語法 (5) – 流程控制 __ for
<?
for ( $i = 1 ; $i <= 25 ; $i++) {
echo " 這是第 ".$i." 次迴圈 <br>" ;
}
// 由於只有一行 {} 可以省去
/* expr1  “$i=1” ;設定了 $i 的初始 是值 1
expr2  “$i <= 25” ;若 $i <= 25 才能執行
statements 的部分
expr3  “$i++” ; 每次 statements 的部分
執行完, $i 的 就增加一值
statements  “echo " 這是第 ".$i." 次迴圈 <br>" ; ”
*/
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-19
基本語法 (5) – 流程控制
◙ While
 while (expr) { statements }
每次迴圈前 若 expr 的條件成立,就進入
statements 的部分
未必會執行到 statements 的部分
 do { statements } while (expr);
每次迴圈執行之後 若 expr 的條件成立,才進入
下一輪的 statements 部分
statements 的部分一定會執行到一次
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-20
基本語法 (5) – 流程控制 __
while
<?
echo "<TABLE border = 3>";
echo "<CAPTION> 標題 : 九九乘法表 </CAPTION>";
$i = 0;
while ($i < 3) {
echo "<TR>";
$j = 1;
while ($j<=3) {
echo "<TD width=100>";
for ($k=1; $k<=9; $k++) {
echo $i*3+$j." * ".$k." = ". ($i*3+$j) * $k;
echo "<br>";
}
echo "</TD>";
$j++;
}
$i++;
echo "</TR>";
}
echo "</TABLE>";
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-21
基本語法 (5) – 函式
function foo ($n) // 用 “ function” 開頭來代表函式
{ // 這是一個費氏數列的函式
if ($n == 0) // f(0) = 0
return 0; // f(1) = 1
elseif ($n == 1) // f(n) = f(n-1) + f(n-2)
return 1;
else {
return ( foo($n-1) + foo($n-2) );
}
}
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-22
基本語法 (5) – 函式
function compare (&$DataArray, $index)
{
$temp = Null;
if ( $DataArray[$index-1] > $DataArray[$index] ) {
$temp = $DataArray[$index-1];
$DataArray[$index-1] = $DataArray[$index];
$DataArray[$index] = $temp;
}
}
// &$DataArray 是 Call By Reference
// 若 Array 中 Array[ index] 的值比 Array[ index-1] 小
// 就將兩數互換位置
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-23
基本語法 (6) – 參考資料
◙ PHP 手冊
http://hk.php.net/manual/hk/index.php
◙ MySQL 中文參考手冊
http://linux.tnc.edu.tw/techdoc/mysql/mysql_doc/m
anual_toc.html
◙ Apache 安裝手冊
http://www.linuxhall.org/modules.php?
name=News&file=article&sid=131
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-24
建立資料庫網站 (1) – 連接資料
庫
◙ 第一步:連接 MYSQL 資料庫伺服程式
 mysql_connect
 語法 : int mysql_connect(string [hostname] [:port], string
[username], string [password] );
 傳回值 : 整數
 [hostname] 預設 為值 localhost
 [:port] 使用 個埠與哪 MySQL 連接
 www.ppp.org:8080  用 port 8080 和在 www.ppp.org 這台
主機上的 mysql 連接
 [username] 預設 為值 PHP 執行行程的擁有者
 [password] 預設 為空字串值 ( 即沒有密碼 )
 $mysqlid = mysql_connect(“localhost:8080”, “Admin”, “kill_Bill” );
 Mydql_close($mysqlid); // 關閉 $mysqlid 所代表的連線
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-25
建立資料庫網站 (2) – 選擇資料
庫
◙ 第二步:選擇特定的資料庫
 mysql_select_db
語法 : int mysql_select_db(string database_name, int
[link_identifier] );
 傳回值 : 整數
 [link_identifier]  mysql_connect 的傳回值
$mysqldbid = mysql_select_db(“Books”, $mysqlid );
/* 對建立連線於 $mysqlid 的 mysql 選取其中的 ‘
student’ 資料庫 , 並用 $mysqldbid 來表示
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-26
建立資料庫網站 (3) –
其他和資料庫有關的函
式
◙ 建立資料庫
 int mysql_create_db (string database_name, int [link_identifier] );
 傳回值 : 整數
 mysql_create_db ( “Sony”, $mysqlid );
// 建立名為 Sony 的資料庫
◙ 刪除資料庫
 int mysql_drop_db (string database_name, int [link_identifier] );
 傳回值 : 整數
 mysql_drop_db ( “Sony”, $mysqlid );
// 刪除名為 Sony 的資料庫
◙ 列出所有的資料庫
 int mysql_list_dbs( int [link_identifier] );
 傳回值 : 整數
 mysql_list_dbs( $mysqlid );
// 找出所有在 $mysqlid 所指定的 mysql 伺服程式上的資料庫
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-27
建立資料庫網站 (4) – 執行 SQL 查
詢
◙ 第三步:執行 SQL 詢查
 mysql_query
語法 : int mysql_query(string query, int
[link_identifier]);
傳回值 : 整數
$query_result = mysql_query( “SELECT * FROM
books”, $mysqlid );
// 執行 SQL 詢: “查 SELECT * FROM books”
必須先選擇特定的資料庫
 也就是要先執行 mysql_select_db 來限定某一個資料庫
任何 mysql 可以使用的 SQL 詢都可以使用查
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-28
建立資料庫網站 (5) – 取得 詢結果查
◙ 第四步:取得 詢結果查
 mysql_fetch_object
 語法 : object mysql_fetch_object (int result, int [result_typ]);
 傳回值 : 物件
 $query_row = mysql_fetch_object($query_result);
// 將 $query_result 所指定的 詢結果轉入物件查
// $query_row 中
 取得 詢結果後,可以用查 mysql_free_result 釋放佔
用的記憶體,減輕 mysql 伺服程式的負擔
 語法 : Boolean mysql_free_result (int result);
 傳回值 : 布林值
 Mysql_free_result($query_result);
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-29
一個完整的例子
<?
// 第一步:連接 MYSQL 資料庫伺服程式
$mysqlid = mysql_connect(“localhost:8080”, “Admin”, “kill_Bill” );
// 第二步:選擇特定的資料庫
$mysqldbid = mysql_select_db(“books”, $mysqlid );
// 第三步:執行 SQL 詢查
$query_result = mysql_query( “SELECT bookname FROM books”,
$mysqldbid );
// 第四步:取得 詢結果並分行列印查
while($query_row = mysql_fetch_object($query_result)) {
echo “bookname:”.$query_row->bookname.” // 一行列印一筆資料
";
}
?>
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-30
建立資料庫網站 (6) – 修正資料
庫
◙ 使用 mysql_query 達成
 $exec_str = “DELETE FROM book WHERE
bookid = 1”;
$query_result =
mysql_query( $exec_str, $mysqlid );
 上面是刪除的例子,新增、修改也是將
$exec_str 修正成合適的 SQL 語法即可
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-31
建立資料庫網站 (6) – session 的使用
◙ Session 最常被人使用的功能是頁面間變
數的傳遞
 使用 “ session_start();” 開啟 SESSION
 使用變數 user_name 之前必須先行註冊
Session_register(“user_name”);
不再使用變數 user_name 時,可以註銷
Session_unregister(“user_name”);
 變數註冊後才能使用,使用的方式和陣列一
樣
$_SESSION[‘user_name’] = “Bill”; // 寫入
$hot_user = $_SESSION[‘user_name’]; // 讀取
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-32
建立資料庫網站 (7) – 上傳 案檔
◙ 建立網站的上傳機制
 上傳文件表單必須加上
enctype= “multipart/form-data”
<input type=“file” name=“userfile”>
以提供上傳的介面
 使用 move_uploaded_file( $upload_file_name,
$destination ); 就可以上傳了
$upload_file_name  用以記錄上傳 名的變數檔
$destination  用以指定存放目錄的變數
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-33
上傳 案的完整例子檔
<html>
<form method = "post" enctype= "multipart/form-data" action = "uploads.php">
<input type = "file" name="userfile" size = "30">
<input type = "hidden" name = "MAX_FILE_SIZE" value = "30000">
<input type = "submit" value = " 上傳 案檔 ">
</form>
</html>
<?php
$uploaddir = 'C:/TEMP/';
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
print "File is valid, and was successfully uploaded. Here's some more debugging info:n";
print_r($_FILES);
}
else {
print "Possible file upload attack! Here's some debugging info:n";
print_r($_FILES);
}
?>
製作上傳介面的 uploads.html
Uploads.php
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-34
上傳 案的完整例子檔 ( 註解一 )
◙ <form method = "post" enctype= "multipart/form-data" action = "uploads.php">
 method = “post“  html 和檔 php 的傳遞參數的方式之一檔
 action = “uploads.php“  指定 “ uploads.php” 處理後續的動作
◙ <input type = "file" name="userfile" size = "30">
 <input>  指定此處有一個輸入介面
 type = “file“  輸入介面的型別是 file
 畫面上的單行對話況會顯示所捲定的 案完整的路徑和 案名檔 檔
 此外右方有一個顯示著 “瀏覽…” 的按鈕 , 可以打開 “選擇 案” 的對話框檔
◙ <input type = "hidden" name = "MAX_FILE_SIZE" value = "30000">
 type = “hidden“  此型別不會顯示任何東西
 name = “MAX_FILE_SIZE” value = “30000“  設定 “ MAX_FILE_SIZE” 的值
= 30000
◙ <input type = "submit" value = " 上傳 案檔 ">
 type = “submit“  會顯示一個按鈕 ; 按下後 , 會執行先前 action 所指定的 案檔
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-35
上傳 案的完整例子檔 ( 註解二 )
◙ $uploaddir = 'C:/TEMP/';
 設定變數 $uploaddir 的值 = ‘C:/TEMP/’ 以供未來指定 案的目錄之用檔
 PHP 在目錄中 不用反斜線 ‘ ’ 而是用除號 ‘ /’
◙ $_FILES['userfile']['tmp_name']
 出現在 if 的判斷式之中
 是用來接收 uploads.html 所要上傳的 案檔
 ‘userfile’  在 uploads.html 所指定的名字
 ‘tmp_name‘  php 暫時賦予 案的名字檔
◙ $uploaddir . $_FILES['userfile']['name']
 將 $uploaddir 和 $ _FILE[‘userfile’][‘name’] 兩個變數執行字串連接
 用這個新的字串當作 存放上傳 案的 完整路徑檔
◙ move_uploaded_file( $_FILES['userfile']['tmp_name'],
$uploaddir . $_FILES['userfile']['name'])
 Move_uploaded_file 依照上兩項參數執行上傳的動作
 若上傳成功 將傳回 true 使得 if 的判斷式的結果是 true; 否則就是
false
國立清華大學資訊基礎教育教學改進計畫08/18/14 P-36
建立資料庫網站 (8) – 總結
◙ 用 php 建立資料庫網站是用來建立一個友
善的使用者介面
 真正的資料庫還是在隱身於 php 之後的
mysql 、 access… 等資料庫程式中
 使用者介面必須依照各個使用者的需求而定
例如:圖書館讀者的資料會因時間而有所易動,
所以必須給予圖書館讀者更新資料的介面
例二:圖書館讀者不需負責圖書的管理,所以圖
書館讀者的介面上就不需要任何關於管理圖書的
介面

Más contenido relacionado

La actualidad más candente

Python 入门
Python 入门Python 入门
Python 入门
kuco945
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend Framework
Jace Ju
 
Bash入门基础篇
Bash入门基础篇Bash入门基础篇
Bash入门基础篇
Zhiyao Pan
 
Pl 06 p10.prn
Pl 06 p10.prnPl 06 p10.prn
Pl 06 p10.prn
jokertest
 
Js is js(程劭非) (1)
Js is js(程劭非) (1)Js is js(程劭非) (1)
Js is js(程劭非) (1)
looneyren
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
QLeelulu
 

La actualidad más candente (20)

Python元組,字典,集合
Python元組,字典,集合Python元組,字典,集合
Python元組,字典,集合
 
Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1
 
Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學
 
Python 入门
Python 入门Python 入门
Python 入门
 
Python串列資料應用
Python串列資料應用Python串列資料應用
Python串列資料應用
 
Python xmlrpc-odoo
Python xmlrpc-odooPython xmlrpc-odoo
Python xmlrpc-odoo
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend Framework
 
Bash入门基础篇
Bash入门基础篇Bash入门基础篇
Bash入门基础篇
 
Pl 06 p10.prn
Pl 06 p10.prnPl 06 p10.prn
Pl 06 p10.prn
 
Js is js(程劭非) (1)
Js is js(程劭非) (1)Js is js(程劭非) (1)
Js is js(程劭非) (1)
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
Programming python - part 1
Programming python - part 1Programming python - part 1
Programming python - part 1
 
C語言標準輸出入函式
C語言標準輸出入函式C語言標準輸出入函式
C語言標準輸出入函式
 
Ch8
Ch8Ch8
Ch8
 
Test
TestTest
Test
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
0710 php學習進度(1)
0710 php學習進度(1)0710 php學習進度(1)
0710 php學習進度(1)
 
Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则
 

Similar a PHP

钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
Zhi Zhong
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
litaocheng
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
youzitang
 
第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)
9scss
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)
Leo Hui
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li
 

Similar a PHP (20)

Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source Code
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会钟志 第八期Web标准化交流会
钟志 第八期Web标准化交流会
 
Sun java
Sun javaSun java
Sun java
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
 
2009 CSBB LAB 新生訓練
2009 CSBB LAB 新生訓練2009 CSBB LAB 新生訓練
2009 CSBB LAB 新生訓練
 
Eloquent ORM
Eloquent ORMEloquent ORM
Eloquent ORM
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
ios分享
ios分享ios分享
ios分享
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
Eloquent ORM
Eloquent ORMEloquent ORM
Eloquent ORM
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)
 
cfm to php training
cfm to php training cfm to php training
cfm to php training
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 

PHP

  • 2. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-2 課程大綱 ◙ 淺談 PHP ◙ 設定環境 ◙ 基本語法 ◙ 建立資料庫網站
  • 3. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-3 淺談 PHP ◙ 由 Rasmus Lerdorf 所創的“個人主頁工具” ( Personal Home Page Tools )  test1.html 和 test1.php 所顯示的資料是完全 一樣的  由這個例子可以知道所有的網頁都可以藉由 php 產生  藉由 php 可以動態產生網頁內容 這個程式可以傳回瀏覽網頁的人,所使用的 IP Address
  • 4. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-4 設定環境 ◙ 可以經由 PHP 的官方網站下載 PHP 的 安裝套件 ◙ 常見的搭配組合是  Apache web server – 網頁伺服器  MySQL – 資料庫伺服器
  • 5. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-5 設定環境 ( 續 ) ◙ 建議先安裝 MySQL  除了設定路徑,一直按下一步就可以了 ◙ 其次安裝 Apache  若無 hostname 請用 ip address 代替 ◙ 最後安裝 php  必須先確認網頁伺服程式 (Apache) 已經 動啟  必須修改 php.ini 中的參數  必須修正 Apache 的 httpd.conf  詳情請參考下載下來的 install.txt
  • 6. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-6 基本語法 (1) ◙ 以 “ <?php” 或者 是 “ <?” 開始 結束符號是 “ ?>” ◙ 每行末加分號 “ ;” 結尾 ◙ 注釋方法  和 C 一樣  //  單行註解  /* */  段落註 解 <? echo "123456"; // 第一行 echo "123 n 456"; // 想用 'n' 換行 但沒法成功 echo "123"; ?> <br> <? echo"456"; // 用 html 中的 <br> 換行 /* 注意最後一行 , php 可以隨處中斷 , 隨處開始 */ ?>
  • 7. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-7 基本語法 (2) ◙ 引用文件  require  通常放在 PHP 程式的最前面  會先讀入指定的文件,使它變成 網頁的一部份  常用的函數,可以這個方法將它引入網頁中  引入的文件若有錯誤,網頁將停止執行  include  一般是放在流程控制的處理部分中  讀到 include 的文件時,才將它讀進來  這種方式,可以把程式執行時的流程簡單化  若讀入的文件有錯,網頁將提出警告,仍會繼續執行
  • 8. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-8 基本語法 (2) – 引用文件 <? require “getenv_remote_addr.php”; // 此程式可以取得使用者的 ip 並存在 $ip 中 echo "I like who come from " . $ip . "!!"; ?> <? $i = 2; if ($i == 1) { echo "I like who come from "; include “getenv_remote_addr.php”; // 此時這行將不會被讀入 } else { echo "Oh!! NOOOOOOO..."; } ?>
  • 9. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-9 基本語法 (3) ◙ 變數  以 ‘ $’ 開頭  不用宣告型別 可用 cast 或者 settype() 明確的設定  有下列型別 整數、浮點數、字串、陣列和物件  物件用 new 來產生  英文字母大小寫會被視為不同 $A 和 $a 是兩個不同的變數
  • 10. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-10 基本語法 (3) – 變數 <? $string = " 字串 " ; $int = 438 ; $float1 = 13.37908816 ; $float2 = 1.414E+2 ; $TestArray = array( "A" , " 乙 " , " 寅 " , "d" , $int, $float1, $float2, $string); // array 中可以有不同型別的變數 echo $TestArray; // 由於沒指定位址 所以會列印出 ‘ Array’ echo $TestArray[0] . $TestArray[1] . $TestArray[2] . $TestArray[3]; echo $TestArray[4] . $TestArray[5] . $TestArray[6] . $TestArray[7]; ?> <br> <br> <? sort($TestArray); // 可以對 array 進行排序 echo $TestArray[0] . $TestArray[1] . $TestArray[2] . $TestArray[3]; echo $TestArray[4] . $TestArray[5] . $TestArray[6] . $TestArray[7]; ?>
  • 11. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-11 基本語法 (3) – 變數 <? class foo { var $_num = null; // 物件中的參數必須先加 var function get_seed($i) // 物件的 method { $this->_num = $i; // this 是 “本物件” 的意思 } function do_foo () { echo $this->_num; echo "Doing foo."; } } $bar = new foo; $bar->get_seed(88); // 也可以傳入 浮點樹 或 字串 $bar->do_foo(); ?>
  • 12. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-12 基本語法 (4) – 運算符號 ◙ 數學運算  ‘+’ 、 ‘ -’ 、 ‘ *’ 、 ‘ /’  加、減、乘、除  ‘ %’ 取餘數 、 ‘ ++’ 累加 、 ‘ --’ 遞減 ◙ 字串運算 – ‘ .’  $a = “PHP”; $b = “ 真利害” $a.$b  “PHP 真利害” ◙ 邏輯運算  < 、 > 、 <= 、 >=  == 等於 、 != 不等於  ‘&&’ 、‘ and’ 都是‘而且’;‘ ||’ 、‘ or’ 都是‘或’;  ‘xor’ 就是 ‘ Xor’ ; ‘ !’ 就是 ‘不’
  • 13. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-13 基本語法 (5) – 流程控制 ◙ if..else  if (expr) { statements } expr  判斷式,例如 “ $a<=1” statements  該執行的程式 若程式只有一行,可以省略大括弧 {}  If (expr) { statements } else { statements }
  • 14. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-14 基本語法 (5) – 流程控制 __ if..else <? if ( $x > $y ) { echo “x 比 y 大” ; } elseif ( $x == $y ) { echo “x 等於 y”; } else { echo “x 比 y 小” ; } ?>
  • 15. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-15 基本語法 (5) – 流程控制 ◙ switch  switch (expr) { case expr1: statement1s; break; case expr2: statement2s; break; default: statement_ds; break; }
  • 16. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-16 基本語法 (5) – 流程控制 __ switch <? switch ( date ( "H" ) ) { case 5: case 6: case 7: // 多個值一起 echo “Good morning.”; // 上午說早安 break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: echo “Have A Nice Day!”; // 工作時說日安 break; case 18: case 19: case 20: case 21: echo “Good Night.”; // 晚上說晚安 break; default: // default 設定其餘的狀況該如何 echo “Have A Good Dream.”; // 其餘祝您好眠 break; } ?>
  • 17. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-17 基本語法 (5) – 流程控制 ◙ for  for (expr1; expr2; expr3) { statements } expr1  設定初始條件之用 expr2  設定繼續執行的條件 expr3  statement 執行完畢後,用來改變條件, 供下次的迴圈判斷 (expr2) statements  該執行的程式 若程式只有一行,可以省略大括弧 {}
  • 18. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-18 基本語法 (5) – 流程控制 __ for <? for ( $i = 1 ; $i <= 25 ; $i++) { echo " 這是第 ".$i." 次迴圈 <br>" ; } // 由於只有一行 {} 可以省去 /* expr1  “$i=1” ;設定了 $i 的初始 是值 1 expr2  “$i <= 25” ;若 $i <= 25 才能執行 statements 的部分 expr3  “$i++” ; 每次 statements 的部分 執行完, $i 的 就增加一值 statements  “echo " 這是第 ".$i." 次迴圈 <br>" ; ” */ ?>
  • 19. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-19 基本語法 (5) – 流程控制 ◙ While  while (expr) { statements } 每次迴圈前 若 expr 的條件成立,就進入 statements 的部分 未必會執行到 statements 的部分  do { statements } while (expr); 每次迴圈執行之後 若 expr 的條件成立,才進入 下一輪的 statements 部分 statements 的部分一定會執行到一次
  • 20. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-20 基本語法 (5) – 流程控制 __ while <? echo "<TABLE border = 3>"; echo "<CAPTION> 標題 : 九九乘法表 </CAPTION>"; $i = 0; while ($i < 3) { echo "<TR>"; $j = 1; while ($j<=3) { echo "<TD width=100>"; for ($k=1; $k<=9; $k++) { echo $i*3+$j." * ".$k." = ". ($i*3+$j) * $k; echo "<br>"; } echo "</TD>"; $j++; } $i++; echo "</TR>"; } echo "</TABLE>"; ?>
  • 21. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-21 基本語法 (5) – 函式 function foo ($n) // 用 “ function” 開頭來代表函式 { // 這是一個費氏數列的函式 if ($n == 0) // f(0) = 0 return 0; // f(1) = 1 elseif ($n == 1) // f(n) = f(n-1) + f(n-2) return 1; else { return ( foo($n-1) + foo($n-2) ); } }
  • 22. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-22 基本語法 (5) – 函式 function compare (&$DataArray, $index) { $temp = Null; if ( $DataArray[$index-1] > $DataArray[$index] ) { $temp = $DataArray[$index-1]; $DataArray[$index-1] = $DataArray[$index]; $DataArray[$index] = $temp; } } // &$DataArray 是 Call By Reference // 若 Array 中 Array[ index] 的值比 Array[ index-1] 小 // 就將兩數互換位置
  • 23. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-23 基本語法 (6) – 參考資料 ◙ PHP 手冊 http://hk.php.net/manual/hk/index.php ◙ MySQL 中文參考手冊 http://linux.tnc.edu.tw/techdoc/mysql/mysql_doc/m anual_toc.html ◙ Apache 安裝手冊 http://www.linuxhall.org/modules.php? name=News&file=article&sid=131
  • 24. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-24 建立資料庫網站 (1) – 連接資料 庫 ◙ 第一步:連接 MYSQL 資料庫伺服程式  mysql_connect  語法 : int mysql_connect(string [hostname] [:port], string [username], string [password] );  傳回值 : 整數  [hostname] 預設 為值 localhost  [:port] 使用 個埠與哪 MySQL 連接  www.ppp.org:8080  用 port 8080 和在 www.ppp.org 這台 主機上的 mysql 連接  [username] 預設 為值 PHP 執行行程的擁有者  [password] 預設 為空字串值 ( 即沒有密碼 )  $mysqlid = mysql_connect(“localhost:8080”, “Admin”, “kill_Bill” );  Mydql_close($mysqlid); // 關閉 $mysqlid 所代表的連線
  • 25. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-25 建立資料庫網站 (2) – 選擇資料 庫 ◙ 第二步:選擇特定的資料庫  mysql_select_db 語法 : int mysql_select_db(string database_name, int [link_identifier] );  傳回值 : 整數  [link_identifier]  mysql_connect 的傳回值 $mysqldbid = mysql_select_db(“Books”, $mysqlid ); /* 對建立連線於 $mysqlid 的 mysql 選取其中的 ‘ student’ 資料庫 , 並用 $mysqldbid 來表示
  • 26. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-26 建立資料庫網站 (3) – 其他和資料庫有關的函 式 ◙ 建立資料庫  int mysql_create_db (string database_name, int [link_identifier] );  傳回值 : 整數  mysql_create_db ( “Sony”, $mysqlid ); // 建立名為 Sony 的資料庫 ◙ 刪除資料庫  int mysql_drop_db (string database_name, int [link_identifier] );  傳回值 : 整數  mysql_drop_db ( “Sony”, $mysqlid ); // 刪除名為 Sony 的資料庫 ◙ 列出所有的資料庫  int mysql_list_dbs( int [link_identifier] );  傳回值 : 整數  mysql_list_dbs( $mysqlid ); // 找出所有在 $mysqlid 所指定的 mysql 伺服程式上的資料庫
  • 27. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-27 建立資料庫網站 (4) – 執行 SQL 查 詢 ◙ 第三步:執行 SQL 詢查  mysql_query 語法 : int mysql_query(string query, int [link_identifier]); 傳回值 : 整數 $query_result = mysql_query( “SELECT * FROM books”, $mysqlid ); // 執行 SQL 詢: “查 SELECT * FROM books” 必須先選擇特定的資料庫  也就是要先執行 mysql_select_db 來限定某一個資料庫 任何 mysql 可以使用的 SQL 詢都可以使用查
  • 28. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-28 建立資料庫網站 (5) – 取得 詢結果查 ◙ 第四步:取得 詢結果查  mysql_fetch_object  語法 : object mysql_fetch_object (int result, int [result_typ]);  傳回值 : 物件  $query_row = mysql_fetch_object($query_result); // 將 $query_result 所指定的 詢結果轉入物件查 // $query_row 中  取得 詢結果後,可以用查 mysql_free_result 釋放佔 用的記憶體,減輕 mysql 伺服程式的負擔  語法 : Boolean mysql_free_result (int result);  傳回值 : 布林值  Mysql_free_result($query_result);
  • 29. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-29 一個完整的例子 <? // 第一步:連接 MYSQL 資料庫伺服程式 $mysqlid = mysql_connect(“localhost:8080”, “Admin”, “kill_Bill” ); // 第二步:選擇特定的資料庫 $mysqldbid = mysql_select_db(“books”, $mysqlid ); // 第三步:執行 SQL 詢查 $query_result = mysql_query( “SELECT bookname FROM books”, $mysqldbid ); // 第四步:取得 詢結果並分行列印查 while($query_row = mysql_fetch_object($query_result)) { echo “bookname:”.$query_row->bookname.” // 一行列印一筆資料 "; } ?>
  • 30. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-30 建立資料庫網站 (6) – 修正資料 庫 ◙ 使用 mysql_query 達成  $exec_str = “DELETE FROM book WHERE bookid = 1”; $query_result = mysql_query( $exec_str, $mysqlid );  上面是刪除的例子,新增、修改也是將 $exec_str 修正成合適的 SQL 語法即可
  • 31. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-31 建立資料庫網站 (6) – session 的使用 ◙ Session 最常被人使用的功能是頁面間變 數的傳遞  使用 “ session_start();” 開啟 SESSION  使用變數 user_name 之前必須先行註冊 Session_register(“user_name”); 不再使用變數 user_name 時,可以註銷 Session_unregister(“user_name”);  變數註冊後才能使用,使用的方式和陣列一 樣 $_SESSION[‘user_name’] = “Bill”; // 寫入 $hot_user = $_SESSION[‘user_name’]; // 讀取
  • 32. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-32 建立資料庫網站 (7) – 上傳 案檔 ◙ 建立網站的上傳機制  上傳文件表單必須加上 enctype= “multipart/form-data” <input type=“file” name=“userfile”> 以提供上傳的介面  使用 move_uploaded_file( $upload_file_name, $destination ); 就可以上傳了 $upload_file_name  用以記錄上傳 名的變數檔 $destination  用以指定存放目錄的變數
  • 33. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-33 上傳 案的完整例子檔 <html> <form method = "post" enctype= "multipart/form-data" action = "uploads.php"> <input type = "file" name="userfile" size = "30"> <input type = "hidden" name = "MAX_FILE_SIZE" value = "30000"> <input type = "submit" value = " 上傳 案檔 "> </form> </html> <?php $uploaddir = 'C:/TEMP/'; print "<pre>"; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) { print "File is valid, and was successfully uploaded. Here's some more debugging info:n"; print_r($_FILES); } else { print "Possible file upload attack! Here's some debugging info:n"; print_r($_FILES); } ?> 製作上傳介面的 uploads.html Uploads.php
  • 34. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-34 上傳 案的完整例子檔 ( 註解一 ) ◙ <form method = "post" enctype= "multipart/form-data" action = "uploads.php">  method = “post“  html 和檔 php 的傳遞參數的方式之一檔  action = “uploads.php“  指定 “ uploads.php” 處理後續的動作 ◙ <input type = "file" name="userfile" size = "30">  <input>  指定此處有一個輸入介面  type = “file“  輸入介面的型別是 file  畫面上的單行對話況會顯示所捲定的 案完整的路徑和 案名檔 檔  此外右方有一個顯示著 “瀏覽…” 的按鈕 , 可以打開 “選擇 案” 的對話框檔 ◙ <input type = "hidden" name = "MAX_FILE_SIZE" value = "30000">  type = “hidden“  此型別不會顯示任何東西  name = “MAX_FILE_SIZE” value = “30000“  設定 “ MAX_FILE_SIZE” 的值 = 30000 ◙ <input type = "submit" value = " 上傳 案檔 ">  type = “submit“  會顯示一個按鈕 ; 按下後 , 會執行先前 action 所指定的 案檔
  • 35. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-35 上傳 案的完整例子檔 ( 註解二 ) ◙ $uploaddir = 'C:/TEMP/';  設定變數 $uploaddir 的值 = ‘C:/TEMP/’ 以供未來指定 案的目錄之用檔  PHP 在目錄中 不用反斜線 ‘ ’ 而是用除號 ‘ /’ ◙ $_FILES['userfile']['tmp_name']  出現在 if 的判斷式之中  是用來接收 uploads.html 所要上傳的 案檔  ‘userfile’  在 uploads.html 所指定的名字  ‘tmp_name‘  php 暫時賦予 案的名字檔 ◙ $uploaddir . $_FILES['userfile']['name']  將 $uploaddir 和 $ _FILE[‘userfile’][‘name’] 兩個變數執行字串連接  用這個新的字串當作 存放上傳 案的 完整路徑檔 ◙ move_uploaded_file( $_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])  Move_uploaded_file 依照上兩項參數執行上傳的動作  若上傳成功 將傳回 true 使得 if 的判斷式的結果是 true; 否則就是 false
  • 36. 國立清華大學資訊基礎教育教學改進計畫08/18/14 P-36 建立資料庫網站 (8) – 總結 ◙ 用 php 建立資料庫網站是用來建立一個友 善的使用者介面  真正的資料庫還是在隱身於 php 之後的 mysql 、 access… 等資料庫程式中  使用者介面必須依照各個使用者的需求而定 例如:圖書館讀者的資料會因時間而有所易動, 所以必須給予圖書館讀者更新資料的介面 例二:圖書館讀者不需負責圖書的管理,所以圖 書館讀者的介面上就不需要任何關於管理圖書的 介面

Notas del editor

  1. 淺談PHP – 簡介php 的特點, 減輕學生因為不了解所產生的心理壓力 設定環境 – 說明php要如何完成先關程式及自身的安裝 基本於法 – php的基本自身語法, 不用太難 聯結資料庫 – 說明php該如何鏈結MYSQL等資料庫 已查出使用者需要的資料 威力展示 – 列舉實用的例子