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 取得目前使用的功能與目前觀看的版面編號等.
|