根据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 '注册失败'; } ?>