Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera estou apanhando um pouco para a lógia ao fazer um SELECT no bd.
o problema é o seguinte, tem por volta de 8 campos de busca, onde o usuario pode prencher todos, apenas 1 ou2, ou nenhum (onde aparecerá todos os dados).
Logo, uma tabema assim Nome, Bairro, estado_civil. o nome pode filtrar somene nome ou nome e bairro ou todos os campos entenderam? o negócio é que existem 8 mais opções de filtro da informação.
a principio tentei dessa forma
"SELECT * FROM usuarios WHERE (nome '%". $_POST['buscaNome'] . "%' OR bairro like '%". $_POST['buscaBairro'] . "%' OR estado_civil '%". $_POST['buscaEstadoCIvil'] . "%'ORDER BY ID"
porem dessa forma se a acondição de BuscaNome for true, o select não filtra os outros campos. Outra coisa que me intrifa é se o usuario não colocar nada em "bairro" a busca não acha nada qndo é para selecionar todos.
Como posso fazer um select de multiplos variaveis?A Lógica eu entendi, masa na pratica eu declaro o array $Data com os meus campos e as variaveis e depois chamo a funcao search na instrução sql?!?!?! assim ?
<?php
$Data = array( 'userName' => '$_POST['buscaNome']',
'userBairro' => '$_POST['buscaBairro']',
'campo3' => '///',
'campo4' => 'abc',
'campo5' => 'def',
'campo6' => 'ghi',
'campo7' => '123'
);
echo sprintf( 'SELECT * FROM `tabela` WHERE %s', search( $Data ) );Não precisa não amigo, você pode mandar o $_POST diretamente na função, ela já faz o serviço todo pra você
dessa forma:
<?php
echo sprintf( 'SELECT * FROM `tabela` WHERE %s', search( $_POST ) );
mais lembre que o 'name' dos seus inputs no html tem que ser o nome do campo no banco de dados
>
Não precisa não amigo, você pode mandar o $_POST diretamente na função, ela já faz o serviço todo pra você
dessa forma:
<?php
echo sprintf( 'SELECT * FROM `tabela` WHERE %s', search( $_POST ) );
mais lembre que o 'name' dos seus inputs no html tem que ser o nome do campo no banco de dados
hummmm, Muito boa a ajuda! Resolvido! :clap:
Okay, mais agora, vejo que na sua SQL 'do primeiro post', você usa o 'LIKE', caso você queira mudar, é só alterar:
$sql[ $i ] = sprintf( 'OR %s = %s', $fields[ $i ], $values[ $i ] );
para:
$sql[ $i ] = sprintf( 'OR %s LIKE \'%s%s%s\'', $fields[ $i ], '%', $values[ $i ], '%' );
;)>
Okay, mais agora, vejo que na sua SQL 'do primeiro post', você usa o 'LIKE', caso você queira mudar, é só alterar:
$sql[ $i ] = sprintf( 'OR %s = %s', $fields[ $i ], $values[ $i ] );
para:
$sql[ $i ] = sprintf( 'OR %s LIKE \'%s%s%s\'', $fields[ $i ], '%', $values[ $i ], '%' );
;)
só para conhecimentos, qual seria a diferença, visto que ambos funcionam?
ah, troquei o operador 'OR' pelo 'AND' logo se usuario preencher 2 campos ex.: user: igor cidade: SP escreverá apenas linha que contenham user: Igor e cidade: SP (refinamento de busca).
agora to tentando fazer uma condição que ser todos os campos for vazios selecionar tudo senão passa a fazer a função... mas não funfou
<?php
if (empty($_POST){
"select * from 'tabela'";
}
else
{
//função feita acima
} ?>
para fazer esse tipo de busca, no qual os campos podem ser adicionados a qualquer momento, aqui funcionou, veja bem:
Perceba também que na função, temos um cast de números, e strings, justamente para impedir que haja variação
na pesquisa, o resultado foi:
SELECT * FROM
tabelaWHEREcampo1= '---' ORcampo2= '***'OR
campo3= '///' ORcampo4= 'abc' ORcampo5= 'def'OR
campo6= 'ghi' ORcampo7= 123Você pode reduzir o número de campos intencionalmente, como o usuário desejar, basta você enviar pelo primeiro
parametro da função a variável $_POST, lembrando que cada índice do array $_POST deve ser o nome do campo no MySQL
outro exemplo seria uma redução de campos, o OR no SQL não muda, independente da situação, se tiver mais de 1
campo ou 1 item no POST, será adicionado um OR, se tiver somente um, seria a condição definitiva para consulta
veja bem:
Saída:
SELECT * FROM
tabelaWHEREcampo1= '---'com 2 campos:
saída: