本篇我們來學習如何在ThinkPHP中使用變數和對變數進行過濾。
在WebHTTP://www.aliyun.com/zixun/aggregation/17799.html">開發過程中,我們經常需要獲取系統變數或者使用者提交的資料,這些變數資料錯綜複雜, 而且一不小心就容易引起安全隱患,但是如果利用好ThinkPHP提供的變數獲取功能,就可以輕鬆的獲取和駕馭變數了。
獲取變數
首先,我們來談下如何獲取變數。
第一種方式:傳統獲取方式
你仍然可以在開發過程中使用傳統方式獲取各種系統變數,例如:
$id = $_GET['id']; 獲取get變數 $name = $_POST['name']; 獲取post變數 $value = $_SESSION['var']; 獲取session變數 $name = $_COOKIE['name']; 獲取cookie變數 $file = $_SERVER['PHP_SELF']; 獲取server變數
不建議直接使用傳統方式獲取,因為沒有統一的安全處理機制,後期如果調整的話,改起來會比較麻煩。
第二種方式:使用Action類提供的動態方法
系統的Action類提供了對系統變數的增強獲取方法,包括對GET、POST、PUT、REQUEST、SESSION、COOKIE、SERVER和GLOBALS參數,除了獲取變數值外,還提供變數過濾和預設值支援,用法很簡單 ,只需要在Action中調用下面方法:
$id = $this->_get('id'); 獲取get變數 $name = $this->_post('name'); 獲取post變數 $value = $this->_session('var'); 獲取session變數 $name = $this->_cookie('name'); 獲取cookie變數 $file = $this->_server('PHP_SELF'); 獲取server變數
調用格式為:
$this->方法名("變數名",["過濾方法"],["預設值"])
方法名可以支援:
方法名 含義 _get 獲取GET參數 _post 獲取POST參數 _param 自動判斷請求類型獲取GET、POST或者PUT參數 _request 獲取REQUEST參數 _put 獲取PUT參數 _session 獲取$_S ESSION參數 _cookie 獲取$_COOKIE參數 _server 獲取$_SERVER參數 _globals 獲取$GLOBALS參數
變數名:(必須)是要獲取的系統變數的名稱
過濾方法:(可選)可以用任何的內建函數或者自訂函數名,如果沒有指定的話,採用預設的htmlspecialchars函數進行安全過濾(由DEFAULT_FILTER 參數配置),參數就是前面方法名獲取到的值, 也就是說如果調用:
$this->_get("name");
最終調用的結果就是 htmlspecialchars($_GET["name"]),如果要改變過濾方法,可以使用:
$this->_get("name","strip_tags");
預設值:(可選)是要獲取的參數變數不存在的情況下設置的預設值,例如:
$this->_get("id","strip_tags",0);
如果$_GET["id"] 不存在的話,會返回0。
如果沒有設置任何預設值的話,系統預設返回Null。