注册Model类
根据username查找是否存在相同的用户名的方法
自动填充功能填充注册时间字段
如果两次输入的密码一直则写入数据库的方法
userModel.class.php
<?php
/****
燕十八 公益PHP讲堂 论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/ defined('ACC')||exit('Acc Deined'); class UserModel extends Model {
protected $table = 'user';
protected $pk = 'user_id';
protected $_valid=array(
array('username',1,'用户名必须存在','require'),
array('username',0,'用户名必须在4-16字符内','length','4,16'),
array('email',1,'email非法','require'),
array('passwd',1,'passwd不能为空','require')
);
protected $_auto=array(
array('regtime','function','time'),
);
//自动填充
public function _autoFill($data){
foreach($this->_auto as $k=>$v){
if(!array_key_exists($v[0],$data)){
switch ($v[1]){
case 'value':
$data[$v[0]]=$v[2];
break;
case 'function':
$data[$v[0]]=call_user_func($v[2]);
break;
}
}
}
return $data;
}
/*
用户注册
*/
public function reg($data) {
if($data['passwd']) {
$data['passwd'] = $this->encPasswd($data['passwd']);
} return $this->add($data);
} protected function encPasswd($p) {
return md5($p);
} /*
根据用户名查询用户信息
*/
public function checkUser($username) {
$sql = 'select count(*) from ' . $this->table . " where username='" .$username . "'";
return $this->db->getOne($sql);
} }
父类所增加的方法
/*
格式 $this->_valid = array(
array('验证的字段名',0/1/2(验证场景),'报错提示','require/in(某几种情况)/between(范围)/length(某个范围)','参数')
); array('goods_name',1,'必须有商品名','requird'),
array('cat_id',1,'栏目id必须是整型值','number'),
array('is_new',0,'in_new只能是0或1','in','0,1')
array('goods_breif',2,'商品简介就在10到100字符','length','10,100') */
public function _validate($data) {
if(empty($this->_valid)) {
return true;
} $this->error = array(); foreach($this->_valid as $k=>$v) {
switch($v[1]) {
case 1:
if(!isset($data[$v[0]])) {
$this->error[] = $v[2];
return false;
} if(!$this->check($data[$v[0]],$v[3])) {
$this->error[] = $v[2];
return false;
}
break;
case 0:
if(isset($data[$v[0]])) {
if(!$this->check($data[$v[0]],$v[3],$v[4])) {
$this->error[] = $v[2];
return false;
}
}
break;
case 2:
if(isset($data[$v[0]]) && !empty($data[$v[0]])) {
if(!$this->check($data[$v[0]],$v[3],$v[4])) {
$this->error[] = $v[2];
return false;
}
}
}
} return true; }
public function getErr(){
return $this->error;
} protected function check($value,$rule='',$parm='') {
switch($rule) {
case 'require':
return !empty($value); case 'number':
return is_numeric($value); case 'in':
$tmp = explode(',',$parm);
return in_array($value,$tmp);
case 'between':
list($min,$max) = explode(',',$parm);
return $value >= $min && $value <= $max;
case 'length':
list($min,$max) = explode(',',$parm);
return strlen($value) >= $min && strlen($value) <= $max;
case 'email':
// 判断$value是否是email,可以用正则表达式,但现在没学.
// 因此,此处用系统函数来判断
return (filter_var($value,FILTER_VALIDATE_EMAIL) !== false);
default:
return false;
}
}
controller页面
<?php
/****
燕十八 公益PHP讲堂 论 坛: http://www.zixue.it
微 博: http://weibo.com/Yshiba
YY频道: 88354001
****/ /***
regAct.php
作用:接收用户注册的表单信息,完成注册
***/ //print_r($_POST); define('ACC',true);
require('./include/init.php');
//print_r($_POST);
$user=new UserModel();
$data=$user->_facade($_POST);
$data=$user->_autoFill($data); if(!$user->_validate($_POST)) { // 自动检验
$msg = implode('<br />',$user->getErr());
include(ROOT . 'view/front/msg.html');
exit;
} // 检验用户名是否已存在
if($user->checkUser($_POST['username'])) {
$msg = '用户名已存在';
include(ROOT . 'view/front/msg.html');
exit;
} if($user->add($data)){
echo '注册成功';
echo "<a href='./zhuce.php'>返回登录</a>";
}else{
echo '注册失败';
} ?>
注册Model类的更多相关文章
- python 全栈开发,Day117(popup,Model类的继承,crm业务开发)
昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...
- Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容
后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ...
- iOS开发之使用Runtime给Model类赋值
本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值.本篇博客会介绍一部分,主要是字典的key与Mode ...
- 构建自己的PHP框架--实现Model类(3)
在之前的博客中,我们实现并完善了Model类的findOne方法,下面我们来实现其中的其他方法. 先来看findAll方法,这个方法和findOne很相似. public static functio ...
- 构建自己的PHP框架--实现Model类(1)
在之前的博客中,我们定义了ORM的接口,以及决定了使用PDO去实现.最后我们提到会有一个Model类实现ModelInterface接口. 现在我们来实现这个接口,如下: <?php names ...
- tp框架之Model类与命名空间
1.获取系统常量信息 public function shuchu() { var_dump(get_defined_constants()); } 2.跨控制器或跨模块调用 function dia ...
- 为测试框架model类自动生成xml结果集
问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...
随机推荐
- 关于java线程池 Ⅱ
上一篇翻译了线程池主要部分的api,经过一段时间的学习,这里记录一下这段时间对jdk自带线程池的学习成果. 为了方便说明,先放一张类图,包括了jdk线程池主要涉及到的类,为了条理清晰去掉了部分依赖和关 ...
- HW5.29
public class Solution { public static void main(String[] args) { int n1 = (int)(Math.random() * 5 + ...
- Oracle-Oracle10 数据空间建立,导入,导出--oracle10g 删除步骤
--以system/manager身份登录SQLPlus,并执行 ========================管理员登陆==================================== 登 ...
- mysql登陆报错(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2))
部署mysql版本信息 version: 5.6.21 具体现象: mysql服务能够正常启动如下: [root@localhost ~]# service mysqld restart Shutti ...
- unigui下载文件
lblProduct.Caption := '<a href="files\1.t" target=new>要下载的文件名</a>';
- Altium Designer生成网表 导出网表【worldsing笔记】
Design -> Netlist for project -> Protel
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...
- android http 通信(httpclient 实现)
1.httpclient get 方式 HttpGet httpGet = new HttpGet(url); HttpClient client = new DefaultHttpClient(); ...
- 依賴注入入門——Unity(一)
參考資料http://blog.csdn.net/m13666368773/article/details/7802126 背景介紹 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...
- 封装的多功能多效果的RecyclerView
开源界有一句很有名的话叫"不要重复发明轮子",当然,我今天的观点不是要反驳这句话,轮子理论给我们的开发带来了极大的便利,.但我想说的是,既要会用轮子,也要知道轮子怎么造,必要的时候 ...