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的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
php中使用DOM类读取XML文件的实现代码
Dec 14 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 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
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
python实现祝福弹窗效果
2019/04/07 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
幼师自我鉴定范文
2013/10/01 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
博士生求职信
2014/07/06 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
离婚财产分配协议书
2014/10/21 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
七年级英语教学反思
2016/02/15 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle