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.517 ]

 


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

Removendo o som de discagem do wvdial

Instalando Google Chrome no Fedora 40

Como criar um pacote.tgz com o executável do Lazarus [vídeo]

Sem permissões suficientes para executar /usr/sbin/pppd?

mysqldump - Unknown table 'COLUMN_STATISTICS' in ... [Resolvido]

Leitura recomendada

Documentando seus programas PHP

Entenda a metodologia ágil Scrum

PHP - Utilizando Chainning

Depurando com o PHP

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

  

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