<?php
/***********************************************************************************/
/* MassCRM客户关系管理系统							   							   */
/* ========================      						 						   */
/* 欢迎使用 MassCRM ,在您开始使用之前,请务必完整阅读本软件附带的全部说明档	  		   */
/***********************************************************************************/
/* Welcome to http://www.massboxes.com & http://masscrm.massboxes.com		   	   */
/***********************************************************************************/
/**************************************************/
/*数据库基本操作类                                */
/*作者：阿标 2005.10.14                           */
/*QQ：415583269    190885451                      */
/**************************************************/

//BiaoCommon class
class BiaoCommon{ 
	
	//错误信息
	var $error;
	
	//数据库链接
	var $conn;
	
	//数据表名称
	var $tableName;
	
	//一页读取最大行数
	var $maxRow;
	
	//偏移量
	var $OffSet;
	
	//符合要求总行数
	var $totalRow;
	
	//当前页面行数
	var $pageRow;
	
	//读出的结果，二维数组形式
	var $result;
	
	//总分页数
	var $totalPages;
	
	//当前页数
	var $currentPage;
	
	//查询字段
	var $selectField;
	
	// 查询条件
	var $condition;
	
	//也面传递参数
	var $pageParameter;
	
	//数据库操作次数
	var $executeDBNumber;
	
	//插入数据，二维数组
	var $insertArray;
	
	//修改数据，二维数组
	var $updateArray;
	
	function formatString($str){		//==htmlspecialchars();
		$str=str_replace("<","&lt;",$str);
		$str=str_replace(">","&gt;",$str);
		$str=str_replace("\"","&quot;",$str);
		$str=str_replace("LTE","<=",$str);
		$str=str_replace("GTE",">=",$str);
		$str=str_replace("GT",">",$str);
		$str=str_replace("LT","<",$str);
		$str=nl2br($str);
		return $str;
	}
	
	
	//构造函数，默认$OffSet=0,$selectField="*"
	function BiaoCommon($conn){
		$this->conn = $conn; 
		$this->OffSet= "0"; 
		$this->selectField= "*"; 
//		$this->maxRow=10;
	}	// 构造函数结束
	
	
	//获取当前数据表名称
	function getTableName(){
		return $this->$talbeName;
	}	//getTableName结束
	
	
	//设置当前数据表名称
	function setTableName($tableName){
		$this->tableName = $tableName;
	}	//getTableName结束

	
	//获取当前设置的一页最大读取行数
	function getMaxRow(){
		return $this->$maxRow;
	}	//getMaxRow结束
	
	
	//设置当前设置的一页最大读取行数
	function setMaxRow($maxRow){
		$this->maxRow = $maxRow;
	}	//setMaxRow结束
	
	
	//获取当前偏移量
	function getOffSet(){
		return $this->$OffSet;
	}	//getOffSet结束
	
	
	//设置当前偏移量
	function setOffSet($OffSet){
		$this->OffSet = $OffSet;
	}	//setOffSet结束
	
	
	//设置显示条件
	function setCondition($condition){ 
		$this->condition=$this->formatString($condition); 
	} 	//setCondition结束
	
	
	//设置查询字段
	function setSelectField($selectField){ 
		$this->selectField=$selectField; 
	} 	//setSelectField结束

	
	//设置查询字段和数值
	function setInsertArray($insertField,$insertValue){ 
		if(!$insertField){
			echo"<script>alert(\"错误操作：参数设置不正确，字段为空！\");</script>";
			$this->error="参数设置不正确，字段为空！";
			exit;
		}
		
		$tmp[field]=$insertField;
//		$tmp[value]=$insertValue;
		$tmp[value]=$this->formatString($insertValue);
		$this->insertArray[]=$tmp; 
	} 	//setInsertArray结束
	
	
	//设置查询字段和数值
	function setUpdateArray($updateField,$updateValue){ 
		if(!$updateField){
			echo"<script>alert(\"错误操作：参数设置不正确，字段为空！\");</script>";
			$this->error="参数设置不正确，字段为空！";
			exit;
		}
		
		$tmp[field]=$updateField;
//		$tmp[value]=$updateValue;
		$tmp[value]=$this->formatString($updateValue);
		$this->updateArray[]=$tmp; 
	} 	//setUpdateArray结束
	
	
	//设置传递参数 
	function setPageParameter($key,$value){ 
		$tmp[key]=$key;
//		$tmp[value]=$value; 
		$tmp[value]=$this->formatString($value); 
		$this->pageParameter[]=$tmp; 
	} 	//setPageParameter结束
	
