Ir para conteúdo

Arquivado

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

Jeovane Carvalho

Fazer um select no banco de dados com um array

Recommended Posts

 

 

 

Olá senhores (as) boa tarde, estou tentando, fazer uma consulta no banco e extrair dados filtrados vindos de um array de uma combobox por exemplo:

 

$MySQLi->query ("SELECT i.id, b.bairro,c.cidade,t.tipo_nome FROM  imoveis i LEFT JOIN bairros b ON  (b.id=bairro)LEFT JOIN cidades c ON  (c.id=cidade)LEFT JOIN tipos t ON  (t.id=tipo_nome) WHERE i.ativo='1' AND i.tipo='".$tipo."' AND i.cidade='".$id_cidade."' AND i.bairro='".$id_bairro."'" ORDER BY id DESC")

 

Notem que na última concatenação ( $id_bairro ) é aonde eu recebo o array que por exemplo , lá na combo que desenvolvi se o usuário escolher 2 bairros , ele irá vir assim (id1, id 2) ..

Aí dentro do SELECT iria ficar no id_bairro=1,2, e sei que isso é errado eu já divide a variável com implode separando com vírgula , mas da erro e a consulta não aparece na tela, mas se o usuário escolher apenas uma opção bairro ela chega corretamente, somente com array que estou tendo dificuldade de buscar a consulta. 

E para ficar bem esclarecido, eu preciso que, com esse array id1, id2 , buscar essas 2 consultar e não todas do banco..

 

Desde já agradeço a ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi bem, basta você usar a clausura in no lugar de
 

$id_barro = "1,2,3"; // Você ira usar o implode, como disse que já fez para obter isso.
 

$MySQLi->query ("SELECT i.id, b.bairro,c.cidade,t.tipo_nome 
FROM  imoveis i 
LEFT JOIN bairros b ON  (b.id=bairro)
LEFT JOIN cidades c ON  (c.id=cidade)
LEFT JOIN tipos t ON  (t.id=tipo_nome) 
WHERE i.ativo='1' 
AND i.tipo='".$tipo."' 
AND i.cidade='".$id_cidade."' 
AND i.bairro in($id_bairro)  
ORDER BY id DESC");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, EdCesar disse:

Se entendi bem, basta você usar a clausura in no lugar de
 

$id_barro = "1,2,3"; // Você ira usar o implode, como disse que já fez para obter isso.
 


$MySQLi->query ("SELECT i.id, b.bairro,c.cidade,t.tipo_nome 
FROM  imoveis i 
LEFT JOIN bairros b ON  (b.id=bairro)
LEFT JOIN cidades c ON  (c.id=cidade)
LEFT JOIN tipos t ON  (t.id=tipo_nome) 
WHERE i.ativo='1' 
AND i.tipo='".$tipo."' 
AND i.cidade='".$id_cidade."' 
AND i.bairro in($id_bairro)  
ORDER BY id DESC");

 

EdCesar Obrigado por responder , eu já tinha tentado usar o IN, mas tinha usado sem tirar o sinal de igual = , estou no trampo e vou tentar isso quando chegar em casa depois da facu, eu rodei a net inteira mas não encontrei nenhum tópico ou tutorial com alguém com este mesmo problema que tenha sido solucionado, vou ver se consigoda maneira que você disse..

Os outros selects tbm irão vir com arrays , só que se eu resolver esse já consigo manipular os demais, vou tentar e posto se conseguir a solução aqui... 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, Jeovane Carvalho disse:

EdCesar Obrigado por responder , eu já tinha tentado usar o IN, mas tinha usado sem tirar o sinal de igual = , estou no trampo e vou tentar isso quando chegar em casa depois da facu, eu rodei a net inteira mas não encontrei nenhum tópico ou tutorial com alguém com este mesmo problema que tenha sido solucionado, vou ver se consigoda maneira que você disse..

Os outros selects tbm irão vir com arrays , só que se eu resolver esse já consigo manipular os demais, vou tentar e posto se conseguir a solução aqui... 

Pow cara valew mesmo pela ajuda, resolveu um dos meus problemas de consultar dados de um array, e consegui resgatar os dados , agora só falta resolver a paginação dinâmica (sem reload) na página, pois ela não pega o resto da busca mas isso já foi de grande ajuda..

Eu consegui resolver uns casos mais complexos e as vezes por causa de uma vírgula ou parênteses a gente se mata .. Valew...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opá eu ouvi o termo "(sem reload)" ???

 

Fica a dica ai:

https://github.com/gabrieldarezzo/desafiosInternos/tree/master/ajax#guia-definitivo-ajax

 

Não esquece de validar essas informações no implode...

Até algo simples assim:

<?php

$bairros = array('1', '2', '3');

$bairros_tratados = array();
foreach($bairros as $bairro){
	$bairros_tratados[] = intval($bairro);
}

print implode($bairros_tratados, ','); // string '1,2,3' (length=5)

é melhor q nada.

 

 

 

Ou algo mais elegante usando prepared statment

http://stackoverflow.com/questions/3703180/a-prepared-statement-where-in-query-and-sorting-with-mysql

 

 

Entenda o motivo:

http://php.net/manual/pt_BR/security.database.sql-injection.php

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 18/04/2017 at 09:46, gabrieldarezzo disse:

Opá eu ouvi o termo "(sem reload)" ???

 

Fica a dica ai:

https://github.com/gabrieldarezzo/desafiosInternos/tree/master/ajax#guia-definitivo-ajax

 

Não esquece de validar essas informações no implode...

Até algo simples assim:


<?php

$bairros = array('1', '2', '3');

$bairros_tratados = array();
foreach($bairros as $bairro){
	$bairros_tratados[] = intval($bairro);
}

print implode($bairros_tratados, ','); // string '1,2,3' (length=5)

é melhor q nada.

 

 

 

Ou algo mais elegante usando prepared statment

http://stackoverflow.com/questions/3703180/a-prepared-statement-where-in-query-and-sorting-with-mysql

 

 

Entenda o motivo:

http://php.net/manual/pt_BR/security.database.sql-injection.php

 

Cara valew , eu uso uma paginação dinâmica e consegui resolver meu outro  problema , mas tenho outro que é de java script  que não consigo enviar várias variáveis, mas jpa abri outro tópico https://forum.imasters.com.br/topic/557904-enviar-várias-variáveis-para-php-dentro-do-java-script/#comment-2225892

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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