Problems when performing database search (Filtering)

0

I have a problem while performing a search in the database. I have 3 search fields, City, Neighborhood, and Product, I want the user to filter the 3 or just City / Product or City / Neighborhood, however only City / Product, City or Product works. Here is the code: I tried changing it several times however when I fix one changes the other ...

            <?php include('conexao.php');

        $verifica = 0;

        $produtos = $_GET['produto'];
        $cidades = $_GET['cidade'];
        $bairros = $_GET['bairro'];


        if(!empty($_GET['produto']) && !empty($_GET['cidade']) && !empty($_GET['bairro'])){
          $result_search = "SELECT * FROM produtos WHERE nome LIKE '%$produtos%' AND cidade LIKE '%$cidades%' AND bairro LIKE '%$bairros%'";
          $resultado_search = mysqli_query($con, $result_search);
          $verifica = mysqli_num_rows($resultado_search);
        }elseif (!empty($_GET['produto'])) {
          $result_search = "SELECT * FROM produtos WHERE nome LIKE '%$produtos%'";
          $resultado_search = mysqli_query($con, $result_search);
          $verifica = mysqli_num_rows($resultado_search);
        }elseif (!empty($_GET['cidade'])) {
          $result_search = "SELECT * FROM produtos WHERE cidade LIKE '%$cidades%'";
          $resultado_search = mysqli_query($con, $result_search);
          $verifica = mysqli_num_rows($resultado_search);
        }elseif (!empty($_GET['bairro'])) {
          $result_search = "SELECT * FROM produtos WHERE bairro LIKE '%$bairros%'";
          $resultado_search = mysqli_query($con, $result_search);
          $verifica = mysqli_num_rows($resultado_search);
        }

        if($verifica > 0){
            while($row_search = mysqli_fetch_array($resultado_search)) {
           echo ; 
        }
        }else{
           echo "Nenhum resultado encontrado.";
        }
    
asked by anonymous 10.04.2017 / 20:29

2 answers

0

You can separate each item and add the sql into a variable, so it will be easier to get the return of the sql, thus making it easier to find the error:

    $sql_produto = '';
    $sql_cidade = '';
    $sql_bairro = '';

    if(!empty($_GET['produto']))
    {
        $sql_produto = "and nome LIKE '%$produtos%'";
    }
        if(!empty($_GET['cidade']))
        {
            $sql_cidade = "and cidade LIKE '%$cidades%'";
        }
            if(!empty($_GET['bairro']))
            {
                $sql_bairro = "and bairro LIKE '%$bairros%'";
            }


        $result_search = "
            SELECT
                *
            FROM
                produtos
            WHERE
                $sql_produto
                $sql_cidade
                $sql_bairro
        ";

        $resultado_search = mysqli_query($con, $result_search);
        $verifica = mysqli_num_rows($resultado_search);

    
10.04.2017 / 21:06
0

It would be interesting to use a function:



function DBSelect($table, $params = null, $fields = '*'){ $params = ($params) ? " {$params}" : null;

$query = "SELECT {$fields} FROM {$table}{$params}"; $result=DBExecute($query); if(!mysqli_num_rows($result)){ return false; }else { while($res = mysqli_fetch_assoc($result)){ $dados[] =$res; } return $dados; } }
    
10.04.2017 / 22:29