欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

thinkphp3.x中變量的獲取和過濾方法詳解

 更新時間:2016年05月20日 09:40:05   作者:yanhui_wei  
這篇文章主要介紹了thinkphp3.x中變量的獲取和過濾方法,結合實例分析了thinkPHP針對各種常見變量如get、post、cookie、session、URL等的獲取及過濾等技巧,需要的朋友可以參考下

本文實例講述了thinkphp3.x中變量的獲取和過濾方法。分享給大家供大家參考,具體如下:

這里我們來學習如何在ThinkPHP中使用變量和對變量進行過濾。

在Web開發(fā)過程中,我們經常需要獲取系統(tǒng)變量或者用戶提交的數據,這些變量數據錯綜復雜,而且一不小心就容易引起安全隱患,但是如果利用好ThinkPHP提供的變量獲取功能,就可以輕松的獲取和駕馭變量了。

一、獲取變量

1.首先,我們來談下如何獲取變量。

第一種方式:傳統(tǒng)獲取方式,你仍然可以在開發(fā)過程中使用傳統(tǒng)方式獲取各種系統(tǒng)變量,例如:

$id = $_GET['id'];//獲取get變量
$name = $_POST['name'];//獲取post變量
$value = $_SESSION['var'];//獲取session變量
$name = $_COOKIE['name'];//獲取cookie變量
$file = $_SERVER['PHP_SELF'];//獲取server變量

不建議直接使用傳統(tǒng)方式獲取,因為沒有統(tǒng)一的安全處理機制,后期如果調整的話,改起來會比較麻煩。

第二種方式:使用Action類提供的動態(tài)方法

系統(tǒng)的Action類提供了對系統(tǒng)變量的增強獲取方法,包括對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 獲取$_SESSION參數
_cookie 獲取$_COOKIE參數
_server 獲取$_SERVER參數
_globals 獲取$GLOBALS參數

變量名:(必須)是要獲取的系統(tǒng)變量的名稱

過濾方法:(可選)可以用任何的內置函數或者自定義函數名,如果沒有指定的話,采用默認的htmlspecialchars函數進行安全過濾(由DEFAULT_FILTER 參數配置),參數就是前面方法名獲取到的值,

也就是說如果調用:

$this->_get("name");

最終調用的結果就是 htmlspecialchars($_GET["name"]),如果要改變過濾方法,可以使用:

$this->_get("name","strip_tags");

默認值:(可選)是要獲取的參數變量不存在的情況下設置的默認值,例如:

$this->_get("id","strip_tags",0);

如果$_GET["id"] 不存在的話,會返回0。

如果沒有設置任何默認值的話,系統(tǒng)默認返回NULL。

其他方法的用法類似。

看起來好像差別不大,但是有一個明顯的優(yōu)勢,就是如果我需要增加或者改變對這些變量做統(tǒng)一的過濾,一般不需要修改變量獲取的代碼,只是在項目配置文件中增加一個配置參數即可,例如:

'DEFAULT_FILTER'=>'strip_tags'

對所有的采用動態(tài)方式獲取的變量使用strip_tags方法進行統(tǒng)一過濾,也可以支持多個過濾方法,例如:

'DEFAULT_FILTER'=>'strip_tags,htmlspecialchars'

表示先進行strip_tags過濾,然后再進行htmlspecialchars過濾。

如果你在獲取某個變量的時候 需要自定義過濾方法,則可以改成:

$name = $this->_post('content','trim,strip_tags');
// 獲取post變量并過濾

如果你在項目配置中設置了統(tǒng)一的變量過濾方法,但是希望對某些變量不進行過濾,則可以用:

$name = $this->_post('id','',0);

如果你的參數可能會來自于多個提交方式,那么可以使用_param方法來更方便的獲取,例如:

$this->_param('id');

當前為get方式提交的時候,就等效于

$this->_get('id');

當前為post方式提交的時候,就等效于

$this->_post('id');

如果為put方式提交的話,就等效于

$this->_put('id');

其優(yōu)點自然很明顯,同一個方法可以接受不同提交類型的變量,不用手動做太多的判斷再來獲取不同的參數了。

二、獲取URL參數

在某些情況下面,我們還有一種獲取URL參數的特殊需求,一般來說,獲取URL參數是采用get變量的方式就夠用了,但是對于我們定制過的URL,或者采用了路由的情況下面,URL的參數可能會沒有規(guī)律,這個時候,我們可以采用另外一種方式來獲取。

例如,當前的URL地址是:

http://localhost/index.php/news/hello_world/thinkphp

我們要獲取其中的參數,可以用:

$this->_param(0); // 獲取news
$this->_param(1); // 獲取hello_world
$this->_param(2); // 獲取thinkphp

不過_param(數字) 方式的變量獲取,僅對PATHINFO模式URL地址有效

三、變量過濾

