根据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. 谈谈Nginx有哪些特点

    1.热部署        我个人觉得这个很不错.在master管理进程与worker工作进程的分离设计,使的Nginx具有热部署的功能,那么在7×24小时不间断服务的前提下,升级Nginx的可执行文件 ...

  2. Struts2.x jsp页面无法使用jsp:forward跳转到action

    问题:使用<jsp:forward page="test"></jsp:forward>语句无法跳转到test所对应的action. 解决办法:在web.x ...

  3. 关于图像读取函数imread()的一点使用经验,注意默认参数的赋值

    读入数字图像到数组,用CNN进行训练,发现关于图像读取的一个问题. 问题描述:读取灰度数字图像,在验证时发现存在错误,从图像到数组中的值不完全一样? main code as follows: int ...

  4. 洛谷 P2279 03湖南 消防局的设立

    2016-05-30 16:18:17 题目链接: 洛谷 P2279 03湖南 消防局的设立 题目大意: 给定一棵树,选定一个节点的集合,使得所有点都与集合中的点的距离在2以内 解法1: 贪心 首先D ...

  5. Codeforces Round #226 (Div. 2 )

    这次精神状态不怎么好,第一题的描述看得我就蛋疼...看完就速度写了~~~最终fst了%>_<%,第二题写复杂了,一直WA pretest 3,然后就紧张,导致精神更不好了,一直纠结在第二题 ...

  6. Fun with layers

    Fun with layers 这篇文章的有些内容很奇怪,我根本就没有这种现象,所以暂时就这样吧 In this post, I’ll explain how to add a border, rou ...

  7. [iOS基础控件 - 5.1] UIScrollView

    A.需要掌握 UIScrollView 是一个能够滚动的视图控件,可以用来展示大量内容,如手机的“设置” 1.常见属性 2.常用代理方法 3.缩放 4.UIScrollView和UIPageContr ...

  8. 转载 基于Selenium WebDriver的Web应用自动化测试

    转载原地址:  https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...

  9. unable to load default svn client myeclipse SVN安装,wen7 64位安装SVN

    在安装完后连接svn时出现unable to load default svn client的错误提示,百度知道是版本不对,我安装的是1.8的版本,插件按成1.6的了,只需下载1.8插件安装就行了 安 ...

  10. Activity详解

    Activity是android应用的重要组成单元之一(另外3个是Service,BroadcastReceiver和ContentProvider).实际应用包含了多个Activity,不同的Act ...