Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

[Resolvido] Consulta da erro mas executa assim mesmo

Recommended Posts

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

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

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

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

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

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

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

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

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

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

×

Informação importante

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