mruoppolo 14 Denunciar post Postado Junho 14, 2016 Olá, tudo bem? Eu tenho um sistema onde os advogados cadastram as cidades que atendem e os serviços que eles prestam e aí eu preciso ter uma busca onde o usuário pode procurar os advogados pelo serviço prestado ou cidade atendida e também pelo serviço em uma determinada cidade, pra isso eu montei a seguinte query: if( $_SERVER['REQUEST_METHOD']=='POST' ) { $where = Array(); $servico = $_POST['servico']; $cidade = $_POST['cidade']; if( $servico ){ $where[] = " intServicoID = '{$servico}'"; } if( $cidade ){ $where[] = " c.intCidadeID = '{$cidade}'"; } $query = "SELECT u.*,s.*,c.*,cc.*,e.* FROM tb_users as u inner join tb_servico_prestado as s on u.intUserID=s.intUserID inner join tb_cidade_add as c on u.intUserID=c.intUserID inner join tb_cidade as cc on u.intCidadeID=cc.intCidadeID inner join tb_estado as e on u.intEstadoID=e.intEstadoID "; if( sizeof( $where ) ) $query .= ' WHERE '.implode( ' AND ',$where ); }else{ $query = "select u.*,c.*,e.* from tb_users as u inner join tb_estado as e on u.intEstadoID=e.intEstadoID inner join tb_cidade as c on u.intCidadeID=c.intCidadeID"; } $sql = mysqli_query($conn,$query); $csql = mysqli_num_rows($sql); ?> O formulário da busca é este aqui: <form action="busca.php" method="post"> <div class="row"> <div class="col-md-3"> <div class="form-group"> <label for="">Selecione o Serviço</label> <select name="servico" id="" class="form-control"> <option value="0">Todos os Serviços</option> <?php $sql_servico = mysqli_query($conn,"select * from tb_servico order by strServicoNome asc"); while($s=mysqli_fetch_assoc($sql_servico)){ ?> <option value="<?php echo $s['intServicoID']; ?>"><?php echo $s['strServicoNome']; ?></option> <?php } ?> </select> </div> </div> <div class="col-md-3"> <div class="form-group"> <label>Selecione o Estado</label> <select name="estado" id="cod_estados" class="form-control"> <option value="0">Selecione um Estado</option> <?php $sql_estado = mysqli_query($conn,"select * from tb_estado order by strEstadoNome asc"); while($e=mysqli_fetch_assoc($sql_estado)){ ?> <option value="<?php echo $e['intEstadoID']; ?>"><?php echo $e['strEstadoNome']; ?></option> <?php } ?> </select> </div> </div> <div class="col-md-3"> <div class="form-group"> <label>Selecione a Cidade</label> <select name="cidade" id="cod_cidades" class="form-control"> <option value="">Selecione o Estado</option> </select> </div> </div> <div class="col-md-3"> <br> <button type="submit" class="btn btn-orange">Buscar</button> </div> </div> </form> Porém ele não esta funcionando, se eu filtrar diretamente pela cidade ele não encontra o usuário, mesmo que aquela cidade tenha usuário cadastrado, outro problema é que caso eu busque diretamente pelo serviço, o usuário que prestar aquele serviço (caso ele possua 3 cidades cadastradas, por exemplo) ele é mostrado 3 vezes no mesmo formulário. Como eu posso fazer esta busca? Obrigao :D Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Junho 14, 2016 Não há uma verificação se estes dados enviados está vazios ou não, use um ternário para efetuar esta verificação antes, pois da forma como está sempre vai ser true, mesmo indo vazias, nunca ira encontrar nada. E só use AND se as duas retornar TRUE e para não repetir os dados, utilize a clausula GROUP BY na coluna que está se repetindo. ... $servico = (!empty($_POST['servico']) ? $_POST['servico']: false); $cidade = (!empty($_POST['cidade']) ? $_POST['cidade']: false); if( isset( $servico ) ){ $where[] = " intServicoID = '{$servico}'"; } if( isset( $cidade ) ){ $where[] = " c.intCidadeID = '{$cidade}'"; } ... Leia mais... http://php.net/manual/pt_BR/function.empty.phphttp://php.net/manual/pt_BR/function.isset.phpFiltros de Entradas http://php.net/manual/pt_BR/function.filter-input.php Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Junho 14, 2016 Cara não funcionou não, agora o código esta assim: if( $_SERVER['REQUEST_METHOD']=='POST' ) { $where = Array(); $servico = (!empty($_POST['servico']) ? $_POST['servico']: false); $cidade = (!empty($_POST['cidade']) ? $_POST['cidade']: false); if( isset( $servico ) ){ $where[] = " intServicoID = '{$servico}'"; } if( isset( $cidade ) ){ $where[] = " c.intCidadeID = '{$cidade}'"; } $query = "SELECT u.*,s.*,c.*,cc.*,e.* FROM tb_users as u inner join tb_servico_prestado as s on u.intUserID=s.intUserID inner join tb_cidade_add as c on u.intUserID=c.intUserID inner join tb_cidade as cc on u.intCidadeID=cc.intCidadeID inner join tb_estado as e on u.intEstadoID=e.intEstadoID "; if( sizeof( $where ) ){ $query .= ' WHERE '.implode( ' AND ',$where ); } $query .= " GROUP BY u.intUserID"; }else{ $query = "select u.*,c.*,e.* from tb_users as u inner join tb_estado as e on u.intEstadoID=e.intEstadoID inner join tb_cidade as c on u.intCidadeID=c.intCidadeID GROUP BY u.intUserID"; } $sql = mysqli_query($conn,$query); $csql = mysqli_num_rows($sql); Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Junho 15, 2016 Não testei, mas acho que não tem a necessidade de usar implode, e este é o caminho, só ajustar a sua necessdidade! <?php if( $_SERVER['REQUEST_METHOD'] =='POST' ) { $servico = (!empty($_POST['servico']) ? $_POST['servico']: false); $cidade = (!empty($_POST['cidade']) ? $_POST['cidade']: false); $query = "SELECT u.*,s.*,c.*,cc.*,e.* FROM tb_users as u inner join tb_servico_prestado as s on u.intUserID=s.intUserID inner join tb_cidade_add as c on u.intUserID=c.intUserID inner join tb_cidade as cc on u.intCidadeID=cc.intCidadeID inner join tb_estado as e on u.intEstadoID=e.intEstadoID"; if( $servico !== false || $cidade !== false ){ $query .= " WHERE"; } if( $servico !== false ){ $query .= " s.intServicoID = '{$servico}'"; } if( $cidade !== false ){ if($servico !== false){ $query .= " AND"; } $query .= " c.intCidadeID = '{$cidade}'"; } $query .= " GROUP BY u.intUserID"; } else { $query = "select u.*,c.*,e.* from tb_users as u inner join tb_estado as e on u.intEstadoID=e.intEstadoID inner join tb_cidade as c on u.intCidadeID=c.intCidadeID GROUP BY u.intUserID"; } $sql = mysqli_query($conn,$query); $csql = mysqli_num_rows($sql); Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Junho 18, 2016 Valeu cara, era isso mesmo :D Compartilhar este post Link para o post Compartilhar em outros sites