Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho os seguintes select box:
Data inicial <Select box> // Listagem de datas
Data final <Select box> // Listagem de datas
Status <Select box> // Listagem dos status (1,2,3...
Nome marcador <Select box> // Listagem do nome das pessoas que efetuaram a marcação
Cidade <Select box> // Cidade do cliente
Botão filtrar
Após ir marcando os select's box's e clicar em filtrar, deveria mostrar os dados de acordo com o filtro, porém fazendo uma conta rápida vi que terei que fazer 5! (fatorial) de if's, pois a pessoa pode filtrar as 5 opções, pode filtrar apenas 2 'campos', pode filtrar nenhum e assim vai. Teria alguma forma de tornar esses filtros menos chatos de serem feitos?
>
Cara eu gosto de fazer da seguinte forma..
<?php
$busca = "";
if ($_GET["cidade"] != "") {
if ($busca == "") {
$busca = "WHERE cidade='".$_GET["cidade"]."'";
} else {
$busca .= " AND cidade='".$_GET["cidade"]."'";
}
}
if ($_GET["data_inicio"] != "") {
if ($busca == "") {
$busca = "WHERE data>='".$_GET["data_inicio"]."'";
} else {
$busca .= " AND data>='".$_GET["data_inicio"]."'";
}
}
if ($_GET["data_final"] != "") {
if ($busca == "") {
$busca = "WHERE data<='".$_GET["data_final"]."'";
} else {
$busca .= " AND data<='".$_GET["data_final"]."'";
}
}
$sql = "SELECT * FROM tabela $busca";
?>
Muito obrigado, hora nenhuma passou por minha cabeça essa resolução de ir concatenando.
<?php
$criteriosPossiveis = Array('cidade', 'dataInicio', 'dataFim');
$criteriosEscolhidos = Array();
for ($criteriosPossiveis as $criterio) {
if (!empty($_POST[$criterio])) {
$criteriosEscolhidos[] = sprintf('%s="%s"', $criterio, $_POST[$criterio]);
}
}
echo implode(' AND ', $criteriosEscolhidos);
Cara eu gosto de fazer da seguinte forma..