	//获取传递参数
	function getPageParameter(){ 
		$tmp=""; //生成一个要传递参数字串 
		for($i=0;$i<count($this->pageParameter);$i++){ 
			$tmp.="&".$this->pageParameter[$i][key]."=".$this->pageParameter[$i][value]; 
		}
		return $tmp; 
	} 	//getPageParameter结束
	
	
	//返回数据库操作次数 
	function getExeDBNumber(){ 
		$tmp="<div align=center>本页面数据库操作次数：".$this->executeDBNumber."次</div><br>\n";
		return $tmp;
	} 	//getExeDBNumber结束
	
	
	//读取结果
	//返回值是一个二维数组，result[记录号][字段名]
	function selectResult(){
		if(!$this->conn){
			echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
			return;
		}
		if(!$this->tableName){
			echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
			return;
		}
		

		//获取记录
		$sql="select ".$this->selectField." from ".$this->tableName." ".$this->condition;
		if($this->maxRow){
			$rs = &$this->conn->SelectLimit($sql,$this->maxRow,$this->OffSet);
			
//			$this->executeDBNumber++;
		}
		else{
			$rs = &$this->conn->Execute($sql);
			
//			$this->executeDBNumber++;
		}
		
		//本页记录数
//		$this->pageRow = $rs->RecordCount();
		
		//返回查询结果，二维数组形式
		if (!$rs) {
//			print $this->conn->ErrorMsg(); 
			return;
		} else {
			$i=0;
			$this->result=null;
			while (!$rs->EOF) {
				$this->result[$i]=$rs->fields;
				$rs->MoveNext();
				$i++;
			}
			return $this->result; 
		}
	}	//selectResult结束
	
	
	//读取结果
	//返回值是一个二维数组，result[记录号][字段名]
	function showColumns(){
		if(!$this->conn){
			echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
			return;
		}
		
		if(!$this->tableName){
			echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
			return;
		}

		//获取记录
		$sql="show columns from ".$this->tableName;
		$rs = &$this->conn->Execute($sql);
		
//		$this->executeDBNumber++;

		
		//返回查询结果，二维数组形式
		if (!$rs) {
			print $this->conn->ErrorMsg(); 
			return;
		} else {
			$i=0;
			$this->result=null;
			while (!$rs->EOF) {
				$this->result[$i]=$rs->fields;
				$rs->MoveNext();
				$i++;
			}
			return $this->result; 
		}
	}	//showColumns结束
	
	function showFields(){
		if(!$this->conn){
			echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
			return;
		}
		
		if(!$this->tableName){
			echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
			return;
		}

		//获取记录
		$sql="show FIELDS from ".$this->tableName;
		$rs = &$this->conn->Execute($sql);
		
//		$this->executeDBNumber++;

		
		//返回查询结果，二维数组形式
		if (!$rs) {
			print $this->conn->ErrorMsg(); 
			return;
		} else {
			$i=0;
			$this->result=null;
			while (!$rs->EOF) {
				$this->result[$i]=$rs->fields;
				$rs->MoveNext();
				$i++;
			}
			return $this->result; 
		}
	}	//showField结束
	
	function showKeys(){
		if(!$this->conn){
			echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
			return;
		}
		
		if(!$this->tableName){
			echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
			return;
		}

		//获取记录
		$sql="show KEYS from ".$this->tableName;
		$rs = &$this->conn->Execute($sql);
		
//		$this->executeDBNumber++;

		
		//返回查询结果，二维数组形式
		if (!$rs) {
			print $this->conn->ErrorMsg(); 
			return;
		} else {
			$i=0;
			$this->result=null;
			while (!$rs->EOF) {
				$this->result[$i]=$rs->fields;
				$rs->MoveNext();
				$i++;
			}
			return $this->result; 
		}
	}	//showKeys结束
	
	//读取结果
	//返回值是一个二维数组，result[记录号][字段名]
	function showTable(){
		if(!$this->conn){
			echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
			return;
		}
		//获取记录
		$sql="SHOW TABLE STATUS";
		$rs = &$this->conn->Execute($sql);
		
//		$this->executeDBNumber++;

		
		//返回查询结果，二维数组形式
		if (!$rs) {
			print $this->conn->ErrorMsg(); 
			return;
		} else {
			$i=0;
			$this->result=null;
			while (!$rs->EOF) {
				$this->result[$i]=$rs->fields;
				$rs->MoveNext();
				$i++;
			}
			return $this->result; 
		}
	}	//showTable结束

