網頁

2017年3月31日 星期五

PHP 語法入門-4~html php 表單傳送與接收資料

要明白網頁html及php 表單傳送與接收的方法,首先要知道其運作原理,下面先來一張示意圖,然後做一個分析,下面有三種傳遞接收表單的模式:
formpage
照上表,我們大致區分這三種傳遞方式,先來看看優缺點分析:
A → B  B輸出A → A  A輸出A →(js jquery)→PHP再回傳 A輸出
( 目前主流方式 )
優點:
不須考慮頁面瀏覽器支援度
優點:
不須考慮頁面瀏覽器支援度
優點:傳遞數據資料時,良好的即時訊息顯示
缺點:即時訊息可能必須往返來回頁面穿梭缺點:在程式碼上,須要考慮更多問題產生缺點:須考慮到瀏覽器的支援度,若支持度不足,則造成頁面根本沒任何反應
上述簡單分析表單在傳遞數據與接收數據時的優缺點,這僅是小學生個人小小的觀點,不管使用那種方式,其實程式的內容與便利性和易讀性,才是佔了最大的成份所在。

先談談表單傳送數據時使用的傳遞方式:方法有兩種,get 與 post ,我們可以在 html 表單上面看到像這樣的語法:
<form action="接收資料的程式" method="get"> ... 表單內容...</form>
<form action="接收資料的程式" method="post">...表單內容...</form>
來看看 get 與 post 傳遞資料的區別:
GETPOST
網址網址列可以明顯看到傳遞的資料內容無法由網址列看到
資料傳遞量大約1024字節2M
安全性較低較高
效率較高較低
較常被用來傳遞的資料比較無關痛癢的資料(會癢的一般會加密處理)
好比:頁面的分頁網址、頁面的標題等等
很癢的資料
好比:帳號、密碼
我們先來看看下面範例,送出表單後的網址及內容變化:
首先,新增一頁HTML頁面命名為 a.html 內容如下:
上例HTML表單包含兩種傳遞模式(get與post)接下來,使用接收表單命令的 PHP 語法:
$_GET();

$_POST();
再來建立一頁PHP程式碼頁面,用以接收 a.html 頁面傳遞過去的資料,將 php 命名為 b.php 程式碼內並添加簡單判斷式,內容如下:
將此兩頁面,放置與本機相同的資料夾內,開啟 a.html 頁面做測試,點擊 login 鍵,查看頁面顯示的說明,請注意兩個接收頁面的 判斷式稍微有些不同處。

a.html 內的第一個表單內容
<form action="b.phpmethod="get">
姓名:<input name="user_name" type="text" />
密碼:<input name="user_pass" type="password" />
<input name="submit" type="submit" value="login" /></form>
表單內的語法
action="b.php" 表示此表單將傳送到 b.php 程式處理
method="get" 使用 get 方式傳遞數據給 b.php 程式
name="user_name" 此為欄位名稱(每個欄位皆須定義一個名稱,否則表單無法接受到資料)
以此欄位而言,送出的資料就會以 $_GET =['user_name' =>'欄位輸入之資料']; 這種陣列型態儲存於 $_GET 陣列內,以供程式讀取,因此我們要讀取 user_name 之資料內容時,則使用 $_GET['user_name'] 取出的資料就是元素值,也就是在 姓名欄內所填寫的資料
若以 post 傳遞資料時,則會以 $_POST =['user_name' =>'欄位輸入之資料']; 這樣儲存於陣列中,道理同上,以 $_POST['user_name']; 讀出資料。

同理可證 $_GET['user_pass'] 即為表單中(get傳遞資料方式),訪客所輸入的密碼資料
而 $_POST['user_pass'] 即為表單中(post傳遞資料方式),訪客所輸入的密碼資料

