Ir para conteúdo

POWERED BY:

Arquivado

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

Loid

Avaliação de Class..

Recommended Posts

Ola galera Imaster, gostaria que os gurus do forum descem uma olhada na minha class de conexão com bd e paginação tem um exemplo de uso, gostaria que falassem os defeitos e vantagens abordadas e deixo para caso algun iniciante queira usar.

 

O exemplo possui html para os iniciantes como eu virem que o menu paginação pode ser impresso independente da ordem no html, isso depende do css mas a query com os campos devem ser instanciados antes é claro.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

<style type="text/css">

<!--

#apDiv1 {

position:absolute;

left:343px;

top:168px;

width:1px;

height:4px;

z-index:1;

}

#apDiv2 {

position:absolute;

left:605px;

top:86px;

width:369px;

height:224px;

z-index:1;

}

#apDiv3 {

position:absolute;

left:605px;

top:25px;

width:368px;

height:54px;

z-index:2;

}

-->

</style>

</head>

 

<?php

/**

* @author Jefferson Alves Pereira

* @copyright 2008

*/

class model{

 

 

#-- tratar perfis como objetos --

protected $host = '127.0.1';

protected $pass = 'qwerty';

protected $user = 'root';

private $tabela;

private $linkdb;

protected $database;

var $consulta;

var $query;

var $campo;

var $coluna ='';

var $anterior;

var $proxima;

var $numeracao;

 

 

 

 

 

 

 

public function __construct(){

 

$this->conecta();

 

 

}

 

 

protected function conecta(){

$this->linkdb = mysql_pconnect($this->host,$this->user,$this->pass) or die ("Falha ao estabelecer dados com o link.".mysql_error());

return $this->linkdb;

}

 

 

 

public function SetQuery($database){

$base = explode('|', $database, -1);

$this->tabela = mysql_select_db($base[0],$this->linkdb) or die ('Falha na tentativa de estabelecer consulta.'.mysql_error());

$this->query = mysql_query( $base[1].' '.$base[2].' '.$base[3],$this->linkdb) or die ('Falha na requisição de consulta.'.mysql_error());

return $this->query;

}

 

public function SetPrint($valor){

$this->valor = $valor;

return $this->valor;

}

public function SetLoppH($query,$row,$tag = null){

$html = explode('|',$tag,-1);

while ($loop = mysql_fetch_array($this->query)){

echo $html[0].$loop[$this->valor].$html[1];

}

}

 

 

public function SetVar($name,$value){

$this->setvar = define($name,$value,TRUE);

return $this->setvar;

}

public function SetPaginacao($query,$campos,$page = 1){

 

$this->SetQuery($query);

$lpp = $page;#exibição por páginas

$this->pagina = $_GET[pagina];

$total = mysql_num_rows($this->query);

$this->paginas = ceil($total/$lpp);

if(!isset($this->pagina)){$this->pagina = 0;}

$inicio = $this->pagina * $lpp;

 

$this->SetQuery($query."LIMIT $inicio, $lpp|");

$this->o = $this->SetQuery($query."LIMIT $inicio, $lpp|");

 

$this->rows = explode('|',$campos,-1);

$this->n = count($this->rows);

while($this->coluna = mysql_fetch_array($this->query)){

for($limite = 0;$limite<$this->n; $limite++){

echo $this->coluna[$this->rows[$limite]].' -- ';

}

}

return $this->coluna[$this->rows[$limite]];

 

}

 

public function MenuPaginacao(){

 

if($this->pagina>0){

$menos = $this->pagina -1;

$url = "$PHP_SELF?pagina=$menos";

echo "<a href=".$url.">Anterior</a>";

}

for($i=0;$i<$this->paginas;$i++){

$url = "$PHP_SELF?pagina=$i";

echo "|<a href=".$url.">$i</a>";

}

if($this->pagina<($this->paginas - 1)){

$mais = $this->pagina + 1;

$url = "$PHP_SELF?pagina=$mais";

echo "|<a href=".$url.">Próxima</a>";

}

 

}

 

}

$teste = new model;

