Thinkphp中的 I 函数(Thinkphp3.2.3版本)

I函数的作用是获取系统变量,必要时还可以对变量值进行过滤及强制转换
I(‘变量类型.变量名/修饰符’,[‘默认值’],[‘过滤方法或正则’],[‘额外数据源’])

在php中获取变量值得方法很多, G E T [ ′ 变 量 名 ′ ] , _GET['变量名'], GET[]_POST[‘变量名’], S E S S I O N [ ′ 变 量 名 ′ ] , _SESSION['变量名'], SESSION[]_COOKIE[‘变量名’],$_SERVER[‘变量名’] 都可以获取相应的变量值,但在thinkphp中为了安全的原因建议统一使用 I 函数来获取变量值。
例如:获取 URL 地址栏中参数 id 的值,在php中我们用 $_GET[‘id’] 来获取,在thinkphp中我们可以用 I(‘get.id’) 来获取。同样的, $_POST[‘id’] 就用 I(‘post.id’) 取代,I 函数的语法格式中的变量类型就是指的像 get 和 post 之类的请求方式,类似的变量类型还包括:

在这里插入图片描述
如果要获取的变量类型是get、post 或 put,可以统一用 param 变量类型,param 变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:I(‘param.id’) ,如果当前请求类型是GET,那么等效于 $_GET[‘id’],如果当前请求类型是POST或者PUT,那么相当于获取 $_POST[‘id’] 或者 PUT参数id。而事实上当 I 函数获取的变量类型是param时变量类型可以省略直接写为:I(‘变量名’) ,那么 G E T [ ′ i d ′ ] 、 _GET['id']、 GET[id]_POST[‘id’] 都可以简写为:I(‘id’) 。但当变量类型为其他类型时就不能这么简写,比如 I(‘cookie.id’)、I(‘session.id’)就不能简写。

I 函数的变量类型不区分大小写,但变量名严格区分大小写,比如 I(‘get.id’) 可以写成 I(‘GET.id’),但不能写成 I(‘get.ID’)

二、变量过滤
I函数本身默认过滤机制是htmlspecialchars,因为在配置文件中配置了:
// 系统默认的变量过滤机制
‘DEFAULT_FILTER’ => ‘htmlspecialchars’
所以 I(‘post.变量名’) 就等同于 htmlspecialchars($_POST(‘变量名’)),如果 I 函数自身带了过滤方法,则用自身带的过滤机制过滤变量,比如:

I(‘post.email’,‘请输入正确的email地址’,FILTER_VALIDATE_EMAIL);
在这里插入图片描述

三、变量修饰符
在这里插入图片描述
在这里插入图片描述
$page = I(‘param.page’,1);
$limit = I(‘param.limit’,15);
还有一种方式
p a g e = I ( ′ p a g e ′ , 1 ) − 1 ; − > l i m i t ( page=I('page',1)-1; ->limit( page=I(page,1)1;>limit(pageSize * $page , p a g e S i z e ) 如 果 前 台 要 限 制 30 , 50 条 之 类 的 , 那 么 就 要 传 一 个 l i m i t 了 , 那 么 就 要 − > l i m i t ( pageSize) 如果前台要限制30 ,50条之类的,那么就要传一个limit了,那么就要 ->limit( pageSize)3050limit>limit(this->pageSize * $page , $limit)
如果是默认值得话,就这么写
//订单号
$orderId = I(‘param.order_id’, ‘’);
//问题类别 问题类别:1识别错误,2数量错误,3其他
$question_type = I(‘param.question_type’, 0);
传入时间的两种写法
第一种

	        if (!empty($start_time)){
        $end_time=$end_time."23:59:59";
        $whereStr.=" a.add_time > '{$start_time}' and a.add_time < '{$end_time}' and";
    }
	
	第二种
	
	      if(!empty(I('start_date')) || !empty(I('end_date'))){
      $end_time = I('end_date') . " 23:59:59";
      $orderCondtion['add_time'] = array(array('EGT', I('start_date') . ' 00:00:00'), array('ELT', $end_time));
  }

如果是字符串拼接的话,会涉及到一个and问题
那么就要过滤一下了
w h e r e S t r = r t r i m ( whereStr=rtrim( whereStr=rtrim(whereStr, ’ and’);
忘了 一点,在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值