Ⅰ thinkphp的i方法的post和post.這個帶不帶點,有什麼不同啊
傳統方式獲取變數
$id = $_GET['id']; // 獲取get變數
$name = $_POST['name']; // 獲取post變數
$value = $_SESSION['var']; // 獲取session變數
$name = $_COOKIE['name']; // 獲取cookie變數
$file = $_SERVER['PHP_SELF']; // 獲取server變數
Get示例:
http://localhost/news/archive/2012/01/15
$year = $_GET["_URL_"][2];
I方法
I (『變數類型.變數名/修飾符』,[『默認值』],[『過濾方法』],[『額外數據源』])
get 獲取GET參數
post 獲取POST參數
param 自動判斷請求類型獲取GET、POST或者PUT參數
request 獲取REQUEST 參數
put 獲取PUT 參數
session 獲取 $_SESSION 參數
cookie 獲取 $_COOKIE 參數
server 獲取 $_SERVER 參數
globals 獲取 $GLOBALS參數
path 獲取 PATHINFO模式的URL參數(3.2.2新增)
data 獲取 其他類型的參數,需要配合額外數據源參數(3.2.2新增)
使用示例:
echo I('post.id'); // 相當於 $_POST['id']
echo I('get.name'); // 相當於 $_GET['name']
echo I('param.id'); // get或post,param.可以省略
echo I('path.1'); // 獲取重寫的url變數
I('get.id/d'); // 強制轉換成整數,有以下幾種可選擇:
參數 含義
s 強制轉換為字元串類型
d 強制轉換為整形類型
b 強制轉換為布爾類型
a 強制轉換為數組類型
f 強制轉換為浮點類型
I('data.file1','','',$_FILES); //讀取文件
I('get.'); // 獲取整個$_GET 數組
I('post.name','','htmlspecialchars'); // 採用htmlspecialchars方法對$_POST['name'] 進行過濾,如果不存在則返回空字元串。這是默認過濾,可以省略
I('session.user_id',0); // 獲取$_SESSION['user_id'] 如果不存在則默認為0
I('cookie.'); // 獲取整個 $_COOKIE 數組
I('server.REQUEST_METHOD'); // 獲取 $_SERVER['REQUEST_METHOD']
Ⅱ ThinkPHP中I(),U(),$this->post()等函數用法
本文實例講述了ThinkPHP中I(),U(),$this->post()等函數的用法。分享給大家供大家參考。具體方法如下:
在ThinkPHP中在控制器中接受表單的數據可以使用如下方法:
1、$_POST[]/$_GET[],但是這個接受的表單內容不會通過htmlspecialchars();函數進行過濾。如果想使用這個接收數據,需要手動處理表單數據
2、可以用接收表單函數復制代碼
代碼如下:$this->_post();$this->_get();,這個函數默認就會使用htmlspecialchars()進行過濾,不用手動過濾。
3、在thinkphp3.1.3中有一個新的函數I();直接接收表單數據,並默認為htmlspecailchars();過濾這個函數有這些欄位
I('需要接收的表單名','如果數據為空默認值','使用的函數處理表單數據');
U();函數是輸出地址
U('操作名','array()參數','偽靜態後綴名',是否跳轉,域名)
希望本文所述對大家的ThinkPHP框架程序設計有所幫助。
Ⅲ thinkphp3.1有沒有i方法
有
ThinkPHP函數詳解:I方法
I('變數類型.變數名',['默認值'],['過濾方法'])
變數類型是指請求方式或者輸入類型,包括:
變數類型 含義
get 獲取GET參數
post 獲取POST參數
param 自動判斷請求類型獲取GET、POST或者PUT參數
request 獲取REQUEST 參數
put 獲取PUT 參數
session 獲取 $_SESSION 參數
cookie 獲取 $_COOKIE 參數
server 獲取 $_SERVER 參數
globals 獲取 $GLOBALS參數
注意:變數類型不區分大小寫。
變數名則嚴格區分大小寫。
默認值和過濾方法均屬於可選參數。
用法
我們以GET變數類型為例,說明下I方法的使用:
echo I('get.id'); // 相當於 $_GET['id']
echo I('get.name'); // 相當於 $_GET['name']
支持默認值:
echo I('get.id',0); // 如果不存在$_GET['id'] 則返回0
echo I('get.name',''); // 如果不存在$_GET['name'] 則返回空字元串
採用方法過濾:
echo I('get.name','','htmlspecialchars'); // 採用htmlspecialchars方法對$_GET['name'] 進行過濾,如果不存在則返回空字元串
支持直接獲取整個變數類型,例如:
I('get.'); // 獲取整個$_GET 數組
用同樣的方式,我們可以獲取post或者其他輸入類型的變數,例如:
I('post.name','','htmlspecialchars'); // 採用htmlspecialchars方法對$_POST['name'] 進行過濾,如果不存在則返回空字元串
I('session.user_id',0); // 獲取$_SESSION['user_id'] 如果不存在則默認為0
I('cookie.'); // 獲取整個 $_COOKIE 數組
I('server.REQUEST_METHOD'); // 獲取 $_SERVER['REQUEST_METHOD']
param變數類型是框架特有的支持自動判斷當前請求類型的變數獲取方式,例如:
echo I('param.id');
如果當前請求類型是GET,那麼等效於 $_GET['id'],如果當前請求類型是POST或者PUT,那麼相當於獲取 $_POST['id'] 或者 PUT參數id。
並且param類型變數還可以用數字索引的方式獲取URL參數(必須是PATHINFO模式參數有效,無論是GET還是POST方式都有效),例如:
當前訪問URL地址是
http://serverName/index.php/New/2016/06/01
那麼我們可以通過
echo I('param.1'); // 輸出2016
echo I('param.2'); // 輸出06
echo I('param.3'); // 輸出01
事實上,param變數類型的寫法可以簡化為:
I('id'); // 等同於 I('param.id')
I('name'); // 等同於 I('param.name')
變數過濾
使用I方法的時候 變數其實經過了兩道過濾,首先是全局的過濾,全局過濾是通過配置VAR_FILTERS參數,這里一定要注意,3.1版本之後,VAR_FILTERS參數的過濾機制已經更改為採用array_walk_recursive方法遞歸過濾了,主要對過濾方法的要求是必須引用返回,所以這里設置htmlspecialchars是無效的,你可以自定義一個方法,例如:
function filter_default(&$value){
$value = htmlspecialchars($value);
}
然後配置:
'VAR_FILTERS'=>'filter_default'
如果需要進行多次過濾,可以用:
'VAR_FILTERS'=>'filter_default,filter_exp'
filter_exp方法是框架內置的安全過濾方法,用於防止利用模型的EXP功能進行注入攻擊。
因為VAR_FILTERS參數設置的是全局過濾機制,而且採用的是遞歸過濾,對效率有所影響,所以,我們更建議直接對獲取變數過濾的方式,除了在I方法的第三個參數設置過濾方法外,還可以採用配置DEFAULT_FILTER參數的方式設置過濾,事實上,該參數的默認設置是:
'DEFAULT_FILTER' => 'htmlspecialchars'
也就說,I方法的所有獲取變數都會進行htmlspecialchars過濾,那麼:
I('get.name'); // 等同於 htmlspecialchars($_GET['name'])
同樣,該參數也可以支持多個過濾,例如:
'DEFAULT_FILTER' => 'strip_tags,htmlspecialchars'
I('get.name'); // 等同於 htmlspecialchars(strip_tags($_GET['name']))
如果我們在使用I方法的時候 指定了過濾方法,那麼就會忽略DEFAULT_FILTER的設置,例如:
echo I('get.name','','strip_tags'); // 等同於 strip_tags($_GET['name'])
I方法的第三個參數如果傳入函數名,則表示調用該函數對變數進行過濾並返回(在變數是數組的情況下自動使用array_map進行過濾處理),否則會調用PHP內置的filter_var方法進行過濾處理,例如:
I('post.email','',FILTER_VALIDATE_EMAIL);
表示 會對$_POST['email'] 進行 格式驗證,如果不符合要求的話,返回空字元串。
(關於更多的驗證格式,可以參考 官方手冊的filter_var用法。)
或者可以用下面的字元標識方式:
I('post.email','','email');
可以支持的過濾名稱必須是filter_list方法中的有效值(不同的伺服器環境可能有所不同),可能支持的包括:
int
boolean
float
validate_regexp
validate_url
validate_email
validate_ip
string
stripped
encoded
special_chars
unsafe_raw
email
url
number_int
number_float
magic_quotes
callback
在有些特殊的情況下,我們不希望進行任何過濾,即使DEFAULT_FILTER已經有所設置,可以使用:
I('get.name','',NULL);
一旦過濾參數設置為NULL,即表示不再進行任何的過濾。
Ⅳ thinkphp I函數 怎麼過濾提交的富文本編輯HTML
你的辦法完全可行,底層裡面實際上就是把過濾函數作為一個函數而執行的,參數就是你的數據,所以你自建的函數完全可以運行,但是要放到公共函數庫中。例如:放到Application/Common/Common/function.php中
Ⅳ thinkPHP3.2中intval過濾超過9位的數字問題
字元串函數回:md5,strip_tags...等答 filter_list: int boolean float validate_regexp validate_url validate_email validate_ip string stripped encoded special_chars unsafe_raw email url number_int number_float magic_quotes callback
Ⅵ 一個簡單的問題,thinkphp怎麼用其他類的方法。
ThinkPHP的I方法是眾多單字母函數中的新成員,其命名來自於英文Input(輸入),主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下:
I('變數類型.變數名',['默認值'],['過濾方法'])
變數類型是指請求方式或者輸入類型。
各個變數類型的含義如下:
注意:變數類型不區分大小寫。
變數名則嚴格區分大小寫。
默認值和過濾方法均屬於可選參數。
Ⅶ 大家知道thinkphp用什麼錟I嗎
I方法是ThinkPHP眾多單字母函數中的新成員,其命名來自於英文Input(輸入),主要用於更加方便和安全的獲取系統輸入變數
echo I('get.id'); // 相當於 $_GET['id']
I('post.name','','htmlspecialchars'); // 採用htmlspecialchars方法對$_POST['name'] 進行過濾,如果不存在則返回空字元串
Ⅷ thinkphp里I方法過濾方法都有什麼有看到過intval和htmlspecialchars,手冊沒見過,想知道所有過濾方法
你好,我所知道的:
1 strip_tags:從字元串中去除 HTML 和 PHP 標記
2 mysql_escape_string:轉義一個字元串用於 mysql_query
這些函數在防注入方內面起到很大容的作用.
Ⅸ thinkphp怎麼做才是安全的sql防注入
注入的產生一般都是對用戶輸入的參數未做任何處理直接對條件和語句進行拼裝.
代碼舉例:
//不安全的寫法舉例1
$_GET['id']=8;//希望得到的是正整數
$data=M('Member')->where('id='.$_GET['id'])->find();
$_GET['id']='8 or status=1';//隱患:構造畸形查詢條件進行注入;
//安全的替換寫法
$data=M('Member')->where(array('id'=>$_GET['id']))->find();//使用數組方式將自動使用框架自帶的欄位類型檢測防止注入
$data=M('Member')->where(array('id'=>(int)$_GET['id']))->find();//類型約束
$data=M('Member')->where('id='.intval($_GET['id']))->find();//類型轉換
$data=M('Member')->where(array('id'=>I('get.id','','intval')))->find();//本人習慣寫法
$data=M('Member')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();//PDO驅動可以使用參數綁定
$data=M('Member')->where("id=%d",array($_GET['id']))->find();//預處理機制
//不安全的寫法舉例2
$_GET['id']=8;//希望得到的是正整數
$data=M()->query('SELECT * FROM `member` WHERE id='.$_GET['id']);//執行的SQL語句
$_GET['id']='8 UNION SELECT * FROM `member`';;//隱患:構造畸形語句進行注入;
2.防止注入的總的原則是<<根據具體業務邏輯,對來源於用戶的值的范圍,類型和正負等進行限制和判斷>>,同時<<盡量使用THINKPHP自帶的SQL函數和寫法>>.
3.在THINKPHP3.2版本中的操作步驟是:
一:在項目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默認過濾函數
二: 使用框架帶的I方法獲取來自用戶提交的數據;
例子:M('Member')->save(array('content'=>I('post.content')));這樣添加的content內容是經過htmlspecialchars處理過的.
4.為COOKIE添加httponly配置
5.最新版本的thinkphp已經支持此參數。
9.富文本過濾
富文本過濾是,XSS攻擊最令人頭疼的話題,不僅是小網站,就連BAT這樣的巨頭也是三天兩頭的被其困擾.
Ⅹ thinkphp中這句話是什麼意思I ( 'cTime', 0, 'intval' )
I是TP自己封裝的一個參數接收過濾的方法,具體使用看源碼就能明白
你發的意思是接收 cTime 參數, 參數過濾方法是intval, 如果不符合cTime值將變為0
希望可以幫到你