商城项目(一)

燕十八公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it


商城项目(一)

主要包括:
1,商品管理
商品的增加,删除,修改,查询
2,分类管理
分类的增加,删除,修改,查询


仿ThinkPHP写了一个微型框架,把常用的增加改查写到一个Model类中,商品Model和分类Model继承可以直接增删改查方法,因为这些方法都是最基本的,所以放在Model,另外对分类进行了无限级分类,自动过滤,自动完成,自动验证的功能实现。尤其是自动验证功能比较麻烦,对于我这个初学者来说稍微有点难度,还需要自己以后不断的学习。

Model代码

<?php

  class Model{
    protected  $table=null;//表名
	protected  $db=null;
	protected $pk=null;//主键
	protected $fields=array();
	protected $_auto=array();
	protected $error=array();

	function __construct(){
	  $this->db=mysql::getIns();
	  $this->fields=$this->getFields();
	}
    //直接执行sql语句
	public function query($sql){
	   return $this->db->query($sql);
	 }
    //增加,$data为带键值的数组
	public function add($data){
	$res=$this->db->autoExecute($this->table,$data);
		if($res){
		  if($this->db->affected_rows()){
				return true;
		  }else{
				return false;
		  }
		}else{
		  return false;
		}
	}

    //删除,$id为传入的主键值
	public function del($id){
		$sql='delete from '.$this->table.' where '.$this->pk.'='.$id;
	    $res=$this->db->query($sql);
		if($res){
		  if($this->db->affected_rows()){
				return true;
		  }else{
				return false;
		  }
		}else{
		  return false;
		}
	}

    //修改,$data为带键值的数组
	public function update($data=array(),$id){
	   $res=$this->db->autoExecute($this->table,$data,$action='update',$where=$this->pk.'='.$id);
	   if($res){
	       if($this->db->affected_rows()){
		       return true;
		      }else{
			   return false;
			       }
	   }else{
	     return false;
	   }
	}
   //查询所有表数据
	public function select(){
	  $sql='select * from '.$this->table;
	  return $this->db->getAll($sql);
	}

	//查询单条表记录,$id为传入的主键值
	public function find($id){
		$sql='select * from '.$this->table.' where '.$this->pk.'='.$id;
		return $this->db->getRow($sql);
	}

    //获取表中字段名
	public function getFields(){
	   $sql='desc '.$this->table;
       $res=$this->query($sql);
       $field=array();
       while($row=mysql_fetch_row($res)){
            $field[]=$row[0];
         }
		 return $field;
	 }

    //过滤post数组,如果post数组中的键和数组的列名没有对应的,就去掉这个键值对
	 public function _facade($arr=array()){
        $data=array();
		foreach($arr as $k=>$v){
		if(in_array($k,$this->fields)){
			$data[$k]=$v;
			}
		}
		return $data;
	}

   //自动完成功能,表中的字段名称如果没有出现在post的键中,就用默认值自动填充
	public function _autoFill($data=array()){
	   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':
					  $fun=$v[2];
					  $data[$v[0]]=$fun();
				      break;  
				}
		  }
	   }
	   return $data;
	}

     //自动验证功能,不如长度不符合,必填的没填,类型的检验

	 /*
         array('goods_name',1,'商品名不能为空','require'),
		 array('cat_id',1,'类名的值只能是数字','number'),
		 array('is_new',0,'是否新品的值只能是1或者0','in','0,1'),
		 array('goods_dec',2,'描述的长度只能是10-100','length','10,100')

	 */
	public function __validate($data){
           if(empty($this->_validate)){//没有验证条件存在时即为真
		     return true;
		   }

	     foreach($this->_validate as $k=>$v){

		    switch ($v[1]){
				case 1:
					if(!isset($data[$v[0]])){//如果data中的goods_name不存在,直接返回false并记录错误信息
						$this->error[]=$v[2];
						 return false;	 
				    }	
					if(!$this->check($data[$v[0]],$v[3])){//传入data['goods_name']的值和requre
							$this->error[]=$v[2];
						    return false;
					}
					break;
				case 0:
					if(isset($data[$v[0]])){
					  if(!$this->check($data[$v[0]],$v[3],$v[4])){//传入data['is_new']的值,in,'0,1'
							$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])){//传入data['goods_dec']的值,length,'10,100'
						   $this->error[]=$v[2];
						    return false;
						}
						break;
					}
				
				
			}
		 
		 
		 }
	   return true;

	}


	public function check($value,$rule='',$parm=''){
	  switch ($rule){
	      case 'require':
			 return !empty($value);
		  case 'number':
			 return is_numeric($value);
		  case 'in':
			  list($a,$b)=explode(',',$parm);
			  return $value==$a||$value==$b;
		  case 'length':
			 list($a,$b)=explode(',',$parm);
		     return strlen($value)>=$a&&strlen($value)<=$b;
		  default:
			  return true;
	  }
	
	
	}

	public function getError(){
	  return $this->error;
	}



	//自动完成,自动过滤功能汇总函数
	public function create($data){
	  $data=$this->_facade($data);
	  return $this->_autoFill($data);
	} 






}

你可能感兴趣的:(商城项目(一))