参数过滤

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. JS 脚本最后加载

    有些脚本执行,为了不影响页面其他脚本执行,需要放在最后 <script type="text/javascript"> function addLoadEvent(fu ...

  2. QQ表情动图,增加写博客的乐趣

    QQ表情动图,增加写博客的乐趣 body{margin:0px;}

  3. 构造persen

    package java1; //人类 public class Person { //属性 成员变量 String name; int age=30; //方法 函数 成员函数 void hello ...

  4. VS报错:The build tools for v140 (Platform Toolset = 'v140') cannot be found

    VS低版本打开高版本常会出现的错: The build tools for v140 (Platform Toolset = 'v140') cannot be found. To build usi ...

  5. ASP.NET MVC TagBuilder使用

    ASP.NET MVC在需要进行新建HTML辅助方法时,可以来使用TagBuilder类. TagBuilder类常用方法: 方法名称 说明 AddCssClass() 可在卷标中添加一个新的Clas ...

  6. JSP网站开发基础总结《二》

    有了上一篇的学习,我相信大家对于JSP一定有了一定的认识,从今天开始我们真正开启JSP模式,如果你有HTML的基础,那学起JSP来也就方便了很多了,首先JSP做为网站开发语言,它与HTML有很多相似的 ...

  7. Linux命令之diff

    1.命令格式: diff[参数][文件1或目录1][文件2或目录2] 2.命令功能: diff命令能比较单个文件或者目录内容.如果指定比较的是文件,则只有当输入为文本文件时才有效.以逐行的方式,比较文 ...

  8. spring bean生命周期管理--转

    Life Cycle Management of a Spring Bean 原文地址:http://javabeat.net/life-cycle-management-of-a-spring-be ...

  9. 自制jQuery焦点图切换简易插件

    首页经常是需要一个焦点图切换的效果,最近做的项目也正好需要,所以在网上搜索,后面查到了一个半成品的插件,这里我自己修改了一下. js文件夹下面有两个文件夹jquery.jslide.js与jquery ...

  10. Android:StatFs类 获取系统/sdcard存储空间信息

    在存储文件时,为了保证有充足的存储空间大小,通常需要知道系统内部或者sdcard的剩余存储空间大小,这里就需要用到StatFs类. 1. 判断 SDCard 是否存在,并且是否具有可读写权限 /** ...