Carcleo 4 Denunciar post Postado Março 27, 2012 Pessoal. Tenho o codigo abaixo que contem uma div que contem uma consulta sql para exibir imoveis. Acontece que o while dessa consulta, embora esteja executando e retornando os dados normalmente, esta mostrando erro. Segue o código:(erro na linha 92) <div id="apresenta_imóveis_dados"> <table cellpadding="0" cellspacing="0" border="1"> <?php foreach ($imoveis as &$value) { ${$sql_busca_imovel_string.$value}= " select imoveiscadastrovenda.id_imovel, imoveiscadastrovenda.bairro_imovel, (select fotos.nome_fotos from fotos where fotos.id_imovel_fotos = imoveiscadastrovenda.id_imovel limit 1) as foto from imoveiscadastrovenda where imoveiscadastrovenda.imovel_tipo_imovel=$value and imoveiscadastrovenda.baixa_imovel='n' group by imoveiscadastrovenda.id_imovel limit 0,5 "; ${$sql_busca_imovel.$value}=$MySQL->query(${$sql_busca_imovel_string.$value}); if(mysql_num_rows(${$sql_busca_imovel.$value})==0) { echo "<tr><td align='center' height='150px'>Não há imóveis cadastrados para esta pesquisa</td></tr>"; } else { echo "<tr>"; /*linha 92*/ while(list(${$id_imovel.$value}, ${$bairro_imovel.$value}, ${$foto.$value}) = mysql_fetch_row(${$sql_busca_imovel.$value})) { echo "<td align='center' height='150px'>${$bairro_imovel.$value}<br>${$foto.$value}</td>"; } echo "</tr>"; } } ?> </table> </div> Veja o erro acontecendo em: http://www.dinamicaimoveis.com.br/novo Obs.: Só acontece no sevidor web. No localhost, não dá o erro. Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Março 27, 2012 nao esta dando erro em localhost pq esta com display_errors em off online ele esta executando outra consulta, e mostrando o resultado dela foreach ($imoveis as &$value) ja dentro deste foreach, a consulta nao esta sendo valida, ae ele reclama q o resource passado pelo $Mysq->query(); retornou boolean, ou seja, esta com erro sua sql...você fez uma classe q nao faz tratamento de erro, dae você nunca sabera q erro tera no banco de dados... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 27, 2012 Pois é. Mas, porque mesmo assim ele exibe o resultados de forma correta? Aqui, acertei local para display_errors=On e ele disparou um monte de erros que ja concertei quase todos. "ja dentro deste foreach, a consulta nao esta sendo valida, ae ele reclama q o resource passado pelo $Mysq->query(); retornou boolean, ou seja, esta com erro sua sql" Como arrumar isso? A única forma que arranjei de criar um nome para uma variavel que seja a junção de nomes de duas outras variaveis foi assim: ${$var1.$va2}. Alguma saida? Na discriçao do erro, ele exibe o nome da variavel criada sem a adição do valor da variavel $value. Como corrigir isso? Estaria chamando a variavel criada de forma errada? Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Março 27, 2012 pega akela sql e joga no pgpmyadmin pra ver o erro, o ideal eh sua classe retornar o erro, mas ela nao faz isso... por exemplo, ( e sinceramente nao sei pq esta usando classe numa programacao estruturada) no estruturado fazemos isto $q = mysql_query(...sql...) or die(mysql_error()); no OO fazemos isto try{ $db->query(...sql...); }catch(Exception $e) { echo $e->getMessage(); } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 27, 2012 Sobre a classe, voce acharia melhor chamar direto os comandos mysql_.......a usar classes? Seria isso? Sabe Igor, mexo com programaçao por Hobby. Então, não sei muita coisa. Qualquer orientação sobre OO ou estruturada será muito bem vinda. Consegui juntar dois nomes de variaveis diferentes para formar o nome da terceira variavel e chama-la. É assim: ${"id_imovel".$value}, Ou seja ${"AQUI_VAI_O-NOME_DA_VARIAVEL_A_SER_CRIADA_SEM_O_$".aqui_vai_o_nome_da_variavel_a_ser_adicionada_com_o_$}, O codigo; <div id="apresenta_imóveis_dados"> <table cellpadding="0" cellspacing="0" border="1"> <?php foreach ($imoveis as &$value) { ${"sql_busca_imovel_string".$value}= " select imoveiscadastrovenda.id_imovel, imoveiscadastrovenda.bairro_imovel, (select fotos.nome_fotos from fotos where fotos.id_imovel_fotos = imoveiscadastrovenda.id_imovel limit 1) as foto from imoveiscadastrovenda where imoveiscadastrovenda.imovel_tipo_imovel=$value and imoveiscadastrovenda.baixa_imovel='n' group by imoveiscadastrovenda.id_imovel limit 0,5 "; print ${"sql_busca_imovel_string".$value}."<p>"; ${"sql_busca_imovel".$value}=$MySQL->query(${"sql_busca_imovel_string".$value}); if(mysql_num_rows(${"sql_busca_imovel".$value})==0) { echo "<tr><td align='center' height='150px'>Não há imóveis cadastrados para esta pesquisa</td></tr>"; } else { echo "<tr>"; while(list(${"id_imovel".$value}, ${"bairro_imovel".$value}, ${"foto".$value}) = mysql_fetch_row(${"sql_busca_imovel".$value})) { echo "<td align='center' height='150px'>${"bairro_imovel".$value}<br>${"foto".$value}</td>"; } echo "</tr>"; } } ?> </table> </div> Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Março 27, 2012 como você meche programacao por hobby, sim eu prefiro q mecha com estruturado a oo...trocar o mysql oo por mysql estruturado, você vai ter um controle de erros maior, tem sempre q colcoar essas funcoes q retornan erros, pq se tiver eles vao t dizer, ae você vai ter q consertar... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 27, 2012 Minha classe de conexão é essa abaixo: Na verdade, eu tambem(por hobby) programo em Delphi. Lá, eu uso os formularios visuais para adicionar os elementos ao form. É isso que voce chama de OO? Minha classe de conexão php/mysql é essa: <? class TMySQL { var $soquete; function connect($host,$db,$user,$pass) { $this->host = $host; $this->db = $db; $this->user = $user; $this->pass = $pass; $this->soquete=mysql_connect($this->host,$this->user,$this->pass); mysql_set_charset("utf8", $this->soquete); if (!$this->soquete) { echo "Não foi possível conectar-se ao Bando de Dados MySQL"; } else { if (!mysql_select_db($this->db,$this->soquete)) { echo "Banco de dados não encontrado"; } } } function query ($string) { $myquery = mysql_query($string,$this->soquete); if (!$myquery) { echo "Erro na consulta da query!<br>" . $string; } else { return $myquery; } } function num_rows(){ return mysql_num_rows( $this->query ); } } ?> <? $host = "localhost"; $db = ""; $user = ""; $pass = ""; $MySQL = new TMySQL(); $MySQL->connect($host, $db, $user, $pass); ?> Alguma orientação de alteração? Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Março 27, 2012 sim, larga esta classe e use o mysqli, da pra usar como estruturado e oo, dae na hora de usar você faz assim //eu costumo usar ela com estruturado para projetos pequenos, colocou num arquivo e dou include //arquivo de include $db = new mysqli('host','user','pass','db'); //arquivo onde sera usada try{ //tente, ous eja, tentara executar este bloco $q = $db->query("select * from usuarios where idusuarios={$_GET['id']}"); while($result = $q->fetch_object())//pode ser fetch_array tb { echo "{$result->idusuarios} - {$result->username}"; } }catch(Exception $e) // ou lancar uma excecao, e ira mostrar o erro { echo $e->getMessage();//mostra o erro.. } eh a melhor solucao q posso lhe dar mas se pretende continuar com sua classe function query ($string) { $myquery = mysql_query($string,$this->soquete); if (!$myquery) { echo "Erro na consulta da query!<br>" . $string; } else { return $myquery; } troque para function query ($string) { $myquery = mysql_query($string,$this->soquete) or die(mysql_error()); if (!$myquery) { echo "Erro na consulta da query!<br>" . $string; } else { return $myquery; } perceba q você esta usando estruturado dentro de suas classes, isso nao eh OO, OO tem principios e conceitos, estruturado você simplesmente joga o codigo la... outra coisa o $this-> você usa quando ker transferir dados de um metodo para outro, se vai usar dentro do mesmo metodo nao tem necessidade de $this-> ... $this->host = $host; $this->db = $db; $this->user = $user; $this->pass = $pass; Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 27, 2012 Deixa eu ver se entendi direito: O arquivo conexão.php terá apenas <?php $host = "localhost"; $db = "dimoveis_dinamica"; $user = "dimoveis_dinamic"; $pass = "carcleo"; $db = new mysqli($host,$user,$pass,$db); ?> Incluido onde for usado, será usado, para cada query, assim: <?php //arquivo onde sera usada try{ //tente, ous eja, tentara executar este bloco $q = $db->query("select * from usuarios where idusuarios={$_GET['id']}"); while($result = $q->fetch_object())//pode ser fetch_array tb { echo "{$result->idusuarios} - {$result->username}"; } }catch(Exception $e) // ou lancar uma excecao, e ira mostrar o erro { echo $e->getMessage();//mostra o erro.. } ?> ?> E dento do comando try eu coloco as consultas. É isso mesmo? Igual a gente faz no Delphi? Teria como tornar esse bloco uma função? Como? Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Março 28, 2012 nao eu sei programar em delphi, por isso nao posso dizer q eh igual, mas sim, dessa forma ae q eu faço, sim da pra transforma rem funcao sim, o problema eh como você vai pegar os dados depois...e usa-los, ali foi um simples while, pode ser q precise de um for em alguns casos, depende muito da aplicacao... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 29, 2012 Obrigado. Assim deu certo. Compartilhar este post Link para o post Compartilhar em outros sites