	//插入新记录
	function insertRow(){
		if(!$this->error){
			$field_query="";
			$value_query="";
			
			//判断
			if(!$this->conn){
				echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
				return;
			}
			if(!$this->tableName){
				echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
				return;
			}
			if(!count($this->insertArray)){
				echo"<script>alert(\"错误操作：没有设置插入数据！\");</script>";
				return;
			}
			
			
			for($i=0;$i<count($this->insertArray);$i++){
				if(!$this->insertArray[$i][field]){
					echo"<script>alert(\"错误操作：参数设置不正确！\");</script>";
					return;
				}
				
				$field_query.=$this->insertArray[$i][field].",";
				$value_query.="'".$this->insertArray[$i][value]."',";
			}
			
			if($field_query){//去掉最后一个,
				$field_query=substr($field_query,0,strlen($field_query)-1);
				$value_query=substr($value_query,0,strlen($value_query)-1);
			}
			
			$sql="insert into ".$this->tableName." (".$field_query.") values (".$value_query.")";
			$rs = &$this->conn->Execute($sql);
//			$this->executeDBNumber++;
			
			//清空数据
			$this->insertArray="";
			return true;
		}
	}
	
	
	//修改记录
	function updateRow(){
		if(!$this->error){
			$update_query="";
			
			//判断
			if(!$this->conn){
				echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
				return;
			}
			if(!$this->tableName){
				echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
				return;
			}
			if(!count($this->updateArray)){
				echo"<script>alert(\"错误操作：没有设置修改数据！\");</script>";
				return;
			}
			if(!count($this->condition)){
				echo"<script>alert(\"错误操作：没有设置修改条件！\");</script>";
				return;
			}
			
			for($i=0;$i<count($this->updateArray);$i++){
				if(!$this->updateArray[$i][field]){
					echo"<script>alert(\"错误操作：参数设置不正确！\");</script>";
					return;
				}
				
				$update_query.=$this->updateArray[$i][field]." = '".$this->updateArray[$i][value]."',";
			}
			
			if($update_query){//去掉最后一个,
				$update_query=substr($update_query,0,strlen($update_query)-1);
			}
			
			$sql="update ".$this->tableName." set ".$update_query." ".$this->condition;
			$rs = &$this->conn->Execute($sql);
//			$this->executeDBNumber++;
			
			//清空数据
			$this->updateArray="";
			$this->condition="";
			return true;
		}
	}
	
	//删除记录
	function deleteRow(){
		if(!$this->error){
	
			//判断
			if(!$this->conn){
				echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
				return;
			}
			if(!$this->tableName){
				echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
				return;
			}
			
			$sql="delete from ".$this->tableName." ".$this->condition;
			$rs = &$this->conn->Execute($sql);
//			$this->executeDBNumber++;
			
			return true;
		}
	}
	
	
	
	//显示当前页及总页数,本页行数和总行数
	function getPageRow(){
		if(!$this->conn){
			echo"<script>alert(\"错误操作：没有连接数据库！\");</script>";
			return;
		}
		if(!$this->tableName){
			echo"<script>alert(\"错误操作：没有设置数据表！\");</script>";
			return;
		}
		$sql="select * from ".$this->tableName." ".$this->condition;
		
		//总记录数
		$crs = &$this->conn->Execute($sql);
//		$this->executeDBNumber++;
		$this->totalRow = $crs->RecordCount();
		
		if($this->maxRow){
			$this->totalPages=ceil($this->totalRow/$this->maxRow); 
			$this->currentPage=$this->OffSet/$this->maxRow+1; 
		}
		if($this->totalPages==0)$this->totalPages=1;
		if($this->currentPage==0)$this->currentPage=1;
//		$tmp="<div align=center>第".$this->currentPage."页/共".$this->totalPages."页 本页记录数：".$this->pageRow."/总记录数：".$this->totalRow."</div><br>\n";
		$tmp = array("currentPage" => $this->currentPage, "totalPages" => $this->totalPages, "pageRow" => $this->pageRow, "totalRow" => $this->totalRow); 
		return $tmp;
	} 

}	//end BiaoCommon class
?>