Filters with PHP - Search Form

Asked

Viewed 1,222 times

4

How could I make a filter like that from the example image?

The part the tables with the data and SELECT to fetch is quiet. What I’m suffering from is how to build PHP code for this, maybe someone has a way for me to learn how to make these filters.

I’m learning this language yet, I’ve searched on this subject but I haven’t found anything very enlightening, especially something that helps in the first steps.

inserir a descrição da imagem aqui

ESTRUTURA DO BANCO:

    TABELA ATIVIDADES
    -COD_ATIVIDADE
    -CODOPERADOR_ATIVIDADE
    -NOME_ATIVIDADE
    -DATAINICIO_ATIVIDADE
    -DATAFIM_ATIVIDADE
    -STATUS_ATIVIDADE

    TABELA OPERADORES
    -COD_OPERADOR
    -NOME_OPERADOR


    **EXEMPLO DE CÓDIGO DE RESULTADO:**
<?php


session_start();
$Act = $_GET['act'];


if(isset($Act)){

if($Act == "filtraratv"){
$status = trim($_POST['STATUS_ATIVIDADE']);   
$operador = trim($_POST['CODOPERADOR_ATIVIDADE']);
$dataini = $_POST['DATAINICIO_ATIVIDADE'];
$datafim = ($_POST['DATAFIM_ATIVIDADE']);


if(file_exists("../../config.php")) {
    require "../../config.php";     
} else {
    echo "Arquivo config.php nao foi encontrado";
    exit;
}

if(!function_exists("Abre_Conexao")) {
    echo "Erro o arquivo config.php foi auterado, nao existe a função Abre_Conexao";
    exit;
}
Abre_Conexao();
$busca = mysql_query("select * from atividades WHERE status_atividade ='$status'");
$row = mysql_num_rows($busca);
    if ($row==0) {
        echo "Não há dados";
    } 
    else {
        wwhile($l = mysql_fetch_array($busca)) {
            $status   = $l["STATUS_ATIVIDADE"];
            echo "<option value=\"$status\">STATUS: $status</option>\n";
        }
    }


}
}

?>

NOTE: RETURN CODE: When it executes with some condition (Filter) that does not satisfy the search is displaying the message that has been displayed:"No results found with these criteria", but when it executes a search that exists result, only a blank page appears...

  • It would be good to put the mysql database structure

  • I just put the tables and main fields.. In the example filter could also have the field ACTIVITY NAME.

  • Managed to make?

  • What you tried to do?

  • I couldn’t do it, but I’ll turn around here. And when I found out I set the example here in case someone needs it, not to be on hand!

  • It is very easy to do this, just elaborate an SQL for display. With SQL you can do the rest?

  • 1

    @Tiagoib Posted an answer, see if it meets your need.

  • @Andrébaill posted the Return Code for the filters, and even then it doesn’t work (Returns blank page or the message that no result was found), give a look.

  • @Andrébaill This way is very wrong? My last attempt, if not I will try to research other ways.

Show 4 more comments

3 answers

4

According to the database mentioned above, I believe that whatever you would like to do, as selecting or filling the data, will mount SQL to run.

// STATUS
if(isset($_POST['STATUS_ATIVIDADE'])) $STATUS_ATIVIDADE = "AND STATUS_ATIVIDADE = '".$_POST['STATUS_ATIVIDADE']."'"; else $STATUS_ATIVIDADE = "";

// OPERADOR
if(isset($_POST['COD_OPERADOR'])) $COD_OPERADOR = "AND CODOPERADOR_ATIVIDADE = '".$_POST['CODOPERADOR_ATIVIDADE']."'"; else $COD_OPERADOR = "";

// DATA_INICIO
if(isset($_POST['DATA_INICIOATIVIDADE'])) $DATA_INICIOATIVIDADE = "AND DATA_INICIOATIVIDADE = '".$_POST['DATA_INICIOATIVIDADE']."'"; else $DATA_INICIOATIVIDADE = "";

// DATA_FIM
if(isset($_POST['DATA_FIMATIVIDADE'])) $DATA_FIMATIVIDADE = "AND DATA_FIMATIVIDADE = '".$_POST['DATA_FIMATIVIDADE']."'"; else $DATA_FIMATIVIDADE = "";

// CONSULTA

