Loid 0 Denunciar post Postado Dezembro 1, 2008 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
Fabyo 66 Denunciar post Postado Dezembro 1, 2008 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
Loid 0 Denunciar post Postado Dezembro 2, 2008 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
Fabyo 66 Denunciar post Postado Dezembro 2, 2008 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
Williams Duarte 431 Denunciar post Postado Dezembro 2, 2008 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
Fabyo 66 Denunciar post Postado Dezembro 2, 2008 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
Williams Duarte 431 Denunciar post Postado Dezembro 2, 2008 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
eibon 2 Denunciar post Postado Dezembro 2, 2008 Por praticidade e outras questões prefiro manipular o banco de dados com os Php Data Objects (PDO) ao usar essas extensões/funções especificas para cada banco de dados. Leia sobre em: http://www.php.net/manual/pt_BR/book.pdo.php Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 2, 2008 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
Loid 0 Denunciar post Postado Dezembro 3, 2008 Mas o ideal é criar as próprias classes ou usar algo já pronto, modelado? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 3, 2008 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
Loid 0 Denunciar post Postado Dezembro 3, 2008 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