飞鸽传书mayfish 数据入库验证

我飞鸽传书专门为大家转载最新技术文档,谢谢!来自 YAGAS 的原创作品:

 

一般在把数据写入数据库之前,先对将要写入的数据进行校验,可以避免出现比较严重的安全问题(例如一般性的SQL注入攻击)。

mayfish 可以灵活的自定义将要执行写入的数据内容的校验规则,以减少开发人员手动对每一个字段的数据进行校验的麻烦。

例子如下:

一、首先定义数据库模块

 1  <? php
 2  class  MemberModel  extends  AppModel
 3  {
 4       /* * 设置数据库表名称 * */
 5       protected   $tableName   =   " members " ;
 6      
 7       /* *
 8       * 数据验证规则
 9        */
10       protected   $verify   =   array (
11           array ( " NotEmpty " ,   " username " ,   " 用户名不能留空 " ) ,
12           array ( " hasOne " ,     " username " ,   " 此用户已经存在,请换另一个用户名称再试一次 " ) ,
13           array ( " NotEmpty " ,   " password " ,   " 密码不能留空 " ) ,
14           array ( " NotEmpty " ,   " email " ,      " 邮箱地址不能留空 " ) ,
15           array ( " isEmail " ,    " email " ,      " 邮箱地址格式不正确 " ) ,
16           array ( " hasOne " ,    " email " ,       " 邮箱地址已经被占用 " )
17      );
18      
19      
20 
21       /* *
22       * 覆盖父类添加数据入库的方法
23       * 先对用户密码进行md5加密,再调用父类的方法写入数据库中
24        */
25       public   function  create( $data ) {
26           $data   =   array_map ( " addslashes " ,   $data );   // 将数据中的标点符号(单、双引号)进行安全转义
27           $data [ " password " =   md5 ( $data [ " password " ]);
28           return  parent :: create( $data );
29      }
30      
31      
32  }
33  ?>

 

二、执行数据写入操作

 1       // 执行写入数据的片段...
 2 
 3      //执行数据入库的操作
 4       private   function  PostData() {
 5           $fields   =   array ( " username " ,   " password " ,   " email " );
 6           $post     =   array_map ( " trims " ,   $_POST );  // 清除所有数据两边多余的空格
 7           $post     =  parseHTML( $post ,   $fields );   // 将指定的字段内容进行清除HTML处理
 8           $data     =  parseFields( $post ,   $fields );   // 提取可以写入数据库的字段(防止别人绕过你的页面进行提交一些别有用心的数据)
 9 
10           $DB   =   &  M( " member " );
11 
12           // 进行数据验证
13           if  ( ! $DB -> verify( $data )) {
14              
15               // 验证失败,取出失败的原因,并提交到模板页面中
16               $this -> assign( " error " ,   $DB -> getVerifyError());
17 
18               // 把提交过来的数据也提交到模板中(用以实现用户好像没有离开过页面的感觉)
19               $this -> assign( " default " ,   $post );
20              
21               // 渲染注册页面模板
22               $this -> display( " /register.html " );
23          }
24           else  {
25               // 写入数据库
26               $result   =   $DB -> create( $data );
27              
28 
29               // 返回布尔型,说明数据写入失败,渲染注册页面模板
30               if  ( is_bool ( $result )) {
31                   $this -> assign( " default " ,   $post );
32                   $this -> display( " /register.html " );
33              }
34               else  {
35                   // 注册成功,渲染注册成功页面模板
36                   $this -> assign( " username " ,   $data [ " username " ]);
37                   $this -> display( " /reg_success.html " );
38              }
39          }
40      }

 

 可执行验证的规则有

NotEmpty  不能为空

Number     只能是整数

isEmail       邮箱地址是否正确

hasOne     是否是唯一(是否重复,是否已经存在)

Regex       自定义正则表达式

 

验证的格式为

array(验证方法, 进行验证的字段名称, 验证错误的提示信息)

 

对于正则表达示的验证

array("Regex", "mobile", '/^13/d{9}$/', "用户名不能留空")


这里是下载页面: http://www.freeeim.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值