Parâmetros Faltando em Requisições GET? Aqui Está a Solução
Resumo Rápido
Para reter parâmetros de requisição da URL ao enviar um formulário usando o método GET, você precisa usar campos ocultos no formulário. Abaixo está um exemplo de como fazer isso:
<form action="http://exemplo.com" method="get">
<input type="hidden" name="parametroFixo" value="valorFixo" /> <!-- Este valor permanece inalterado, assim como meu amor por programação -->
...
<input type="submit" /> <!-- Vamos lá! -->
</form>
Assim, você pode manter tanto os parâmetros fixos quanto os parâmetros inseridos pelo usuário na URL.
Garantindo um Envio de Formulário Eficiente Usando GET
Integrando Parâmetros de Requisição em Campos Ocultos do Formulário
Ao enviar um formulário usando o método GET, o navegador pode remover parâmetros da string de consulta da URL fornecida na ação. Para evitar isso, use campos de entrada ocultos:
<form action="http://exemplo.com/resultados" method="get">
<!-- Suponha que a URL inicial fosse ?pesquisa=html&filtro=recentes -->
<input type="hidden" name="pesquisa" value="html" /> <!-- Parâmetros de pesquisa permanecem inalterados -->
<input type="hidden" name="filtro" value="recentes" /> <!-- Filtros são preservados -->
<!-- Outros elementos do formulário podem estar aqui -->
<input type="submit" /> <!-- Aperte para enviar -->
</form>
Precauções – O Perigo Está em Todo Lugar
Para se proteger contra ataques XSS (cross-site scripting), você deve escapar os valores dos parâmetros antes de usá-los nos campos ocultos do formulário. Em PHP, você pode fazer isso com a função htmlspecialchars():
<?php
$valor = htmlspecialchars($_GET["param"], ENT_QUOTES, 'UTF-8'); // Protegendo o conteúdo do campo oculto
echo "<input type='hidden' name='param' value='${valor}' />";
?>
Manipulando Parâmetros de URL no Lado do Servidor
O script do servidor deve manipular corretamente strings de consulta codificadas na URL. Para criar uma string de consulta a partir de um array e analisar os parâmetros de requisição para construir campos ocultos no formulário em PHP, use as funções http_build_query()
e explode()
, respectivamente.
Visualização
Enviar um formulário usando GET pode ser comparado a enviar um cartão postal:
Endereço no cartão postal (📩): [SeuURL.com/pesquisa]
Mensagem no cartão postal (📝): [query=stack+overflow]
Uma vez que você o coloque na caixa de correio (🚀), pode ter certeza de que a mensagem (string de consulta) será entregue ao endereço indicado:
Cartão postal enviado (📬): [SeuURL.com/pesquisa?query=stack+overflow]
Lembre-se de que no momento de enviar o formulário, a URL especificada na ação (ou seja, o endereço no cartão postal) se conecta com a string de consulta (a mensagem no cartão postal). 📬✨
Vantagens de Usar Formulários com o Método GET
Adicionando Dados do Formulário à URL da Ação
Nos navegadores que suportam HTML5, todos os dados inseridos no formulário são anexados à URL especificada no atributo de ação. Como resultado, a string de consulta inicial pode desaparecer.
Codificação Percentual de Caracteres Especiais
Se você precisar incluir um ponto de interrogação ou outros caracteres especiais na URL especificada na ação, é aconselhável usar a codificação percentual de URL. Isso ajuda os navegadores a interpretar corretamente a URL. A codificação percentual mínima necessária de caracteres especiais ajuda a manter uma URL limpa.
Parâmetros de Requisição no Método POST
Os formulários enviados usando o método POST também podem incluir uma string de consulta na URL da ação. No entanto, ao contrário do GET, o método POST envia dados no corpo da requisição HTTP em vez de na URL.
Tenha Cuidado!
- 👀 Os navegadores podem remover strings de consulta: Não confie apenas no navegador para preservar a string de consulta na URL especificada na ação.
- 🐞 Assunções em scripts do servidor: Certifique-se de que seus scripts manipulam corretamente os parâmetros, independentemente de onde estejam localizados – seja na URL ou em campos ocultos do formulário.
- 🛡️ Segurança é primordial: Sempre escape dados de entrada para prevenir ataques XSS, não importa a origem deles.