Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

guilherme014

classes extendidas com a de banco de dados

Recommended Posts

tenho esta classe de comexao como banco de dados.

 

<?php   class db{	   public $query = "";	   public $db = "";	   public $_id;//se for alteração ou deletação virá valores	   public $_array;//deve ser uma array com os cammpos a serem alterados	   public $_verifica;//deve vir a array com o campo do banco e o valor do input	   public $_deletar;//deve vir a array com as tabelas que devem ser procuradas antes de deletar	   function __CONSTRUCT(){		   global $glob;		   $this->db = mysql_connect($glob['dbhost'], $glob['dbusername'], $glob['dbpassword']);		   if (!$this->db) die ($this->debug(true));		   $selectdb = @mysql_select_db($glob['dbdatabase']);		   if (!$selectdb) die ($this->debug());		   return $this->db;	   }	   public function select($query, $maxRows=0, $pageNum=0){		   $this->query = $query;		   if($maxRows>0){			   $startRow = $pageNum * $maxRows;			   $query = sprintf("%s LIMIT %d, %d", $query, $startRow, $maxRows);		   }		   $result = mysql_query($query, $this->db) or die (mysql_error());		   if ($this->error()) die ($this->debug());		   $output=false;		   for ($n=0; $n < mysql_num_rows($result); $n++){			   $row = mysql_fetch_assoc($result);			   $output[$n] = $row;		   }		   return $output;	   }	   public function misc($query) {		   $this->query = $query;		   $result = mysql_query($query, $this->db);		   if ($this->error()) die ($this->debug());		   if($result == TRUE){			   return TRUE;		   } else {			   return FALSE;		   }	   }	   public function numrows($query) {		   $this->query = $query;		   $result = mysql_query($query, $this->db);		   return mysql_num_rows($result);	   }	   public function paginate($numRows, $maxRows, $pageNum=0, $pageVar="page", $class="", $fixo=""){		   global $lang;		   $navigation = "";		   $totalPages = ceil($numRows/$maxRows);		   $queryString = "";		   if (!empty($_SERVER['QUERY_STRING'])) {			   $params = explode("&", $_SERVER['QUERY_STRING']);			   $newParams = array();			   foreach ($params as $param) {				   if (stristr($param, $pageVar) == false) {					   array_push($newParams, $param);				   }			   }			   if (count($newParams) != 0) {				   $queryString = "&" . htmlentities(implode("&", $newParams));			   }		   }		   if($totalPages> 1){			   $navigation = "";			   $upper_limit = $pageNum + 2;			   $lower_limit = $pageNum - 2;			   if ($pageNum > 0) {				   if(($pageNum - 2)>0){					   $first = sprintf("%s?".$pageVar."=%d%s".$mais, $currentPage, 0, $queryString);					   $navigation .= "<a href='".$first."' class='".$class."'>«</a> ";				   }				   $prev = sprintf("%s?".$pageVar."=%d%s", $currentPage, max(0, $pageNum - 1), $queryString);				   $navigation .= "<a href='".$prev.$mais."' class='".$class."'><</a> ";			   }			   for($i = 0; $i < $totalPages; $i++){				   $pageNo = $i+1;				   if($i==$pageNum){					   $navigation .= " <span class='$fixo'>[".$pageNo."]</span> ";				   } elseif($i!==$pageNum && $i<$upper_limit && $i>$lower_limit){					   $noLink = sprintf("%s?".$pageVar."=%d%s", $currentPage, $i, $queryString);					   $navigation .= " <a href='".$noLink.$mais."' class='".$class."'>".$pageNo."</a> ";				   } elseif(($i - $lower_limit)==0){					   $navigation .=  "<span class='$fixo'>…</span>";				   }			   }			   if (($pageNum+1) < $totalPages) {				   $next = sprintf("%s?".$pageVar."=%d%s", $currentPage, min($totalPages, $pageNum + 1), $queryString);				   $navigation .= "<a href='".$next."$mais' class='".$class."'>></a> ";				   if(($pageNum + 3)<$totalPages){					   $last = sprintf("%s?".$pageVar."=%d%s".$mais, $currentPage, $totalPages-1, $queryString);					   $navigation .= "<a href='".$last.$mais."' class='".$class."'>»</a>";				   }			   }		   }		   return $navigation;	   }	   public function insert ($tablename, $record){		   if(!is_array($record)) die ($this->debug("array", "Insert", $tablename));		   $count = 0;		   foreach ($record as $key => $val){			   if ($count==0) {				   $fields = "`".$key."`";				   if ($val == "now()")					   $values = $val;				   else					   $values = "'".$val."'";			   } else {				   $fields .= ", "."`".$key."`";				   if ($val == "now()")					   $values .= ", ".$val;				   else					   $values .= ", '".$val."'";			   }			   $count++;		   }			   $query = "INSERT INTO ".$tablename." (".$fields.") VALUES (".$values.")";		   $this->query = $query;		   mysql_query($query, $this->db);		   if ($this->error()) die ($this->debug());		   if ($this->affected() > 0)			   return true;		   else			   return false;	   }	   public function update ($tablename, $record, $where){		   if(!is_array($record)) die ($this->debug("array", "Update", $tablename));		   $count = 0;		   foreach ($record as $key => $val){			   if ($count==0)					$set = "`".$key."`"."= '".$val."'";			   else				   $set .= ", " . "`".$key."`". "= '".$val."'";			   $count++;		   }			   $query = "UPDATE ".$tablename." SET ".$set." WHERE ".$where;		   $this->query = $query;		   mysql_query($query, $this->db);		   if ($this->error()) die ($this->debug());		   if ($this->affected() > 0) return true; else return false;	   }	   public function delete($tablename, $where, $limit=""){		   $query = "DELETE from ".$tablename." WHERE ".$where;		   if ($limit!="") $query .= " LIMIT " . $limit;		   $this->query = $query;		   mysql_query($query, $this->db);		   if ($this->error()) die ($this->debug());		   if ($this->affected() > 0){ 			   return TRUE; 		   } else { 			   return FALSE;		   }	   }	   public function mySQLSafe($value, $quote="'") { //colocar "'" nas variaveis -> 'variavel'		   if (get_magic_quotes_gpc()) { 			   $value = stripslashes($value); 		   } 		   if(version_compare(phpversion(),"4.3.0")=="-1") {			   $value = mysql_escape_string($value);		   } else {			   $value = mysql_real_escape_string($value);		   }		   $value = $quote . $value . $quote; 		   return $value; 	   }	   private function debug($type="", $action="", $tablename=""){		   switch ($type){			   case "connect":				   $message = "Um Erro de MYSQL.";				   $result = mysql_errno() . ": " . mysql_error();				   $query = "";				   $output = "Não foi possível conectar ao banco de dados. Verifique com o seu administrador para ver se o local da conexão, usuário e senha do Banco de Dados estao certos.";			   break;			   case "array":				   $message = $action." Um erro ocorreu.";				   $result = "Não pode atualizar a tabela <b>".$tablename."</b> a variável deve ser uma array, entra em contato com seu Administrador.";				   $query = "";				   $output = "Ocorreu um erro ao acessar a base de dados. Esteja certo de certificar-se que seus ajustes da conexão da base de dados estejam corretos e que o usuário de MySQL também.";			   break;			   default:				   if (mysql_errno($this->db)){					   $message = "Um Erro de MYSQL.";					   $result = mysql_errno($this->db) . ": " . mysql_error($this->db);					   $output = "Ocorreu um erro ao acessar a base de dados. Esteja certo de certificar-se que seus ajustes da conexão da base de dados estejam corretos e que o usuário de MySQL também.";				   } else {					   $message = "A QUERY do MySQL executou com sucesso.";					   $result = mysql_affected_rows($this->db) . " Colunas afetadas";					   $output = "Registro de vista para detalhes.";				   }				   $linebreaks = array("\n", "\r");				   if($this->query != "")					   $query = "SQL = " . str_replace($linebreaks, " ", $this->query);				   else					   $query = "";			   break;		   }		   $output = "<b style='font-family: Arial, Helvetica, sans-serif; color: #0B70CE;'>".$message."</b>   \n<span style='font-family: Arial, Helvetica, sans-serif; color: #000000;'>".$result."</span>   \n<p style='Courier New, Courier, mono; border: 1px dashed #666666; padding: 10px; color: #000000;'>".$query."</p>\n";		   return $output;	   }	   private function error(){		   if (mysql_errno($this->db))			   return true;		   else			   return false;	   }	   public function insertid(){		   return mysql_insert_id($this->db);	   }	   public function affected(){		   return mysql_affected_rows($this->db);	   }	   public function close(){		   mysql_close($this->db);	   }    }   ?>
fiz esta classe experimental para gravar, alterar e deletar somente as unidades.

 

<?php   class unidades extends db{	   //variaveis privadas	   private $_tabela="net_unidade";	   private $deletar;	   //construção da classe	   function __CONSTRUCT(){		   parent::__CONSTRUCT();		   //se $_array e $_id vierem preenchidas pode ser uma alteração ou deletação		   if(parent::_array != "" && parent::_id != ""){			   //se só a $_array vier preenchida é alteração			   if(parent::_array != ""){				   if(parent::_id != ""){				   //Verifica sehá alguma pendencia ao deletar					   if(!$this->verificar()){				   //se não deleta a linha pedida						   $this->getAlterar();					   }				   } else {					   //verifica se há alguma mensagem de erro ao tentar gravar					   if(!$this->verificar()){						   $this->getInserir();					   }				   }			   //Se só a $_id for preenchida é alteração			   } else if(parent::_id != ""){				   //verifica se algum campo veio vazio para emitir a mensagem de erro				   if(!$this->verificar()){					   $this->getAlterar();				   }			   }		   }	   }	   //metodos privados	   private function getInserir(){		   parent::insert($this->_tabela, $this->_array);	   }	   private function getExcluir(){		   parent::delete($this->_tabela, $this->_id);	   }	   private function getAlterar(){		   parent::update($this->_tabela, $this->_array, $this->_id);	   }	   //metodos publicos	   public function verificar(){		   //se $_array e $_id vierem preenchidas pode ser uma alteração ou deletação		   if(parent::_array != "" && parent::_id != ""){			   //se só a $_array vier preenchida é alteração			   if(parent::_array != ""){				   //Verifica sehá alguma pendencia ao deletar				   foreach(parent::_verifica as $i=>$v){					   if($v == ""){						   return false;					   } else {						   return true;					   }				   }			   //Se só a $_id for preenchida é alteração			   } else if(parent::_id != ""){				   //verifica as tabelas para nao emitir uma mensagem de erro estranha				   $this->deletar = explode("-", parent::_deletar);				   foreach($this->deletar as $i=>$v){					   //a variavel $v tera o nome da tabela a ser olhada					   $sql = "SELECT * FROM $v WHERE ".parent::_id;					   if(parent::numrows($sql) > 0){						   return false;					   } else {						   return true;					   }				   }			   }		   } else {			   //verifica se há alguma mensagem de erro ao tentar gravar			   foreach(parent::_verifica as $i=>$v){				   if($v == ""){					   return false;				   } else {					   return true;				   }			   }		   }	   }   }   ?>
ta dando erro, e nao conseguir arrumar, o que pode ser ?

 

o erro é Fatal error: Undefined class '_array' in unidades.php on line 10

 

esta '_array', não é parent desta nova classe por ser extendida ?

 

grato

 

guuilherme

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas o array nao esta na primeira classe, e a segunda nao é extendida, nao teria que ser parent:: ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, eu nao sei se da pra acessar um valor de uma classe pai usando parent:: boa pergunta ;) eu nunca vi ...

 

Mas no seu caso, seguindo o conceito de OO, todos os atributos e métodos foram herdados na classe unidades, entao é possivel acessar o valor, utilizando $this ... na realidade o mais correto neste caso, seria ter métodos getArray() getX ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao entendi a questao de getArray() getX,no livro que basiei para a construção desta classe extendida, eles utilizam o parent, e nao o this, mas vou trocar aqui para ver o que da .

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que o void disse ta certo, mas vou mostrar um exemplo pra você entender melhor o uso de parent e $this

 

obs: Exemplo nada pratico só pra entendimento

<?php
class A 
{
const NOME = "Fabyo";	
public $teste;
public function exemplo1() 
{
	$this->teste = "Teste";
	echo "A:exemplo1()<br />";
}
}

class B extends A 
{
public function __construct() 
{
	parent::exemplo1();
	echo "B::exemplo2()<br />\n";		
	echo "Constante da class a acessada na classe b = " .parent::NOME."<br />";
	echo "usando \$this->= ".$this->teste."<br />";
	echo "usando parent:: = ".parent::$this->teste;
}
}
$b = new B;
?>

 

resultado:

A:exemplo1()
B::exemplo2()
Constante da class a acessada na classe b = Fabyo
usando $this->= Teste
usando parent:: = Teste

 

como pode ver da na mesma usar $this-> ou parent para acessar uma variavel de uma classe extendida

e pode ver tbm como usar uma constante dentro da classe extendida

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.