$SQL = mysql_query("
    SELECT 
        *
    FROM
        ATIVIDADES AS C1
    WHERE 
        C1.COD_ATIVIDADE != '' 
        {$STATUS_ATIVIDADE} 
        {$COD_OPERADOR} 
        {$DATA_INICIOATIVIDADE} 
        {$DATA_FIMATIVIDADE}
") or print mysql_error();

while($row=mysql_fetch_array($sql)){
    echo "Atividade: ".$row['NOME_ATIVIDADE']."<br>";   
}

Try to elaborate that way.

  • Yes, it’s right there. I’ll try here to see, but it’s in this sense where as the options will be the result shown.

  • Okay, no problem, take the test. anything question.

  • I posted the return code for the filters, and even then it doesn’t work (Returns blank page or the message that no result was found), take a look.

  • You can’t use in the same query, doing that neither you did to put AND x AND y... you have to add as I showed you in the example, so that the scritp understands which field was filled

  • What I need to repeat is the part of the query only?

2


I got it that way:

<?php
error_reporting(0);
ini_set(“display_errors”, 0 );

$status = isset($_POST['status_atividade']) ? $_POST['status_atividade'] : '';
$operador = isset($_POST['codoperador_atividade']) ? $_POST['codoperador_atividade'] : '';
$dataini1 = isset($_POST['datainicio1_atividade']) ? $_POST['datainicio1_atividade'] : '';
$dataini2 = isset($_POST['datainicio2_atividade']) ? $_POST['datainicio2_atividade'] : '';
$datafim1 = isset($_POST['datafim1_atividade']) ? $_POST['datafim1_atividade'] : '';
$datafim2 = isset($_POST['datafim2_atividade']) ? $_POST['datafim2_atividade'] : '';

if(file_exists("../config.php")) {
    require "../config.php";        
} else {
    echo "Arquivo config.php nao foi encontrado";
    exit;
}

if(!function_exists("Abre_Conexao")) {
    echo "Erro o arquivo config.php foi auterado, nao existe a função Abre_Conexao";
    exit;
}
Abre_Conexao();
    $getatividades = 
    "SELECT * FROM atividades INNER JOIN operadores on cod_operador = codoperador_atividade WHERE cod_atividade > 0 ";

    if (strcmp(trim($status), "") != 0) { 
        $getatividades .= "AND status_atividade = '$status' ";
    }

    if (strcmp(trim($operador), "") != 0) { 
        $getatividades .= "AND codoperador_atividade = '$operador' ";
    }

    //Data Inicial Entre
    if ((strcmp(trim($dataini1), "") != 0) && (strcmp(trim($dataini2), "") != 0)) { 
        $getatividades .= "AND datainicio_atividade between '$dataini1' and '$dataini2' ";
    }
    else if (strcmp(trim($dataini1), "") != 0) { 
        $getatividades .= "AND datainicio_atividade >= '$dataini1' ";
    }
    else if (strcmp(trim($dataini2), "") != 0) { 
        $getatividades .= "AND datainicio_atividade <= '$dataini2' ";
    }

    //Data Fim Entre
    if ((strcmp(trim($datafim1), "") != 0) && (strcmp(trim($datafim2), "") != 0)) { 
        $getatividades .= "AND datafim_atividade between '$datafim1' and '$datafim2' ";
    }
    else if (strcmp(trim($datafim1), "") != 0) { 
        $getatividades .= "AND datafim_atividade >= '$datafim1' ";
    }
    else if (strcmp(trim($datafim2), "") != 0) { 
        $getatividades .= "AND datafim_atividade <= '$datafim2' ";
    }

    //Aqui
    $getatividadesquery = mysql_query($getatividades) or die(mysql_error());
    if (!$getatividadesquery) {
        echo "Não foi possível executar a consulta ($getatividadesquery) no banco de dados: " . mysql_error();
        exit;
    }

    if (mysql_num_rows($getatividadesquery) == 0) {
        echo "Não foram encontradas linhas, nada para mostrar, assim eu estou saindo";
        exit;
    }


    while($linha = mysql_fetch_assoc($getatividadesquery)) {
        echo '<tr>';
        echo '<td>'. $linha['STATUS_ATIVIDADE'] .'</td>';
        echo '<td>'. $linha['NOME_ATIVIDADE'] .'</td>';
        echo '<td>'. $linha['NOME_OPERADOR'] .'</td>';
        echo '<td>'. $linha['DATAINICIO_ATIVIDADE'] .'</td>';
        echo '<td>'. $linha['DATAFIM_ATIVIDADE'] .'</td>';
        echo '</tr>';
    }



?>

Worked!!

  • Great! It was just the way I suggested, just adapted! :)

  • 1

    Ball Show @Andrébaill

2

From what I understand, you want to show the data searched.

Let’s go to a possible answer:

$busca=mysql_query("select * from Atividades");
$row = mysql_num_rows($query);

if ($row==0) {
    echo "Não há dados";
} else {
    while ($dados = mysql_fect_array($query) {
        echo "Nome: ". $dados['nomeDocampoNaTabelaAtividades'];
    }
}

You want to filter the data, for example: sort by id, name, etc. That would then be paging.

Or do you just want to return all the data in an array and display it your way? For example, display by list, table, etc.

Actually, I still don’t get it.

  • This would be in list form. Just display the result.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.