• 注册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 '注册失败';
    }
    
    
    ?>
    
    
    
    
    
    
    
    
  • 相关阅读:
    CSS3 flexbox弹性布局实例
    移动端自适应:flexible.js可伸缩布局使用
    玩转HTML5移动页面(转自http://tqtan.com/)
    CSS3那些不为人知的高级属性
    android开发问题记录1——Android SDK Manager无法更新Packages
    Javascirpt详解之函数function
    SPFA 最短路
    Sonya and Robots
    三角形问题
    平方和与立方和 七夕节
  • 原文地址:https://www.cnblogs.com/lzzhuany/p/4801912.html
Copyright © 2020-2023  润新知