根据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类的更多相关文章

  1. python 全栈开发,Day117(popup,Model类的继承,crm业务开发)

    昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...

  2. Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容

    后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...

  3. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  4. iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值

    在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ...

  5. iOS开发之使用Runtime给Model类赋值

    本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值.本篇博客会介绍一部分,主要是字典的key与Mode ...

  6. 构建自己的PHP框架--实现Model类(3)

    在之前的博客中,我们实现并完善了Model类的findOne方法,下面我们来实现其中的其他方法. 先来看findAll方法,这个方法和findOne很相似. public static functio ...

  7. 构建自己的PHP框架--实现Model类(1)

    在之前的博客中,我们定义了ORM的接口,以及决定了使用PDO去实现.最后我们提到会有一个Model类实现ModelInterface接口. 现在我们来实现这个接口,如下: <?php names ...

  8. tp框架之Model类与命名空间

    1.获取系统常量信息 public function shuchu() { var_dump(get_defined_constants()); } 2.跨控制器或跨模块调用 function dia ...

  9. 为测试框架model类自动生成xml结果集

    问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式. 思路:见到(见)大写字母(缝)就插入(插)一个“_”字符(针)进去,最 ...

随机推荐

  1. 【原】lua的table深拷贝

    一般写的时候要注意以下几个问题: 1.自己里面的属性是自己,要防止死循环 2.同一个table地址出现在table属性(k或者v)的不同地方,复制时不能复制成2个table地址,需与原来地址保持一致 ...

  2. Visual Studio配置OpenCV设置全局的继承属性

    1.安装完毕OpenCV后,新建一个CLR空项目,将其取名为"SetingGlobalOpenCVDir"便于以后变更版本时修改.如下图所示: 2.点击"视图->其 ...

  3. jqgrid 中设置列不排序

    背景 今天在做系统的功能时,当时有这么个需求:在添加了一行数据时,原本的排序的自动就不能再排序,也就是排序失效. 1. 使用onSortCol事件禁止排序列 当时使用了初始化时,使用onSortCol ...

  4. AlertDialog

    1.AlertDialog点击时不自动消失 //在setPositiveButton和setNegativeButton根据自己的逻辑处理,大概代码如下 if(validate){//验证通过自动消失 ...

  5. hdoj 2122 Ice_cream’s world III

    并查集+最小生成树 Ice_cream’s world III Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  6. C#实现异步编程的两个简单机制(异步委托&定时器)及Thread实现多线程

    创建线程的常用方法:异步委托.定时器.Thread类 理解程序.进程.线程三者之间的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程进程就是在内存中运行的程序(即运行着的程序):一个进程 ...

  7. Linux--用SecureCRT来上传和下载文件

    SecureCRT下的文件传输协议有以下几种:ASCII.Xmodem.Ymodem.Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这种古老的传输协议速度较慢,但由 ...

  8. NGUI学习笔记(四):动态加载UI和NGUI事件

    动态加载UI 我们进入一个场景后,如果将这个场景所有可能用到的UI都直接放在场景中做好,由于要在进入场景时就部署好所有的UI对象,那么当UI对象较多时会碰到的问题是:1.初始化场景会产生非常明显的卡顿 ...

  9. AQTime教程(1)

    AQTime教程 1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行 ...

  10. Runtime 10种用法

    来源:haojingxue_iOS 链接:http://www.jianshu.com/p/3182646001d1 阅读了多篇运行时的文章,感觉都很不错,从几篇文章里面提取一些个人认为比较重要的,偏 ...