前面我們已經了解了如何使用Action類提供的方法來進行變量獲取和過濾了,但是在沒有調用這些動態(tài)方法的前提下,我們怎么來進行數據過濾呢?

ThinkPHP還提供了兩種方式來進行數據過濾操作:

第一:配置全局的變量過濾

這種情況是針對一些會在多使用的情況,可以通過配置全局過濾 簡化操作,例如在項目配置文件中添加參數:

'VAR_FILTERS'=>'strip_tags'

則會對全局的get和post變量進行過濾,其他類型的系統(tǒng)變量需要自行過濾。

第二:在寫入數據庫之前進行變量過濾

如果你的變量數據是要寫入到數據庫的話,可以在數據寫入數據庫之前調用filter方法對數據進行安全過濾,例如:

$this->data($data)->filter('strip_tags')->add();

在執(zhí)行add方法之前,會對$data數據進行strip_tags過濾處理。但是,這種方式下面,filter方法不支持多個過濾方法。

四、總結

使用ThinkPHP,我們可以輕松地對系統(tǒng)變量的獲取和過濾,你的開發(fā)功力明顯提升了不少。加油,后面還會講解如何使用路由。

PS:這里推薦幾款本站的格式化美化工具,相信大家在以后的開發(fā)中能夠用得上:

php代碼在線格式化美化工具:
http://tools.jb51.net/code/phpformat

JavaScript代碼美化/壓縮/格式化/加密工具:
http://tools.jb51.net/code/jscompress

在線XML格式化/壓縮工具:
http://tools.jb51.net/code/xmlformat

JSON代碼格式化美化工具:
http://tools.jb51.net/code/json

在線XML/JSON互相轉換工具:
http://tools.jb51.net/code/xmljson

json代碼在線格式化/美化/壓縮/編輯/轉換工具:
http://tools.jb51.net/code/jsoncodeformat

sql代碼在線格式化美化工具:
http://tools.jb51.net/code/sqlcodeformat

更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《ThinkPHP常用方法總結》、《PHP中cookie用法總結》、《smarty模板入門基礎教程》及《PHP模板技術總結》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。

相關文章

  • ThinkPHP部署Workerman的成功使用示例

    ThinkPHP部署Workerman的成功使用示例

    本文介紹thinkphp中關于composer集成workerman的方法,并解決了安裝過程 中遇到的錯誤,實現了和woerkman進行握手和通信的demo。用戶可以在此基礎上按自己的邏輯實現一個聊天系統(tǒng)或者客服系統(tǒng)。
    2023-06-06
  • 通過php快速統(tǒng)計某個數據庫中每張表的數據量

    通過php快速統(tǒng)計某個數據庫中每張表的數據量

    在優(yōu)化數據庫的,或者在導入數據的時候,知道某個數據庫中哪張數據表的數據量最多,有時候對我們還是有幫助的
    2012-09-09
  • php實現微信發(fā)紅包功能

    php實現微信發(fā)紅包功能

    這篇文章主要為大家詳細介紹了php實現微信發(fā)紅包功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 記錄Yii2框架開發(fā)微信公眾號遇到的問題及解決方法

    記錄Yii2框架開發(fā)微信公眾號遇到的問題及解決方法

    微信公眾號開發(fā),提示“該公眾號暫時無法提供服務,請稍后再試”,如何解決?下面小編給大家?guī)砹私鉀Q方法,一起看看吧
    2018-07-07
  • Zend Framework教程之響應對象的封裝Zend_Controller_Response實例詳解

    Zend Framework教程之響應對象的封裝Zend_Controller_Response實例詳解

    這篇文章主要介紹了Zend Framework教程之響應對象的封裝Zend_Controller_Response用法,結合實例形式詳細分析了響應對象的邏輯原理與相關使用技巧,需要的朋友可以參考下
    2016-03-03
  • Yii rules常用規(guī)則示例

    Yii rules常用規(guī)則示例

    這篇文章主要介紹了Yii rules常用規(guī)則,結合實例形式分析了rules規(guī)則的功能,定義及具體使用方法,需要的朋友可以參考下
    2016-03-03
  • PHP 并發(fā)場景的幾種解決方案

    PHP 并發(fā)場景的幾種解決方案

    這篇文章主要介紹了PHP 并發(fā)場景的幾種解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • php微信公眾號js-sdk開發(fā)應用

    php微信公眾號js-sdk開發(fā)應用

    這篇文章主要為大家詳細介紹了php微信公眾號js-sdk開發(fā)應用的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 一個php導出oracle庫的php代碼

    一個php導出oracle庫的php代碼

    紅色字為變量,我也是邊查手冊邊寫的,以前沒有接觸過,這段小代碼用了一個多小時,記錄一下
    2009-04-04
  • 通過PHP實現用戶注冊后郵箱驗證激活

    通過PHP實現用戶注冊后郵箱驗證激活

    這篇文章主要介紹了通過PHP實現用戶注冊后郵箱驗證激活,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11

最新評論