Verificando se algum parâmetro foi passado via GET para uma página PHP sem precisar testar um a um

Publicado por Perfil removido em 21/07/2010

[ Hits: 25.816 ]

 


Verificando se algum parâmetro foi passado via GET para uma página PHP sem precisar testar um a um



É uma situação bem comum. Digamos que você tenha uma página, uma pesquisa por exemplo, para a qual você passa uma lista variável de parâmetros. Basicamente então, supomos que tenhamos passado uma lista de parâmetros semelhante a esta:

/pesquisa.php?empresa=1&departamento=2&inicial=A

Hipoteticamente com base nestes parâmetros selecionaríamos todos os funcionários da empresa 1, do departamento 2, cujo nome começa com a letra A, num sql que seria mais ou menos assim:

$sql = "SELECT * FROM funcionarios";
if (!empty($_GET['empresa'])) $sql .= " WHERE empresa = ".$_GET['empresa'];
if (!empty($_GET['departamento'])) $sql .= " AND departamento = ".$_GET['departamento'];
if (!empty($_GET['inicial'])) $sql .= " AND nome LIKE '".$_GET['inicial']."%'";

Ok, baseado no exemplo acima, vemos que o parâmetro empresa é sempre obrigatório, e que se todos os demais parâmetros necessários foram passados, então podemos fazer a pesquisa normalmente. Caso um ou outro parâmetro não seja informado nós simplesmente não incluímos ele na cláusula WHERE do SQL, mas se o empresa não for passado logicamente teremos um erro na query.

Tudo bem que o exemplo aqui traz um número pequeno de parâmetros, então é fácil fazer esta verificação um a um, e prosseguindo, caso o usuário não informe nenhum parâmetro nós não realizamos a pesquisa e retornamos para o usuário uma mensagem do tipo "Por favor, informe algum parâmetro para a pesquisa!". Como eu disse, poderíamos fazer isso assim:

if ((empty($_GET['empresa'])) && (empty($_GET['departamento'])) && (empty($_GET['inicial'])))
{
     echo "Por favor, informe algum parâmetro para a pesquisa!";
}
   else
{
   //Faz a pesquisa normalmente [...]
}

Com poucos parâmetros tudo bem, mas imaginemos que tenhamos uma lista de uns 15 parâmetros possíveis, mas nenhum deles foi passado - ficaria uma linha enorme depois do if. Porém existe um jeito melhor de fazer isso, o PHP tem um método que verifica se qualquer coisa foi passada via GET, que seja uma única letra, quer seja toda uma grande lista de parâmetros, assim faríamos:

if (empty($_SERVER['QUERY_STRING']))
{
     echo "Por favor, informe algum parâmetro para a pesquisa!";
}
  else
{
     //Faz a pesquisa normalmente [...]
}

Pronto, fica bem mais legível, e bem mais fácil de fazer.

Original no meu blog: http://pedro-araujo.com/go?100716085808

Outras dicas deste autor

Site com screencasts (pequenos vídeos) de várias distribuições

Instalando o navegador Microsoft Edge no Debian 11

Instalando plugin Java para Firefox no Debian

Compartilhando músicas para os micros da rede

Instalando Google Chrome no Ubuntu 16.04 (64 bits)

Leitura recomendada

Slack - Ferramenta de comunicação em equipe (PC, Android e iOS)

PHP - Utilizando Chainning

Entenda a metodologia ágil Scrum

Documentando seus programas PHP

Depurando com o PHP

  

Comentários
[1] Comentário enviado por reideer em 21/07/2010 - 09:30h

Achei interessante verificar a chave querystring da variável $_SERVER;
Porém hoje em dia o padrão é trabalhar com um arquivo principal (index.php) que contém parametros passados por $_GET, para redirecionar e chamar as classes desejadas. O pessoal tem chamado isto comumente de roteamento.
Digamos que tenhamos,

./index.php
./autoload.php

./src/control
./src/control/PesquisaController.class.php

./src/model/
./src/model/Funcionarios.class.php

./src/view

então passamos por get o seguinte

?control=pesquisa&act=funcionario (com url_rewrite ficaria assim: site/pesquisa/funcionario)
através de eval ou Reflection ou algum metodo gambiarristico do PHP, chamamos as classes e metodos desejados.
Então a chave querystring do $_SERVER fica com alguns parametros.


Pensando agora nisto, acho que seria interessante fazer algo assim.

(NÃO TESTEI O CÓDIGO)
class DataInput{
   public static function testaGet($parametrosDesejados){
    foreach($_GET as $key => $value){
     if(in_array($key, $parametrosDesejados))
      if($value != null && $value != ''){
       return true;
           }
    }
    return false;
   }

........


}
$parametrosDaBusca = array('empresa', 'departamento', 'inicial');

if ( ! DataInput::testaGet($parametrosDaBusca))
{
   echo "Por favor, informe algum parâmetro para a pesquisa!";
}
else
{
   //Faz a pesquisa normalmente [...]
}



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts