Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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...**>
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... **>
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...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
Entenda o motivo:
http://php.net/manual/pt_BR/security.database.sql-injection.php
>
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
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
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");