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 相关文章推荐
一个PHP数组应该有多大的分析
Jul 30 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
php curl post 时出现的问题解决
Jan 30 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
php时间戳转换代码详解
Aug 04 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 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基础陷阱题(变量赋值)
2012/09/12 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
python创建关联数组(字典)的方法
2015/05/04 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
python 连续不等式语法糖实例
2020/04/15 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
党校培训自我鉴定范文
2014/03/20 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
汽车销售合同文本
2019/08/08 职场文书