Ir para conteúdo

POWERED BY:

Arquivado

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

mruoppolo

Problema com busca

Recommended Posts

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

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.php
http://php.net/manual/pt_BR/function.isset.php

Filtros de Entradas

http://php.net/manual/pt_BR/function.filter-input.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×

Informação importante

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