PHP part2 - 國立清華大學資訊工程系

Download Report

Transcript PHP part2 - 國立清華大學資訊工程系

Introduction to PHP part2
靜態網頁
• Step 1:Client 透過Internet 向Web Server 提
出瀏覽某個HTML 檔案的需求。
• Step 2:若Web Server 上有該網頁的話,便
將其內容回傳給Client。
動態網頁
• Step 1:Client 透過Internet 向Web Server 提出瀏覽
某個PHP 檔案的需求。
• Step 2:Web Server 會先將其內容轉給PHP解譯程式
處理。
• Step 3:處理過程中,可搭配Database 共同作業
(讀取/寫入資料)。
• Step 4:然後再將處理過的內容回傳給Web Server。
• Step 5:Web Server再將其回傳給Client。
轉換成HTML格式
Server Side 技術
CGI-以C、Perl 或其他語言寫成。
– ASP (Active Server Pages)-只適用微軟平台。
– PHP-與作業平台關連性較低。
– JSP (Java Server Pages)-需要懂Java。
–
什麼是PHP?
• PHP原名為Personal Home Page,PHP3之後
改名為Hypertext Preprocessor 。
• PHP可嵌入HTML之中,彌補純HTML 碼無法
進行運算處理的缺憾,為目前廣泛運用在
網頁程式撰寫的語言之ㄧ。
• 語法結構和C/C++、Java等語法相似。
什麼是PHP?
• *.html 的網頁會被Web Server 直接送出;*.
php的網頁會先經PHP解譯程式處理後再送
出。
• 即使網頁含有PHP 程式碼,經處理之後輸出
到使用者的頁面也只會只剩下HTML 碼;原
始內容可以受到保護(不被竊取),使用
者也無須安裝PHP軟體。
• 任何的*.php檔皆是透過Server端的php.exe
來解譯程式碼。
傳遞資料
• 現在的網頁不單單只是單向的顯示網頁給使
用者端, 更可以和使用者作互動
– Ex: Google搜尋引擎
• 因此需要製作一個使用者介面讓使用者可以
輸入的動作
– 使用HTML來設計一個輸入的介面
• 表單(Form)
• Web server必須也要有個相對應的程式可以
處理使用者輸入的資料, 並給予適當的回應
PHP的表單處理
• 網頁表單為網站的使用者介者,利用此介面將使用者輸入
的資料傳送到伺服端的PHP程式進行處理,也可以說是PHP
程式的輸入介面。
將輸入的資料傳送到伺服
端的PHP程式處理。
User input data
瀏覽程式的網
頁表單
執行結果回傳給瀏覽
程式顯示。
Web伺服器
PHP程式
表單(Form)
• 先定義出一個表單, 在表單裡面可以有很多輸入欄位
– 文字欄位(Text), 密碼欄位(Password), 單一選擇鈕(Radio), 多
重選擇鈕(Check Box), 文字區塊:可輸入大量文字(Text Area)
• 會一次將一個表單裡面所有的輸入欄位送給web
server
– 將想要使用者輸入的欄位都置放在同一個表單裡
表單(Form)
• 表單的傳送方式有GET和POST
– GET:最大長度為255 ,會於網址尾端加上?變
數名稱1=值&變數名稱2=值…。 處理表單資料的php
php所在 http://ip/get.php?a=1&b=2
的ip
– POST:所傳訊息不會顯示,資料長度無限制。
(伺服器的php還是會設定一限制) 當資料傳送到
選擇要使用
GET或POST方
式傳送資料
server後, 由哪個
php程式來處理
這些資料
使用KompoZer製作表單
先定義出一
個表單
定義表單
幫這個表單取
個名字
使用哪個php
來處理資料
選擇用GET或
者是POST來傳
送資料, 在這裡
先選GET
定義表單欄位
常用的表單欄位都在Form Field裡
Text欄位
虛線範圍內即代表
表單的內容範圍
欄位的
名稱最
好使用
英文
將姓名的Text欄位取名
為name, 之後傳送給
server, name=John (假設
輸入名字為John)
Check Box欄位
如果勾選是本系學生, 送給
server的資料為check=on
(CheckBox是可複選欄位)
Radio Button欄位
因為Radio Button只能
選擇其中一個, 所以他
是一個Group具有多
個選項, 所以同屬一個
Group必須使用相同
的Group Name
如果選擇性別為
男, 則送出的資
料為sex=boy
Text Area欄位
Text Area可讓使用
者輸入大量文字
定義Text Are的大小
假設在TextArea輸入
Hello World, 則送給
server的資料為
Message=Hello+World
不過php會自動將+解讀
成空白符號
Submit Button欄位
一個表單裡面一定要
有Submit Button,
按下Submit Button即
代表將表單資料送出
Field Value的值
會被顯示在
button上
• 更詳細的表單製作
送出的資料為
http://140.114.79.18:8000/get.php?key=Joh
n&check=on&sex=boy&Message=Hello+Worl
d&submit=submit
會顯示在瀏覽器的網址列上
給使用者輸入資料的網
頁只是一個有表單的網
頁, 不包含php程式, 所
以這個網頁的副檔名是
htm或者是html
補充: Selection List
給這個
selection list
一個名字
Selection List
預覽結果
想要在瀏
覽器顯示
的文字
要增加list的
選項, 必須先
add option
假設選了大一, 則送到web
server的內容為list=first
代表此選項
的值, 如果選
了此選項, 會
將這個值送
到server
PHP程式如何處理GET的資料
• 使用GET傳到PHP的變數會存在一個名為
$_GET的變數中,而這一個變數是一個陣列
– http;//localhost/get.php?a=1&b=2則用$_GET[‘a’];
$_GET[‘b’]; 來接收資料
範例
使用PHP程式來處理資料
使用GET送出的資料
<?php
$name=$_GET['name'];
$sex=$_GET['sex'];
$check=$_GET['check'];
echo $name;
echo "性別是$sex<br>";
if (strcmp("on",$check)==0){
echo "就讀本系";
}
else{
echo "不是本系學生";
}
http://pads8.cs.nthu.edu.tw:8000/get.php?k
ey=John&check=on&sex=boy&Message=Hell
o+World&submit=submit
和PHP的String變數有關的function
?>
使用POST傳遞資料
• 因為使用GET傳遞資料有長度限制, 所以在
傳送留言或者是檔案時, 都會使用POST
• 傳遞資料的內容不會顯示在瀏覽器的網址
列
• 利用$_POST[‘…’]來接收資料
範例
將之前的例子改成用POST
傳遞資料, 則只需將$_GET
改成$_POST
<?php
$name=$_POST['name'];
$sex=$_POST['sex'];
$check=$_POST['check'];
echo $name;
echo "性別是$sex<br>";
if (strcmp("on",$check)==0){
echo "就讀本系";
}
else{
echo "不是本系學生";
}
?>
上傳檔案
• 當利用PHP上傳檔案時,它會先將檔案先置
放於php.ini所指定的暫存區,然後再由程式
設計者「搬移」到所指定的「路徑位置」,
此時,程式設計者可以使用檔案原來的命
名,也可以藉此順便更名
PHP的上傳檔案限制
• 有關PHP的上傳檔案限制都規範在php.ini裡
– EasyPHP按右鍵→configuration → PHP
網頁表單-檔案上傳
• 表單的傳送方式method必須為post
網頁顯示
更改HTML原始碼
將enctype變更為multipart/form-data
(預設值為application/x-www-form-urlencoded)
PHP端如何處理上傳檔案
• 使用$_FILES[‘upfile’] 五個陣列值來取得檔案
資料:
上傳檔案範例
<?php
$temp=$_FILES['file']['tmp_name'];
$name=$_FILES['file']['name'];
$size=$_FILES['file']['size'];
$type=$_FILES['file']['type'];
echo "暫存檔: $temp<br>";
echo "上傳檔案名稱: $name<br>";
echo "檔案大小:$size<br>";
echo "檔案類型:$type<br>";
if(move_uploaded_file($temp, "./upfile")) {
echo "上傳OK!";
}
將上傳的暫存檔移
到和php同個目錄
下,並改名成upfile
?>
瀏覽器顯示結果
今日練習(cont’)
• 製作披薩訂單網頁
– 此網頁包含客戶訂單和客戶意見兩個表單
– 客戶訂單使用GET處理, 客戶意見使用POST處理
今日練習 (con’t)
• 訂購披薩部分
– 假設店裡只有三種披薩, 且一個訂單只能選擇其
中一種披薩
– 如果訂購金額超過400元, 則不需外送費用; 若沒
超過400, 需加收外送費用50元
– 請印出顧客此次消費的總金額
今日練習
• 客戶留言部分
– 顯示留言時間, 使用date("Y-m-d H:i:s")
– 顯示留言人的暱稱和留言內容
– 顯示留言人的圖像 (bonus10分)
補充: POST和GET的封包差別
• 網路上流傳的資料會被切割成一個個封包,
而每個封包都會有標頭(header)和資料段
(data)
– Header來標明此封包要送往何處(IP, port)和使用
哪種協定(protocol); data則是存放欲傳送的內容
• GET的封包, 會直接將傳輸的資料放在
header中(因為有資料長度的限制)
• POST的封包則是會在header中的contentlength告知傳輸資料的長度, 傳輸的內容是
放在封包的data
GET的封包
POST的封包
Reference
• PHP5網管實驗室
– http://www.php5.idv.tw/html.php?mod=article&act=i
ndex&cid=3
• CGI程式入門
– http://ind.ntou.edu.tw/~dada/cgi/CGIprog.htm
• “PHP入門教學”, Little Chen, 虎尾科技大學資訊
工程系
– http://www.csie.nfu.edu.tw/phpBB2/download.php?i
d=1732&sid=2831850096e414beadd50967981c2536
• PHP程式設計講義
– http://km.tceb.edu.tw/~wsx/php/index.htm