Formulário de busca

Algo relativamente comum em páginas de internet e outras interfaces é o uso de formulários para busca de alguma coisa em determinada cidade em um determinado período. Os dados estão em um banco de dados, mas como fazer a busca de uma forma segura e acessível a partir de qualquer navegador web?

Tela de busca por estado/cidade e datas inicial/final, com resultado em tabela - sem CSS
Tela de busca por estado/cidade e datas inicial/final, com resultado em tabela – sem CSS

Abaixo segue um modelo usando HTML, PHP e Javascript (com jQuery e JSON) usando consulta em um banco de dados MySQL. Os códigos estão disponíveis no GitHub/busca_cidades_data.

Busca de cidade em uma lista dividida por estado

Não é indicado deixar um campo de texto livre para o usuário digitar o nome da cidade, devido a erros de digitação, nem procurar o nome em uma lista gigantesca de nomes. Uma opção muito adotada é a de escolher o estado em um lista para então abrir uma segunda lista só com os nomes das cidades desse estado.

Primeiramente, é necessário criar uma database com duas tabelas: uma com sigla e nome de estado e outra com os códigos, cidades e seu respectivo estado. O script SQL cria_tabelas.sql escolhe a database, apaga tabelas que existam com esse nome (caso existam), cria as tabelas e as popula. A lista de cidades (com UF e código IBGE) pode ser gravada em UTF-8 no arquivo cidades.csv – monte o arquivo a partir do que está disponível para download no post Informações sobre o território brasileiro.

O sinal de crase serve para evitar confusão com caracteres estranhos e palavras reservadas – por exemplo, somente é possível criar e manipular uma tabela chamada “TO” quando estiver dentro de crases. O script deve ser executado no terminal Linux do PC com o banco de dados como:

$ mysql -u USUARIO -pSENHA > cria_tabelas.sql

No PHP, primeiro é feita uma consulta ao banco de dados para montar a lista (do tipo “select”) de siglas de estados. Com a escolha, ela é usada como argumento para construir um objeto JSON com as cidades desse estado, montando assim a segunda lista. O código desse script (cidades.ajax.php) chama o arquivo “DBconn.php“, que contém as credenciais para conexão ao banco de dados.

Como os nomes das cidades foram gravados usando UTF-8, a consulta também deve usar “COLLATE utf8_general_ci”.

Essa parte foi uma adaptação dos códigos disponíveis no site do Davi Ferreira, onde a relação entre cidade e estado se dá através de um código em vez da própria sigla do estado. Para criar a tabela, foi utilizado um arquivo CSV com outros códigos de cidade, em vez de criar diretamente na rotina SQL.

Busca por data usando calendários

Dois campos de texto recebem as datas de início e término da busca, no formato “dd/mm/YYYY”. Uma aplicação jQuery monta um calendário com selects de mês e ano, além de setas de navegação, para facilitar a escolha do dia. No “head”, uma função específica para a classe “calendario” possui os nomes e siglas em português para os dias da semana e meses. Uma verificação em JavaScript coloca as datas do dia atual e três dias antes nos campos, caso não tenha recebido nenhuma variável via POST ou GET.

Resultados da busca ao banco de dados (formulário)

Um formulário HTML enviar a cidade, data de início e data final de busca em três variáveis de sessão via POST – tanto o envio quanto o recebimento acontecem no mesmo arquivo (busca_cidades.php). O PHP recebe as variávaies “estado”, “cod_cidade”, “start_date” e “end_date”, sendo que as datas devem ser tratadas para mudar para o formato “YYYY-mm-dd” presente no banco de dados. Montada a query para consulta, basta realizar a consulta e imprimir linha a linha o resultado em uma tabela HTML construída no própriio código PHP.

Compartilhe :)

5 comments

  1. header( ‘Cache-Control: no-cache’ );
    header( ‘Content-type: application/xml; charset=”utf-8″‘, true );

    include(“arquivos/DBconn.php”);
    $dbname=”edcarlos”;
    $link = connectToDB($dbname) or die(‘Não foi possível conectar ao banco de dados.’);

    $sigla = mysql_real_escape_string( $_REQUEST[‘sigla’] );
    $cidades = array();
    $sql = “SELECT cod_cidades, nome
    FROM cidades
    WHERE sigla='”.$sigla.”‘
    ORDER BY nome COLLATE utf8_general_ci;”;
    $res = mysql_query($sql);
    while ( $row = mysql_fetch_assoc( $res ) ) {
    $cidades[] = array(
    ‘cod_cidades’ => $row[‘cod_cidades’],
    ‘nome’ => $row[‘nome’],
    );
    }

    echo( json_encode( $cidades ) );

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.