mayfish 数据入库验证代码


Posted in PHP onApril 30, 2010

一般在把数据写入数据库之前,先对将要写入的数据进行校验,可以避免出现比较严重的安全问题(例如一般性的SQL注入攻击)。
mayfish 可以灵活的自定义将要执行写入的数据内容的校验规则,以减少开发人员手动对每一个字段的数据进行校验的麻烦。
例子如下:
一、首先定义数据库模块

<?php 
class MemberModel extends AppModel 
{ 
/** 设置数据库表名称 **/ 
protected $tableName = "members"; 
/** 
* 数据验证规则 
*/ 
protected $verify = array( 
array("NotEmpty", "username", "用户名不能留空"), 
array("hasOne", "username", "此用户已经存在,请换另一个用户名称再试一次"), 
array("NotEmpty", "password", "密码不能留空"), 
array("NotEmpty", "email", "邮箱地址不能留空"), 
array("isEmail", "email", "邮箱地址格式不正确"), 
array("hasOne", "email", "邮箱地址已经被占用") 
); 
/** 
* 覆盖父类添加数据入库的方法 
* 先对用户密码进行md5加密,再调用父类的方法写入数据库中 
*/ 
public function create($data) { 
$data = array_map("addslashes", $data); //将数据中的标点符号(单、双引号)进行安全转义 
$data["password"] = md5($data["password"]); 
return parent::create($data); 
} 
} 
?>

二、执行数据写入操作
//执行写入数据的片段... 
//执行数据入库的操作 
private function PostData() { 
$fields = array("username", "password", "email"); 
$post = array_map("trims", $_POST); //清除所有数据两边多余的空格 
$post = parseHTML($post, $fields); //将指定的字段内容进行清除HTML处理 
$data = parseFields($post, $fields); //提取可以写入数据库的字段(防止别人绕过你的页面进行提交一些别有用心的数据) 
$DB = & M("member"); 
//进行数据验证 
if (!$DB->verify($data)) { 
//验证失败,取出失败的原因,并提交到模板页面中 
$this->assign("error", $DB->getVerifyError()); 
//把提交过来的数据也提交到模板中(用以实现用户好像没有离开过页面的感觉) 
$this->assign("default", $post); 
//渲染注册页面模板 
$this->display("/register.html"); 
} 
else { 
//写入数据库 
$result = $DB->create($data); 
//返回布尔型,说明数据写入失败,渲染注册页面模板 
if (is_bool($result)) { 
$this->assign("default", $post); 
$this->display("/register.html"); 
} 
else { 
//注册成功,渲染注册成功页面模板 
$this->assign("username", $data["username"]); 
$this->display("/reg_success.html"); 
} 
} 
}

可执行验证的规则有
NotEmpty 不能为空
Number 只能是整数
isEmail 邮箱地址是否正确
hasOne 是否是唯一(是否重复,是否已经存在)
Regex 自定义正则表达式

验证的格式为
array(验证方法, 进行验证的字段名称, 验证错误的提示信息)
对于正则表达示的验证
array("Regex", "mobile", '/^13\d{9}$/', "用户名不能留空") 

MayFish 下载

PHP 相关文章推荐
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
php生成curl命令行的方法
Dec 14 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
PHP递归算法的简单实例
Feb 28 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
在PHP中操作Excel实例代码
Apr 29 #PHP
PHP 图片上传实现代码 带详细注释
Apr 29 #PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 #PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 #PHP
PHP 文件上传全攻略
Apr 28 #PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 #PHP
PHP 开发环境配置(测试开发环境)
Apr 28 #PHP
You might like
php自定义hash函数实例
2015/05/05 PHP
Javascript string 扩展库代码
2010/04/09 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
HTML的select控件美化
2017/03/27 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
MySQL适配器PyMySQL详解
2017/09/20 Python
微信跳一跳python代码实现
2018/01/05 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python 定义只读属性的实现方式
2020/03/05 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
复核员上岗演讲稿
2014/01/05 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
欢迎新生标语
2014/10/06 职场文书
2014年营销工作总结
2014/11/22 职场文书
社会实践活动总结
2015/02/05 职场文书
售后服务质量承诺书
2015/04/29 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
毕业证明模板
2015/06/19 职场文书
民主生活会主持词
2015/07/01 职场文书
教师师德承诺书2016
2016/03/25 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
opencv检测动态物体的实现
2021/07/21 Python