最近又学到了一些新技巧,和大家分享下。

第一、当一个表单有很大内容时,我们在表单处理页面接收这些表单的值的时候就会重复 接收,于是就有了自动过滤的解决之法(核心就是把数据表里需要的字段接收)

   首先:我们要准备数据库的字段,于是就有两个方法

     一、 从表里去获取:使用  'desc table' + mysql_fetch_assoc 接收结果集

                代码:  function __autogv($arr){

              $sql = 'desc test'; $res= mysql_query($sql); $data = array();

              $fileds =  mysql_fetch_assoc($res);

              foreach($fileds as $v){

                if(array_key_exists($v['field'],$arr)){

                  $data[$v['field']] = $_POST[$v['field']];

                }

              }

              return $data;

            }

         二、手动添加字段

        function __autogv($arr){

          $fileds = array('t1','t2','t3','t4','t5');

          foreach($arr as $k=>$v){

            if(in_array($k,$fileds)){

                  $data[$k] = $v;

              }

          }

          return $data;

}

自动填充:什么意思呢?就是POST表单里没有数据表里该填内容的字段 比如:数据表 t1 t2 t3 t4 t5   t1 t2 t3 已自动过滤  而 t4 t5 表单里没有  但是 还是需要给它们补充值 ,因此需要自动填充

     

 代码:

          $fillfield = array(

                array('t4','value','0'),//一个填充0

                array('t5','function','time')//一个是时间戳 

          )

          function __autofill($data){//$data是自动过滤后的数组

              foreach($fillfield as $v){

                  if(!array_key_exists($v[0],$data)){

                      switch($v[1]){

                            case 'value': $data[$v[0]] = $v[2];break;

                            case 'function':$data[$v[0]]=call_user_func($v[2]);//回调 等同于 $v[2]()

                        }

                  }

              }

              return $data;

        }

自动验证:验证数据的合法性,首先是要以什么为标准的验证,因此第一步应该定下规范(以商品表为例)

$validate = array(
                                      array('goods_name',1,'商品名不能为空','require'),
                                      array('goods_sn',1,'商品序列号不能为空','require'),
                                      array('cat_id',1,'分类必须是大于0的整数','number'),
                                      array('shop_price',1,'价格不能为空,必须是大于0的数','number2'),
                                      array('goods_weight',1,'重量不能为空,必须是大于0的数','number2'),
                                      array('goods_number',1,'库存不能为空,必须大于0,必须是整数','number1'),
                                      array('is_best',2,'只能是1和0','in','0,1'),
                                      array('is_now',2,'只能是1和0','in','0,1'),
                                      array('is_hot',2,'只能是1和0','in','0,1'),
                                      array('goods_brief',3,'10到100个字符的内容','length','10,100')
                                    );

function __autovalid($data){
if(empty($this->validate)){
return true; //如果验证数组是空的 就说明没有可验证的内容
}
foreach($this->validate as $v){
switch($v[1]){
case 1:
if(!isset($data[$v[0]])){
$this->error[] = $v[2];
return false;
}
if(!checkrule($data[$v[0]],$v[3])){//检验失败的话
$this->error[] = $v[2];
return false;
}
break;
case 2:
if(isset($data[$v[0]])){
if(!checkrule($data[$v[0]],$v[3],$v[4])){//检验失败的话
$this->error[] = $v[2];
return false;
}
}
break;
case 3: if(isset($data[$v[0]]) && !empty($data[$v[0]])){
if(!checkrule($data[$v[0]],$v[3],$v[4])){//检验失败的话
$this->error[] = $v[2];
return false;
} } break; }
}
return true;//如果都和法就返回真
}
function checkrule($dval,$rule,$parm=''){
switch($rule){
case 'require':
return !empty($dval);
//验证的是必填字段,goods_name goods_sn 这里的话 goods_name goods_sn 就是不为空 empty返回的是false 取反返回true 就不会走这步了在__autovalid 里 checkrule
case 'number':
//var_dump($dval);
if(is_numeric((int)$dval) && $dval > 0 ){
return true;
}else{
return false;
}
case 'number1':
//var_dump(is_string($dval));
if(is_numeric($dval) && is_int((int)$dval) && $dval > 0){
//echo $dval;
return true;
}else{
return false;
}
case 'number2':
if(is_numeric($dval) && $dval > 0){
return true;
}else{
return false;
}
case 'in':
$tmp = explode(',',$parm);
return in_array($dval,$tmp);
case 'length':
$tmp = explode(',',$parm);
list($min,$max) = $tmp; return mb_strlen($dval,'utf-8') >= $min && strlen($dval) <= $max;
default:
return false;
} }

php-自动过滤、自动填充、自动验证的更多相关文章

  1. Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

    标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...

  2. ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)

    原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password ...

  3. SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码

    在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...

  4. 缓冲流自动把getchar()填充

    #include"stdio.h" #include"conio.h" #include<stdlib.h> int main() { char c ...

  5. 爬虫数据使用MongDB保存时自动过滤重复数据

    本文转载自以下网站: 爬虫断了?一招搞定 MongoDB 重复数据 https://www.makcyun.top/web_scraping_withpython13.html 需要学习的地方: Mo ...

  6. php+redis,延迟任务 实现自动取消订单,自动完成订单

    简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) 需要注意此功能是在redis 2.8版本以后推出的,因此你服务器上的reids最少要是2.8版本 ...

  7. 如何理解Java中的自动拆箱和自动装箱?

    小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...

  8. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  9. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  10. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

随机推荐

  1. 玩转html

    简介 CSS 是什么? CSS是Cascading Style Sheets的简称,中文称为层叠样式表. 作用 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象 ...

  2. CentOS7 64位 安装MySQL5.7

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo ...

  3. 51Nod 1110 距离之和最小 V3 中位数 思维

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 X轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i].点P到点P[i]的带权距离 = 实际距离 ...

  4. Python---初识堡垒机

    在学习堡垒机之前,我们需要首先了解下Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作. SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: ...

  5. COM组件转换为.NET元数据2

    上一篇通过命令的方式实现COM组件与.NET元素的转换.这次直接在VS中转换. 以下为步骤:

  6. Solr中Field常用属性

    FieldType 实例:<fieldType name="text_ik" class="solr.TextField"></fieldTy ...

  7. JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流

    上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream  FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...

  8. SQL-删除重复记录

    前几日工作的时候,有个小需求,是要求删除一个表table_A里的重复记录(保留一条),假设以字段COL_PK重复来判断记录重复,那么有几种写法: 在Oracle里,可以利用rowid来删除,这是非常高 ...

  9. Web、WCF和WS通过Nginx共享80端口

    团队中的一个Web项目面对的用户网络环境多是在严格的防火墙安全条件下,通常只开放一些标准的端口如80,21等. 上线初期,因忽略了这个问题,除了Web应用是以80端口提供访问外,WCF和WS是以其他端 ...

  10. KNN K~近邻算法笔记

    K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每一个特征与样本集中数据相应的特征进行比較.然后算法提取样本集中特征最相似的数据的分类标签.一般来说.仅仅提取样本数据集中前K个最相似的数据 ...