/*?>$teste->SetVar(QUERYA,"astro|SELECT * FROM|noticias|LIMIT|");

$teste->SetVar(LIMIT,"$inicio,$lpp");

//$teste->SetLoppH($teste->SetQuery(QUERYA), $teste->SetPrint('texto'),'<br>|<br/>|');<?php */

$teste->SetVar(QUERYB,"chat|SELECT * FROM|messages|ORDER BY `messages`.`id` ASC ");

 

?>

<body>

<div id="apDiv2"> <?php $teste->SetPaginacao(QUERYB,'user|','1');

$teste->SetPaginacao(QUERYB,'id|');

$teste->SetPaginacao(QUERYB,'time|');

 

 

 

 

?>

</div>

 

<div id="apDiv3"> <?php echo $teste->MenuPaginacao(); ?> </div>

</body>

</html>

E se possível caso haja algum nivel em qual eu estou..grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dicas:

 

* classe model ?, o que é model pra voce?, procure dar nomes mais claros para sua classe, e nomes logicos

 

* coloque os dados de conexao em arquivo separado.

quando voce for configurar a conexao você nao precisa mecher na classe e sim num arquivo de config

 

* não use var, isso é obsoleto e no php6 nao vai mais existir, var era um jeito tosco do php 4 usar classes, mas ainda bem que corrigiram isso

 

* apesar do construtor ser um facilitador, prefira abrir a conexao somente na hora que for usar

 

* nao faz sentido o metodo conecta ser protected, se voce pretende deixar esse metodo ser herdado, você ja ta chamando ele no construct. com isso mesmo ele sendo private daria para acessar ele da classe herdada, usando parent

 

* tente entender direito o que a funcao pconnect, nao pense que ela é melhor em todos os casos.

 

* ja que esta usando php5, use mysqli, a função mysql esta obsoleta e ela só existe por compatibilidade do php antigo e mysql antigo

 

* crie um tratamento de erros melhor e nao or die()

 

* teste a conexao antes de sair retornando o $linkdb

 

* metod SetQuery esta muito ruim, alem da função mysql_select_db estar obsoleta, quando for usar o mysqli. nao vai usar o mysqli_select_db (por favor) = )

 

return $this->query;

* mesma coisa esta retornando $this->query, mesmo antes de testar se ela foi executada com sucesso

 

* metodo SetPrint esta errado, use __get e __set

 

* SetLoppH nem se fala, outra coisa você mistura nomes em ingles com portugues, tente padronizar suas classes, pense grande um dia você pode querer vender seus trabalhos ,e quando mlehor mais voce vai ganhar dinheiro.

 

Cara sinceramente to com preguiça de olhar o resto, mas olhando por cima ja vi muita coisa errada, da pra melhorar 100% essa classe.

 

desculpe a franqueza, sei que tem gente que nao gosta de receber criticas só elogios, mas se nao for pra ser sincero entao nem posto.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara muito obrigado mesmo, nem vazia idéia sobre estes tópicos que você citou, foi justamente para isso que postei, para receber as criticas e poder trabalha-las para melhorar meu trabalho.

 

Não tem noção o tanto que me ajudou, pensava que esta classe era o suprassumo das minas classes.

 

Obrigado, caso alguém tenha alguma outra observação favor postar.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho legal quem se interessa em aprender e sempre fazer o melhor, e não apenas só usar um codigo, copiando e colando ele

 

voce ta no caminho certo, e logo mais procure aprender sobre design pattern e singleton

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fábio! gostaria de saber se você tem algum tutorial que explica melhor o mysqli, onde foram substituidos e por qual, você explicando entendo melhor do que no manual.

 

Se ja tiver posta o link para nós amigo fazendo um favor, se não tiver ainda fico aguardando o tuto http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

Abraços http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que eu tenho uma classe mysqli no laboratorio

 

Mas explicando melhor é o seguinte

 

Antes o Mysql não existia Transaction, Store procedure, Trigger, Functions, Views, etc...

 

Coisa que ja existia no access 2.0, mas beleza, demoraram 10 anos mas em fim o Mysql criou vergonha na cara e criou um banco de dados descente.

 

Mas e ai o php ja tinha escrito todas as funções para o mysql, só que o php agora tbm precisava se atualizar para poder fazer o php funcionar com as novas funcionalidades do mysql, e que não eram poucas.

 

