技術討論區 > PHP程式設計討論區

SA.PHP觀念教室 首部曲:了解$_POST,$_GET

頁: (1/4) > >>

Darkhero:

不知道為什麼半夜四點忽然醒來睡不著....就來寫寫文件好了....

SA.PHP觀念教室 首部曲:了解$_POST,$_GET

前言: 各位親愛的SA學員們好,本觀念教室不會教你寫php程式,所以要是你抱著在這就會學到寫程式的,恭喜你來錯地方了.
這個叫做觀念教室.只教程式語言的觀念,不教程式撰寫方法.

預期本堂的學員程度:
1.剛開始學習PHP程式語言的朋友
2.知道 $_POST,$_GET 卻不了解為什麼要這樣用的朋友
3.每次都是要把 global register 打開才會寫php的朋友
4.正在寫php卻完全不知道啥是 $_POST $_GET 的朋友

緣起: 說到 php 的$_POST跟$_GET這兩個變數,得從PHP4.1開始帶來的變化說起.

想當初php開始發展的時候,開發人員為了方便操作各種變數與網頁傳進來的值,所以就採用了將所有的不管是client傳進來的變數值,跟Server 端自動產生的變數值,都自動以 $變數名稱 存在於整個php程式中.
所以當你在當時(php4.1 以前,也就是 php3 ~ php4.0 的時代),會很習慣使用各種 $變數名稱,或是從使用者送出的表單之中的輸入欄位名稱為變數 $欄位名稱.

問題:但是這種情況,在php發展到了一定的規模後,遇到了一個問題.

這個問題主要在於安全上的隱憂!
客戶瀏覽器傳入的值,與系統自動產生的變數,或是系統內部變數,甚至是程式當中的原有變數產生衝突怎麼辦??...
要是程式當中有個 $subtotal 是存放購物金額的. 但是傳入的表單欄位中不知道為什麼不小心多打了個 subtotal 呢?... 程式會以哪個為準?...
要是cookie之中的變數名稱與我要用的程式變數名稱重複了?.....

$_POST與$_GET等變數陣列誕生: 如此多的問題困擾著開發php程式的開發人員,也讓php產生了很多安全上的隱憂, 所以php開發團隊當初建議使用者,使用像是 $HTTP_SERVER_VARS ,$HTTP_GET_VARS ,$HTTP_POST_VARS ,$HTTP_COOKIE_VARS 等陣列來取得該變數..

但是聰明的你跟懶惰的我,絕對發現了.這樣寫起來.每個變數名稱又臭又長,誰會想這樣寫程式阿  :(

所以,在 php4.1 以後 變產生了 $_POST $_GET $_SERVER $_COOKIE $_SESSION 等 陣列,其功用就如同上面所列的.是將使用者經由表單送出的資料以陣列的方式進行一個存放,而非直接註冊在 $欄位名稱 這樣的變數裡面.

接著 PHP 開發團隊更進一步的預設了 php.ini 中 global register 的設定
值為關閉的狀態.

這樣.親愛的學員朋友們,你清楚為什麼要使用$_POST 與 $_GET 來取得使用者傳入的表單了嗎?
希望這一篇文章能幫助您將來撰寫php程式的時候更順利唷.

HTML補充教室: 使用者傳入的表單為什麼要放入 $_POST 跟 $_GET 兩個不同的陣列阿?

由於 html 表單傳遞資料的時候分為兩種方法
1 GET 將資料於 url 中一併送出. 會於網址列顯示像是 http://url/xxx.php?欄位名稱=欄位值
2 POST 將資料於http request 時,於表頭中直接送出,所以該資料並不會以 http://url/xxx.php?欄位名稱=欄位值 的方式出現在瀏覽器的網址列

而表單設定的方式則是如下.

--- 代碼: ---<form method="get">
--- 程式碼結尾 ---


--- 代碼: ---<form method="post">
--- 程式碼結尾 ---


而什麼時候會用到 get ? 什麼時候又要用 post 呢?...

通常使用 post 都是在只能送出一次的資料,像是留言版的留言.會員的登入資料,或是註冊表等.

而 get 的使用通常是在可以重複,且是用來判斷目前所在位置的情況,像製作換頁功能的時候,用來帶入該頁數,或是像 phpbb2 利用 get 取得目前使用的功能與目前觀看的版面編號等. :D

Darkhero:

第一次寫這樣的教學文章.還請各位學長們多多指教阿..^_^..
若有文筆不順暢的地方還請各位多多指教.

ricky:

鼓掌鼓掌  :D
我也覺得這邊的型態可以弄成一個工具快速索引的地方
而不是淪落成一個只是在教導大家如何用for畫出一棵聖誕樹
之前花了好幾個禮拜在研究nusoap以及他那完全看不懂得官方使用文件
最後還是自己慢慢try看sample才大致了解怎麼使用
如果把他建成一個工具索引
讓以後如果有人也需要這方面的資源時就可以快速的上手
不用再去翻那外星人文件
不知意下如何呢

文九智:

完全贊成!! :D
書上寫的大部分都是順利情況下的狀態,可每個人因軟硬體的些微差異,或資質、先學後學的不同,總是會有一些疑難雜症產生,這也就是為何本站如此蓬勃,生生不息的原因之一啊!
若能在學習告一階段後,針對某一部份自己,甚至留言上大部分的的問題,整理出類似錯誤學習報告的東西,相信對於往後遭到類似問題的同好,能減少許多不必要的發問。
日後若集結成冊,搞不好可以一起初書哩! :lol:

Darkhero:

感謝各位的回應.^_^..

小弟正在思考下一個要寫什麼...
目前是計畫延伸$_POST ,$_GET... 講解關於 $_FILES 陣列 ,也就是檔案上傳的概念.以及需要注意的像是 is_uploaded_files .
當然其中也會說到 form 的額外設定...

頁: (1/4) > >>

前往完整版本