行为扩展以及防sql注入
ThinkPHP提供的扩展
(1)功能类扩展,例如page.class,UploadFile.class.php
(2)驱动扩展,例如扩展smarty模板引擎
(3)行为扩展 CBD
利用行为扩展实现多语言
(1)在项目的扩展目录中,有多语言的行为,我们需要标识这个行为在哪个时刻执行,利用标签配置文件来完成:
(2)需要在我们的配置目录中增加一个标签配置文件:
在配置文件中,规定哪个时刻执行哪些代码:
<?php
return array(
//时刻点 =>执行动作(代码)
'app_begin'=>array('CheckLang'),
)
?>
什么是多语言呢?
(1)如果做多语言,要根据语言的不同,同一个单词要有不同的词库(翻译字典),比如中国地区使用你好,欧美地区使用hello
(2)这个词典保存在哪里?
在项目的Lang目录下,保存了一些子目录,每个地区的语言对应一个语言翻译文件
En-us文件----common:
<?php
return array(
//原语言=>翻译之后的结果
'welcome'=>'Welcome toChine',
'message'=>'This is a testMessage'
);
?>
Zh-cn文件---common:
<?php
return array(
//原语言=>翻译之后的结果
'welcome'=>'欢迎来到中国',
'message'=>'这是一条测试信息'
);
?>
通过配置项开启多语言检测
/*开启多语言检测功能*/
'LANG_SWITCH_ON' =>true,
'LANG_LIST' =>'zh-cn,en-us',
);
如何在使用翻译结果
1,在控制器中: 使用L()函数获得翻译结果
2,在视图层中:{:L()}
还可以,并且建议使用 {$Think.lang.语言}
{:L('welcome')}<br/>
{$Think.lang.welcome}
通过案例测试
<a href='?l=zh-cn'>中文版</a>
<a href='?l=en-us'>English</a>
1, 在操作中获取语言包内容时,需要使用 L 快捷方法。当点击 English 链接时,由于 URL 中传入了 l=en-us 参数,系统会获取对应的英语语言包
经过查询执行的sql语句,我们发现,导致sql注入的原因是单引号
1,通过php的魔术引号,来将用户输入的数据进行转义
php的低版本,默认是开启的,这样会自动的将用户输入的数据进行转义
2,对用户提交的数据进行转义
调用php的addslashes()函数
$username=addslashes($_POST['username']);
3,利用thinkphp的系统变量获得外部数据$this->_server $
thinkphp系统常量 (4个)
$this->_post('username','addslashes');
4,使用数组作为tp框架中 where条件
$cond['user_name']=$username;
$cond['user_pass']=$password;
$list=$model->where($cond)->find();