zoukankan      html  css  js  c++  java
  • 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);
    }

  • 相关阅读:
    [java核心篇02]__内部类
    iOS学习之MVC,MVVM,MVP模式优缺点
    iOS MVC、MVP和MVVM理解
    网络常见的9大命令
    计算机网络基础知识总结
    iOS面试常见问题和知识点汇总
    NSMutableArray 删除可变数组元素
    iOS之集成GoogleMap定位、搜索注意事项
    iOS 13-Sign In with Apple
    Lipo移除ORC架构
  • 原文地址:https://www.cnblogs.com/fslnet/p/4484855.html
Copyright © 2011-2022 走看看