phpcms 二次开发数据过滤的技巧
参数过滤
1,针对不能直接使用pdo进行参数绑定,可以使用sprintf模拟,并使用new_addslashes来过滤,然后使用query执行拼接的sql
%% - 返回百分比符号
%b - 二进制数
%c - 依照 ASCII 值的字符
%d - 带符号十进制数
%e - 可续计数法(比如 1.5e+3)
%u - 无符号十进制数
%f - 浮点数(local settings aware)
%F - 浮点数(not local settings aware)
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
addslashes() 函数在指定的预定义字符前添加反斜杠。
这些预定义字符是:
单引号 (')
双引号 (")
反斜杠 (\)
NULL
$str=array('table'=>'user','username'=>'yak','salary'=>'3000 or 1=1');
$arr=new_addslashes($str) //过滤字符
extract($arr); //输出数组变量
$sql=sprintf("update %s set salary=salary+1000 where username=%s and salary = %d",$table,$username,$salary);
使用sprintf函数模拟pdo的参数绑定。
sql语句执行
为了方便的执行sql,最好使用quer方法,并在执行后使用showmessage进行提示和跳转,最后绑定模板
public function execsql(){
$this->member_detail=ec_main::get_m('member_detail_model');
$this->member_detail->query("update ec_member_detail set me_noteic=concat(me_noteic,',','".$u."') where userid=".$memberinfo['userid']);
showmessage(L('deny_register'), HTTP_REFERER);//提示之后返回当前页
include template('member', 'me_notice');
}
输出json
前端页面使用js进行控制的话必须使用json数据,这时可以使用如下方法进行输出
public function xxx(){
$this->content_db=ec_main::get_m('content_check_model');
$datas = $this->content_db->query("select id ,catid,title from ec_techan limit 8");
$note;$i=0; //初始化变量
while($infor=mysql_fetch_assoc($datas))
{
$note["id"]=$infor['id'];
$note["catid"]=$infor['catid'];
$note["title"]=$infor['title']; //把结果放到一个一维数组里
$notes[$i++]=$note;//放到二维数组里
//$notes[$i++]=array_values($note);//如果想转换成[[],[]]格式,使用这种方法
}
mysql_free_result($datas);
echo "var arrs=".json_encode($notes).";";
echo "var xx=".json_encode($notes).";";
}
前台提交数据的方法
主要涉及安全参数的过滤,检查int ,string 是否可以插入数据库
public function tj(){
if(isset($_POST['dosubmit'])) {
$chang=array("20"=>"1号场","21"=>"2号场","22"=>"3号场");
$Ainfo=$_POST['info'];
$description=safe_replace($Ainfo['beizhu']);
$qiudui=safe_replace($Ainfo['mingcheng']);
if($Ainfo['username']!=""){$username=safe_replace($Ainfo['username']);}else{ $username=safe_replace(param::get_cookie('admin_username')); }
$userid=intval($Ainfo['userid']);
$catid=intval($Ainfo['changdi']);
$lianxiren=safe_replace($Ainfo['lianxiren']);
$day=safe_replace($Ainfo['riqi']);
$daytime=safe_replace($Ainfo['changci']);
$dianhua=safe_replace($Ainfo['dianhua']);
$title=$username.":预约 ".$day."<".$chang[$catid].">,时间:".$daytime;
$ttime=mktime();
$datas = $this->db->query("insert into ec_changdix (catid,typeid,status,title,username,userid,description,inputtime,updatetime) values($catid,0,99,'$title','$username',$userid,'$description','$ttime','$ttime')");
$insertid = mysql_fetch_assoc($this->db->query(" select @@IDENTITY"));
$nid=$insertid["@@IDENTITY"];
$this->db->query("update ec_changdix set url='/?catid=$catid&id=$nid' where id=".$insertid["@@IDENTITY"]);
$this->db->query("insert into ec_changdix_data (id,dianhua,lianxiren,day,daytime,qiudui) values($nid,'$dianhua','$lianxiren','$day','$daytime','$qiudui')");
showmessage(L('success'), HTTP_REFERER);
}
phpcms 二次开发数据过滤的技巧的更多相关文章
- [PC]PHPCMS二次开发指南(上)
------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...
- phpcms二次开发笔记
phpcms二次开发笔记 --soulsjie 以下载的全新的phpcms搭建一个新的站点为例,讲解如何利用phpcms进行二次开发 一.下载和安装phpcms http://www.phpcms.c ...
- PHPCMS二次开发教程(转)
转自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 结构设计 根目录 |–api 结构文件目录 |–caches 缓存文件目录 ...
- PHPCMS二次开发教程
PHPCMS V9 结构设计 根目录|–api 结构文件目录|–caches 缓存文件目录 |– configs 系统配置文件目录 |– caches_* 系统缓存目录|–phpcms p ...
- PHPCMS 使用图示和PHPCMS二次开发教程(转)
PHPCMS V9 核心文件说明 模块与控制器 模块: phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块.即url访问中的m. 访问content模块示 ...
- phpcms二次开发步骤
文件目录结构 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – phpcms phpc ...
- Phpcms·二次开发
PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...
- 邓_ Phpcms·二次开发
PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...
- phpcms二次开发中无法获取SESSION的值
今天在在phpcms开发留言板用到验证码,提交数据,后台无法$_SESSION['code']无法获取验证码值,也无法打印var_dump($_SESSION)值,我们只需要在文件头部添加如下代码: ...
随机推荐
- Atitit 控制中心快速启动面板quick launcher
Atitit 控制中心快速启动面板quick launcher contralPanel.bat aaaControlPanel.contrlx /AtiPlatf_auto/src_atibrow/ ...
- java webservice 总结(学会读别人的webservice并且通过代理模式访问)
公司做的系统之间的交互用到了webservice做交互,现在对webservice做一个总结. 1.配置已有的webservice webservice主要包括 xml/json:作为传输数据的格式 ...
- 直接修改.NET程序集 LLBL Gen 2.x-4.x 许可授权方法研究
做数据库开发,如果要用ORM,LLBL Gen是一款优秀的框架和工具,目前最新版本是4.0.同时也推出了Lite免费版本,与Visual Studio的Express版本一样, 免费,但是它仅仅只支持 ...
- js阻止冒泡及jquery阻止事件冒泡示例介绍
js阻止冒泡 在阻止冒泡的过程中,W3C和IE采用的不同的方法,那么我们必须做以下兼容. 复制代码 代码如下: function stopPro(evt){ var e = evt || window ...
- Oracle IF & CASE语句
IF语句主要有以下三种基本形式: 一. IF-THEN语句 IF CONDITION THEN STATEMENT 1; ... STATE ...
- Prim算法(三)之 Java详解
前面分别通过C和C++实现了普里姆,本文介绍普里姆的Java实现. 目录 1. 普里姆算法介绍 2. 普里姆算法图解 3. 普里姆算法的代码说明 4. 普里姆算法的源码 转载请注明出处:http:// ...
- UML简介
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型 ...
- java Class对象
目录 1Class对象 普通的Class对象 泛化的Class对象 2类型转换前先做检查 instanceof 运算符的陷阱 Class.isInstance() 3反射 动态代理 1.Cla ...
- 【GIT】使用Git命令窗口将本地工程提交至远程GitHub
目标: 1.解决的问题是如何通过Git命令窗口将本地工程提交至GitHub. 2.方便园友的同时也方便自己以后解决此类问题. 步骤: 1.首先登陆GitHub网站https://github.com/ ...
- 也说说TIME_WAIT状态
也说说TIME_WAIT状态 一个朋友问到,自己用go写了一个简单的HTTP服务端程序,为什么压测的时候服务端会出现一段时间的TIME_WAIT超高的情况,导致压测的效果不好呢? 记得老王有两篇文章专 ...