Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Gostaria que vcs avaliassem uma class que desenvolvi....
Preciso de opiniões de como melhorar... etc...
Segue:
PAGINA connectar_mysql.class.php
<?PHP#-------------------------------------##CONECTA no MYSQL##--------------------------------------#AUTOR: Richard Daros#CONTATO: richard@sistemasphp.com.br#DATA: 11/08/2006#FUNCIONALIDADES:[code]#Class Abre uma conexão com o Banco de Dados Mysql e Logo quando Instanciada...#ATRIBUTOS DA CLASS:# var $servidor_db ="localhost";//nome do Servidor ou IP, dns.. Geralmente é localhost# var $usuario_db ="";//nome do Usuario# var $senha_db ="";//nome do DB# var $banco_dados_db ="";//nome do DB# var $conecta;//variavel de conexão//-----------------------------METODOS-------------------------------------///#function DB(){ FAZ CONEXÃO COM BANCO DE DADOS#function executarSql($SQL) EXECUTA UM COMANDO SQL #function insertSql($TABELA,$arrCAMPOS,$consCampo,$condSelectWhere){ faz insert na tabela... se o atributo $consCampo tiver com um valor diferente de vazio faz a consulta na tabela para ver se ja existe o registro se existir não grava , se não existir grava... esse atributo pode ser omitido. colocando '' vazio... se tiver mais de um campo pode colocar no atributo $condSelectWhere AND ou OR caso contrario coloque '' vazio#function updateSql($TABELA,$arrCAMPOS,$camposWhere) faz update na tabela o atributo $camposWhere não pode ser omitido... se tiver mais de um campo no atributo $camposWhere é obrigatorio colocar no AND ou OR no atributo $condicaoWhere caso não tenha mais de um campo pode colocar na $condicaoWhere '' vazio#function excluirSql($TABELA,$arrCAMPOS,$campoWhere){ deleta um array de registros ou apenas um registro #//----------------------------FIM DOS METODOS-----------------------------///class DB{ var $servidor_db ="localhost";//nome do Servidor ou IP, dns.. Geralmente é localhost var $usuario_db ="root";//nome do Usuario var $senha_db ="";//nome do DB var $banco_dados_db ="teste_libs_richard";//nome do DB var $conecta;//variavel de conexão//--------------------------- METODO PARA CONECTAR NO BANCO DE DADOS ------------------------------ function DB(){ // tenta fazer conexão if(@$this->conecta = mysql_pconnect($this->servidor_db,$this->usuario_db,$this->senha_db)){// conexão persistente $resultado = mysql_select_db($this->banco_dados_db,$this->conecta);//seleciona o banco if(!$resultado){ $retorno = '0';//retorna 0 se der erro de conexão echo" Erro ao Conectar: ".mysql_error($this->conecta); }else{ $retorno = $this->conecta; } }else{//caso não consiga fazer conexão $retorno = "0";//retorna 0 se der erro de conexão echo" Verifique se os dados de conexão estão corretos..... "; } return($retorno); }//---------------------- FIM DO METODO QUE FAZ CONEXÃO COM BANCO DE DADOS ------------------------//----------------------- METODO PARA EXECUTAR SQL ----------------------------------------------- function executarSql($SQL){ //SQL é o camando sql para executar com mysql_query $retorno = mysql_query($SQL,$this->conecta); if(!$retorno){ echo" Erro ao tentar executar o Select = ".mysql_error($this->conecta); $retorno = '0'; } return($retorno); }//-----------------------FIM DO METODO PARA EXECUTAR SQL -------------------------------------//----------------------- METODO PARA INSERIR UMA LINHA NA TABELA--------------------------- function insertSql($TABELA,$arrCAMPOS,$consCampo,$condSelectWhere){ //$TABELA nome da tabela que vai fazer o insert // $arrCAMPOS array com campos para fazer insert //$consCampo nome do campo para pesquizar caso aja um registro igual ja cadastrado não cadastra outro.. pode conter mais de um campo ...caso queira colocar mais de um campo separe o campo por virgula exempl: insertSql('nome_tabela','arraydeCamposParaInsert','campo1,campo2,'); //$condSelectWhere condição para fazer a consulta.. pode ser AND ou OR if($retornos = $this->executarSql("SHOW COLUMNS FROM $TABELA")){//consulta as colunas existentes na tabela $contador01 = 0;//zera o contador while ($contador01 < mysql_num_rows($retornos)){ $nome_coluna = mysql_fetch_row($retornos);//pega os campos da tabela $campos[$nome_coluna[0]] = $nome_coluna[0];//grava os nomes dos campos em um array $contador01++;//soma 1 ao contador }//-------------------------------------começa a consulta ------------------------------------- @$cons_campos = explode(",",$consCampo);//divide os dados passados em array @$conta_campos = count($cons_campos);//conta quantos dados tem no array //print_r($cons_campos); if( $conta_campos > 1 ){// caso o contador seja maior que 1 começa a montar o select $select = "SELECT * FROM $TABELA WHERE ";//começa a montar o select for( $i = 0; $i < $conta_campos; $i++){//faz um for para continuar montando o select foreach($arrCAMPOS as $chave10 => $valor10){// compara o campo do array com o campo que foi passado pelo form if($chave10 == $cons_campos[$i]){//se o campo do array for igual ao campo da consulta adiciona no select $select .= $cons_campos[$i]."='".$valor10."' $condSelectWhere ";//gera o resto do select }//fim do if }//fim do foreach }// fim do for $select = substr($select, 0, (strlen($select)-4));// corta o ultimo AND ou OR //echo $select;//exibe o select na tela $resultc = $this->executarSql($select);// faz a consulta @$result_cons = mysql_num_rows($resultc);//pega o numero de linhas que tiver }elseif($consCampo!=""){ $select = "SELECT * FROM $TABELA WHERE ";//começa a montar o select //echo $cons_campos[0]; foreach($arrCAMPOS as $chave10 => $valor10){// compara o campo do array com o campo que foi passado pelo form if($chave10 == $cons_campos[0]){//se o campo do array for igual ao campo da consulta adiciona no select $select .= $cons_campos[0]."='".$valor10."'";//gera o resto do select }//fim do if } //echo $select;//exibe o select na tela $resultc = $this->executarSql($select);// faz a consulta $result_cons = mysql_num_rows($resultc);//pega o numero de linhas que tiver }else{ $result_cons = '0'; }//--------------------------------------fim da consulta -------------------------------------- if($result_cons!=0){//verifica se o registro ja existe echo '<script language="javascript" type="text/javascript"> <!-- alert("Este Registro Já Existe!!!"); //--> </script>'; }else{ $sql = "INSERT INTO $TABELA VALUES(";//começa o sql do insert foreach( $campos as $chave1 => $valor1){//pega os atributos de um campo de uma tabela.... exemplo nome.. etc //echo $chave1."<br>";// para visualizar oque tem em mysql_fetch_assoc foreach($arrCAMPOS as $chave2 => $valor2){ //echo $key2."<br>"; if($chave2==$chave1){// quando o nome de um campo da tabela for igual ao campo de um formulario grava no sql o valor do campo $sql .="\"$valor2\",";//adiciona os valores na para inserção } } } $sql{(strlen($sql)-1)} = ");";//apaga o ultimo caractere //echo $sql;// para visualizar oque tem no sql. $resultado = $this->executarSql($sql); if($resultado){//em caso de sucesso echo '<script language="javascript" type="text/javascript"> <!-- alert("Registro cadastrado com Sucesso!!!"); window.location="'.$_SERVER['PHP_SELF'].'?id='.mysql_insert_id().'"; //--> </script>'; }else{// em caso de erro echo '<script language="javascript" type="text/javascript"> <!-- alert("Não foi possível Inserir o Registro no Banco de Dados!!!"); //--> </script>'; } } return($resultado); } }//-----------------------FIM DO METODO NSERIR UMA LINHA NA TABELA---------------------------//----------------------- METODO PARA FAZER UPDATE EM UMA LINHA NA TABELA---------------------- function updateSql($TABELA,$arrCAMPOS,$camposWhere,$condicaoWhere){ // $TABELA nome da tabela que será feito o Update // $arrCAMPOS array de campos que vai fazer o update //$camposWhere campos que vai no WHERE do update .. obs: tem que estar separados por virgula(,) exemplo: "campo1,campo2" // $condicaoWhere condição para fazer o update... AND ou OR essa condição vai na parte WHERE if($retornos = $this->executarSql("SHOW COLUMNS FROM $TABELA")){ $contador01 = 0;//zera o contador while ($contador01 < mysql_num_rows($retornos)){ $nome_coluna = mysql_fetch_row($retornos);//pega os campos da tabela $campos[$nome_coluna[0]] = $nome_coluna[0];//grava os nomes dos campos em um array $contador01++;//soma 1 ao contador } //print_r($campos); $sql = "UPDATE $TABELA SET ";//começa o sql do insert foreach( $campos as $chave1 => $valor1){//pega os atributos de um campo de uma tabela.... exemplo nome.. etc //echo $chave1."<br>";// para visualizar oque tem em mysql_fetch_assoc foreach($arrCAMPOS as $chave2 => $valor2){ //echo $chave2."<br>"; if($chave2==$chave1){// quando o nome de um campo da tabela for igual ao campo de um formulario grava no sql o valor do campo $sql .=" $chave1='".$valor2."',";//adiciona os valores na para inserção } } }// $sql{(strlen($sql)-1)} = " ";//apaga o ultimo caractere //echo $sql;// para visualizar oque tem no sql.//-------------------------------------começa a Parte WHERE ------------------------------------- @$cons_campos = explode(",",$camposWhere);//divide os dados passados em array @$conta_campos = count($cons_campos);//conta quantos dados tem no array //print_r($cons_campos); if( $conta_campos > 0 ){// caso o contador seja maior que 1 começa a montar o select $sql .= " WHERE ";//começa a montar o select for( $i = 0; $i < $conta_campos; $i++){//faz um for para continuar montando o select foreach($arrCAMPOS as $chave10 => $valor10){// compara o campo do array com o campo que foi passado pelo form if($chave10 == $cons_campos[$i]){//comentario de cima //echo $chave10; $sql .= $cons_campos[$i]." = '".$valor10."' $condicaoWhere ";//gera o resto do select }//fim do if }//fim do foreach*/ }// fim do for $sql = substr($sql, 0, (strlen($sql)-4));// corta o ultimo AND ou OR que ta na variavel $condicaoWhere $sql .=" LIMIT 1"; //echo $sql;//exibe o select na tela }elseif($consCampos!=""){ foreach($arrCAMPOS as $chave10 => $valor10){// compara o campo do array com o campo que foi passado pelo form if($chave10 == $cons_campos[$i]){//comentario de cima //echo $chave10; $sql .= " WHERE ";//começa a montar o select $sql .= $cons_campos." = '".$valor10."' LIMIT 1 ";//gera o resto do select }//fim do if }//fim do foreach*/ } $resultc = $this->executarSql($sql);// faz a consulta//--------------------------------------fim da consulta -------------------------------------- if(mysql_affected_rows()>0){//em caso de sucesso echo '<script language="javascript" type="text/javascript"> <!-- alert("Registro Alterado com Sucesso!!!"); window.location="'.$_SERVER['PHP_SELF'].'?id='.$_POST['id'].'"; //--> </script>'; }else{// em caso de erro echo '<script language="javascript" type="text/javascript"> <!-- alert("Não foi possível Alterar o Registro!!!"); //--> </script>'; } return($resultado); }else{ echo '<script language="javascript" type="text/javascript"> <!-- alert("Erro no Where do Update!!!"); //--> </script>'; } }//-----------------------FIM DO METODO UPDATE UMA LINHA NA TABELA---------------------------//----------------------- METODO PARA DELETAR UMA LINHA NA TABELA--------------------------- function excluirSql($TABELA,$arrCAMPOS,$campoWhere){ #atributo $TABELA nome da tabela #$arrCAMPOS um array com os ids dos quegistros que vai excluir ou uma string com apenas um registro para excluir #$campoWhere campo que vem depois do where... este campo é que vai ser excluido.. if( $campoWhere == 1 && count($arrCAMPOS) > 1){// para funcionar o delete o campo $campoWhere tem que ter um valor foreach($arrCAMPOS as $chave11 => $valor11){//lista o array que vai ser excluido if($valor11!="" && $chave11 == $campoWhere){ $select = "DELETE FROM $TABELA WHERE ";//começa a montar o sql $select .= $campoWhere."='".$valor11."' LIMIT 1 ";//gera o resto do sql //echo $select;//exibe o select na tela $resultc = $this->executarSql($select);// executa o sql } } }else{ $select = "DELETE FROM $TABELA WHERE ";//começa a montar o sql $select .= $campoWhere."='".$arrCAMPOS."' LIMIT 1 ";//gera o resto do sql //echo $select;//exibe o select na tela $resultc = $this->executarSql($select);// executa o sql } if(mysql_affected_rows()>0){//em caso de sucesso echo '<script language="javascript" type="text/javascript"> <!-- alert("Registro Excluído com Sucesso!!!"); //--> </script>'; }else{// em caso de erro echo '<script language="javascript" type="text/javascript"> <!-- alert("Não foi possível Excluir o registro o Registro no Banco de Dados!!!"); //--> </script>'; } }//-----------------------FIM DO METODO DELETE UMA LINHA NA TABELA---------------------------}?>
Tabela mysql
CREATE TABLE cadastro ( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(100) NULL, email VARCHAR(100) NULL, telefone VARCHAR(20) NULL, PRIMARY KEY(id));
PAGINA formulario.php
<?include("connectar_mysql.class.php");?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Untitled Document</title></head><body><?$cDB = new DB();if($_POST['id']!="" && $_POST['nome']!=""){//faz o update $cDB->updateSql('cadastro',$_POST,'id','AND');}elseif($_POST['nome']!="" && $_POST['id']==""){//faz o insert $cDB->insertSql('cadastro',$_POST,'nome,email','AND');}if($_GET['id']!= ""){ $cons = $cDB->executarSql("SELECT * FROM cadastro WHERE id='".$_GET['id']."'"); $linha = mysql_fetch_array($cons);}?><form action="" method="post"> <p>Nome : <input name="nome" type="text" id="nome" value="<?=$linha['nome']?>"/> <br /> E-mail : <input name="email" type="text" id="email" value="<?=$linha['email']?>"/> <br /> Telefone: <input name="telefone" type="text" id="telefone" value="<?=$linha['telefone']?>" /> </p> <p> <input type="submit" value="Submit" /> <input type="hidden" name="id" value="<?=$linha['id']?>"/> <input type="reset" value="Reset" /> </p></form></body></html>
Aguardo a ajuda de vcs.... Abraços
então fera,
Essa classe, provavelmente deu um trabalinho pra fazer ... mas eu creio que algumas coisas ainda não estão de acordo, vou listar em tópicos para facilitar a visualização e entendimento:
- Use poo do php5, ou seja, trabalhe com encapsulamento, definindo a visibilidade dos métodos;
- Use mysqli ou pdo;
- Seria interessante você definir os atributos, host, usuario, senha, e etc por algum construtor;
- não tive a oportunidade de ler todo o código, tem muita coisa ... Seria mais interessante você ter postado 2 métodos por vez, mas beleza ... bom, eu vi que tu tem uns métodos la, aonde você lista as colunas da tabela, e de acordo com uma string passada por parametro (outro erro tb, passa um array logo oras!) você insere ou atualiza os registros. Isso não é muito viável cara, como eu ja citei anteriormente, passa o array entre parametros contendo o nome das colunas e os respectivos valores, exemplo $arr = array("Coluna1"=>"valor1");
e depois usa um foreach ...
tem muita coisa faltando ainda cara ... as funções de retorno do banco, você não as tornou um método de sua classe ... exemplo: método fecth_row
public function fecth_row(){return mysql_fecth_row($this->query)}; //só um exemplo.pois todos esses métodos são pertinentes a classe que você usa para abstração com o banco de dados ...
Outra, tem uns javascript ali no meio cara, tb não é muito legal atribuir esse tipo de função a esta classe ...
Da uma lida em MVC, DAO, frameworks ... é uma boa hora para você começar a aprender ... alias, sempre é uma boa hora para começar a aprender, basta se esforçar !! ehehhehe
Como dizia um professor meu do curso técnico : - Requisitos minimos para ser um programador:
um olho, um dedo e boa vontade !!!
hehehehe
[]'s
O Void ja falou tudo que eu poderia falar, mas para fechar eu recomendo fazer um tratamento de erros para garantir que sua classe funcione 100%
e livre de falhas
Escolhi um método e vou comentar alguns pontos:
var $servidor_db ="localhost";//nome do Servidor ou IP, dns.. Geralmente é localhost var $usuario_db ="root";//nome do Usuario var $senha_db ="";//nome do DB var $banco_dados_db ="teste_libs_richard";//nome do DB var $conecta;//variavel de conexãoSe você usa PHP5 acostume-se a não usar "var" para declarar variáveis. Opte por public, protected ou private. A senha do DB, por exemplo, geralmente é encriptada. Prefira:
private $senha_db = "";
]//--------------------------- METODO PARA CONECTAR NO BANCO DE DADOS ------------------------------ function DB(){Novamente, se você usa PHP5 o nome da função construtora é _construct.
// tenta fazer conexão if(@$this->conecta = mysql_pconnect($this->servidor_db,$this->usuario_db,$this->senha_db)){// conexão persistente $resultado = mysql_select_db($this->banco_dados_db,$this->conecta);//seleciona o banco if(!$resultado){ $retorno = '0';//retorna 0 se der erro de conexão echo" Erro ao Conectar: ".mysql_error($this->conecta);Esse erro não é ao conectar, mas sim ao selecionar o BD. Isso faz diferença pois quando você não consegue conectar a um banco de dados, é pq ou o servidor caiu ou pq usuário/senha não conferem. Se o erro é na seleção do BD, provavelmente é erro de permissão (GRANT).
}else{ $retorno = $this->conecta; } }else{//caso não consiga fazer conexão $retorno = "0";//retorna 0 se der erro de conexão echo" Verifique se os dados de conexão estão corretos..... "; }Outra coisa, quando dá qualquer erro, você está retornando 0 e mostrando uma mensagem. O problema é q a mensagem é mostrada e o script continua a rodar. Um erro de conexão é um erro grave, deve parar o script para não mostrar outras mensagens de erro, como "is not a valid resource" ou coisas desse tipo.
Se tiver tempo/paciência, leia:
Avaliação http://forum.imasters.com.br/public/style_emoticons/default/seta.gif PHP