dai criaram mysqli, dai vem a pergunta porque simplesmente não atualizaram o mysql antigo?

 

simples por compatibilidades, eles não queriam ter a dor de cabeça de fazer isso depois ter milhares de usuarios no mundo dizendo que seus sistemas pararam de funcionar.

 

dai o mysqli ficou separado e quem pudesse usar o php5, e mysql 5 com innodb, poderia desfrutar de todos os recursos novos.

 

o mysqli ja é uma classe por isso se usa assim:

 

new mysqli("servidor", "usuario", "senha", "banco");

 

e é uma classe super completa, por isso tome cuidado na hora de montar uma classe de conexao com mysqli

Porque você acaba fazendo muita coisa a toa, ja que a classe esta completa

 

e é por isso tbm que reclamo quando vejo programadores usando php5 e mysql antigo

quem entendeu ate aqui, tbm vai achar estranho quando ver classes php5 usando mysql antigo = )

 

só que ai entra outro detalhe, muitos começam a usar mysqli de forma errada, como falei ela é uma classe super completa o pessoal pega ela e usa em modo estrutural

 

para conectar basta:

 

new mysqli("servidor", "usuario", "senha", "banco");

 

mas o pessoal insisti no erro e usa do jeito antigo

 

mysqli_connect("servidor", "usuario", "senha");

mysqli_select_db("banco");

 

alias outro erro do php foi ter criar uma função para selecionar o banco, mas no php5 eles corrigiram isso.

mas tem gente que nao percebeu e continua usando = )

 

o php 5 esta caminhando para uma linhagem padrao mundial, ou seja ela acaba sendo semelhante a muitas outras linguagens.

 

leia sobre o assunto

 

http://br2.php.net/manual/en/mysqli.query.php

 

outra coisa muito importante com mysqli existe mais segurança, mas para isso o pessoal tem que parar de programar de forma antiga e começar a prender coisas novas uma delas é sempre passar os dados do select por parametro

isso evita sql injection

 

http://br2.php.net/manual/en/mysqli.prepare.php

 

e por fim trabalhar com transaction

 

http://br2.php.net/manual/en/mysqli.commit.php

 

muita gente usa isso só porque achou mais bonito

 

mas só use esse metodo se for inserir muitos registros ao mesmo tempo, isso garante que nao havera falhas

 

ou seja imagine que voce queira migrar um banco de dados para outro

 

usando commit, você pode migrar tudo se houver alguma falha no meio do caminho voce cancela tudo e volta, sem sujeira e sem traços no banco novo.

 

bom expliquei muito superficialmente, mas com o tempo voces vao pegando o jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew Fábio!!!

 

muito útil as dicas...

 

Vou estudar mysqli já que sou novato na área, e partir para o novo padrão do php

 

Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com certeza PDO é bem melhor pra mysql do que o proprio mysqli, mas pra quem ta querendo melhorar de mysql pra mysqli ja esta no caminho certo.

 

ja encontrei varios servidores que não dão suporte ao PDO, por isso sempre recomendo o locaweb que nao tem erro

 

eu indicaria ADODB para quem quer começar a manipular varios bancos de dados, digo isso pra iniciantes, quem ja manja pode partir para PDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como falei depende do que você precisa fazer a classe mysqli ja esta pronta e nao precisa refazer outra

 

mas sempre é bom fazer para aprender e entender como funciona

 

depois recomendo usar um framework que ja tem tudo isso pronto e padronizado.

 

um framework sempre vai ser melhor que suas classes, por mais que voce seja bom, o framework conta com uma comunidade inteira pra ajudar fora os programadores responsaveis pra atualizar ela, e aquele ditado varias cabeças pensam melhor que uma.

 

e como no exemplo do Zend muitos programadores tem experiencia em outras linguagens, como java e dot net, e sempre trazem novidades, correções e atualizações para o framework.

 

agora criar um framework sem ser pra estudo, só achando que ta fazendo algo melhor que um framework de mercado, pra mim é perca de tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo então seria aprender a roda para não faze-la virar quadrado....

 

Então o certo seria acabar migrando para frameworks, claro de acordo com as necessidades.

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.