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 相关文章推荐
一个简洁的多级别论坛
Oct 09 PHP
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
PHP学习之正则表达式
Apr 17 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
解析php5配置使用pdo
Jul 03 PHP
php去除字符串换行符示例分享
Feb 13 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 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
Parse正式发布开源PHP SDK
2014/08/11 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
在django中自定义字段Field详解
2019/12/03 Python
python groupby 函数 as_index详解
2019/12/16 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
Django models filter筛选条件详解
2020/03/16 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
网络专业学生个人的自我评价
2013/12/16 职场文书
实习协议书范本
2014/04/22 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
晶体管单管来复再生式收音机
2021/04/22 无线电
python实现手机推送 代码也就10行左右
2022/04/12 Python
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技