参数过滤

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 二次开发数据过滤的技巧的更多相关文章

  1. [PC]PHPCMS二次开发指南(上)

    ------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...

  2. phpcms二次开发笔记

    phpcms二次开发笔记 --soulsjie 以下载的全新的phpcms搭建一个新的站点为例,讲解如何利用phpcms进行二次开发 一.下载和安装phpcms http://www.phpcms.c ...

  3. PHPCMS二次开发教程(转)

    转自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 结构设计 根目录 |–api  结构文件目录 |–caches 缓存文件目录 ...

  4. PHPCMS二次开发教程

    PHPCMS V9 结构设计 根目录|–api  结构文件目录|–caches 缓存文件目录   |– configs 系统配置文件目录   |– caches_* 系统缓存目录|–phpcms  p ...

  5. PHPCMS 使用图示和PHPCMS二次开发教程(转)

    PHPCMS V9 核心文件说明 模块与控制器 模块: phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块.即url访问中的m. 访问content模块示 ...

  6. phpcms二次开发步骤

    文件目录结构 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – phpcms phpc ...

  7. Phpcms·二次开发

    PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...

  8. 邓_ Phpcms·二次开发

    PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...

  9. phpcms二次开发中无法获取SESSION的值

    今天在在phpcms开发留言板用到验证码,提交数据,后台无法$_SESSION['code']无法获取验证码值,也无法打印var_dump($_SESSION)值,我们只需要在文件头部添加如下代码: ...

随机推荐

  1. 让DB2跑得更快——DB2内部解析与性能优化

    让DB2跑得更快——DB2内部解析与性能优化 (DB2数据库领域的精彩强音,DB2技巧精髓的热心分享,资深数据库专家牛新庄.干毅民.成孜论.唐志刚联袂推荐!)  洪烨著 2013年10月出版 定价:7 ...

  2. Android开发常用属性

    1.android string.xml 文字中间加入空格 android string.xml前后加空格的技巧 <string name="password">密   ...

  3. HttpClient post json,可以是数组

    var json = JsonConvert.SerializeObject(obj); StringContent theContent = new StringContent(json, Enco ...

  4. Java多线程系列--“JUC集合”08之 LinkedBlockingQueue

    概要 本章介绍JUC包中的LinkedBlockingQueue.内容包括:LinkedBlockingQueue介绍LinkedBlockingQueue原理和数据结构LinkedBlockingQ ...

  5. 云计算之路-阿里云上:消灭“黑色n秒”第三招——禁用网卡的TCP/IP Offload

    程咬金有三板斧,我们有三招.在这篇博文中我们要出第三招,同时也意味着昨天在“希望的田野”上的第二招失败了. 前两招打头(CPU)不凑效,这一招要换一个部位,但依然要坚持攻击敌人最弱(最忙最累)部位的原 ...

  6. Android进程间通信之LocalSocket通信

    LocalSocket,在Unix域名空间创建的一个套接字(非服务端). 是对Linux中Socket进行了封装,采用JNI方式调用,实现进程间通信. 具体就是Native层Server和Framew ...

  7. 12个新潮的 HTML5 & CSS3 网站设计欣赏

    响应式设计和基于 HTML5 & CSS3 编码的网站是为网站制作的理想解决方案. HTML5 & CSS3 制作出来的网站结构良好,有很多惊人的效果,并能够在任何设备上浏览. 今天, ...

  8. Android SlidingMenu 仿网易新闻客户端布局

    前面两篇文章中的SlidingMenu都出现在左侧,今天来模仿一下网易新闻客户端左右两边都有SlidingMenu的效果,以下是网易新闻客户端效果: 不扯闲话了,直接进入正题吧 frame_conte ...

  9. Java开发中的高频Collections用法总结与Java平台实现源代码查看方式

    一生二,二生三,三生万物,基础永远是一个计算机人的立身之本,相信看到这篇文章的人一般都知道数据结构这门课程,要不也不会找到我的这篇文章.数据结构这门课程的分析奠定了工程师对各种平台中的容器类,集合类的 ...

  10. svn冲突问题详解

    开发人员都知道代码管理工具是开发中一个必不可少的工具,这里也不废话详细介绍了.不管你个人喜欢git还是svn还是其他,但还有一大部分公司在使用svn做代码管理工具.这里详细介绍下SVN提交文件时冲突问 ...