接收表單的 b.php 程式,是用來處理 a.html 傳遞過來的資料使用,這裡僅用很簡單的判斷式處理
if( $_GET['user_name'] != ''){echo '姓名:'.$_GET['user_name'].'<br />';}else{echo '無名氏';}
此判斷式意思為:如果 $_GET['user_name']  之內容(元素值)不等於!=) 空字串('')  則顯示出 姓名欄位 $_GET['user_name']的元素值資料,否則 在螢幕顯示出 無名氏

下面這段代碼是 a.html 傳送資料到 b.php 頁面的另一個簡單範例,範例會自動變化所選擇的影片內容,因影片是直接引用 youtube 影片內坎語法,因此在測試時,請保持網路連線,才可看到影片喔!
請將下面代碼存成 a.html 放置於 C:\AppServ\www\a.html
啟動 Apache 伺服器
將下面代碼存成 b.php 並存放於與 a.html 相同資料夾內
測試上面的表單後,會發現,當使用 get 傳遞資料時,傳遞的資料會顯示在網址列當中,並且使用 urlencode 編碼方式,將資料編碼,以上面例子為例,若使用get傳遞方式,網址會顯示如這樣(IE瀏覽器):
http://127.0.0.1/b.php?select_video=1&submit=%E9%80%81%E5%87%BA
Chrome及火弧瀏覽器會直接顯示
http://127.0.0.1/b.php?select_video=1&submit=送出
就IE而言
b.php 是目前正在執行的程式名稱,? 符號後面即代表傳送出的資料內容,而傳遞的資料會以 & 此符號去區隔開來,因此此資料分成兩部份
select_video=1 (第一部份)
submit=%E9%80%81%E5%87%BA (第二部份)
此兩部份就是表單上的 name 和 選擇(填寫)的值,因為被編碼過,所以中文會呈現出上面看似亂碼的東東,使用解碼指令 urldecode() 就可以查看出資料中完整訊息了,代碼如下:
得到的結果就是這樣:http://127.0.0.1/b.php?select_video=1&submit=送出
當你瀏覽任何頁面時,若瀏覽器沒有接收到 post 資訊檔頭時,基本上預設進入頁面的初始,都是使用 GET 方式抓取頁面資料
我們用 yahoo 搜尋為例做說明,小學生隨意點了雅虎購物
https://tw.buy.yahoo.com/?z=2
我們取? 問號後的參數 z=2 去修改 成 z=3
就可知道 它是以 z = 數字 區分產品的大分類,當然它數量繁多,因此大分類下應該還有中分類,小分類等等的區分吧!
再隨意點個連結進去:
https://tw.buy.yahoo.com/?sub=1&hpp=z3sub1
這裡似乎就是中分類,分類是以 sub= 後面的數字做頁面的改變,所以直接輸入
https://tw.buy.yahoo.com/?sub=整數 應該就可以看到各式各樣的產品,當然若有些產品下架或是已停止出售,就必須做一個預設頁面,顯示給訪客看,至於 hpp=z3sub1 這應該又是產品小分類的代稱之類的
由此可知,因為頁面載入的方式是以 GET 傳遞變數,因此程設師便可以 $_GET['sub'] 去判斷訪客到底目前在那一個頁面,然後再比對資料庫的資料呈現頁面給訪客瀏覽!

jquery + php 方式傳遞資料

下面有個範例可以下載,小學生是合成上面的影片與帳號密碼再加上 jquery 所做的簡單範例,可以下載回去看看,程式中包括了 a.html b.php jquery-1.11.3.min.js 這四個檔案,放在相同資料夾下開啟a.html 瀏覽,執行頁面即可以看到變化,這是一個很簡單基本的傳遞模式,注意!本頁面一開始便有說明 jquery 的缺點,因此執行程式時,瀏覽器的 javascript 功能必須是開啟的狀態(一般瀏覽器多半是預設為開啟,若你懂得如何關閉,應該就懂得如何開啟吧!)
若要改變  get 或 post 方式,請修改 a.html 第 27 行的  type: 'post',//可改 get 或 post
把 post 改成 get 存檔即可囉

引用資料來源:https://scriptmarks.com/html-php-表單傳送與接收資料/

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。