Considere este formulário:
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
Ao enviar este formulário (um formulário GET), os parâmetros aeb estão desaparecendo. Existe uma razão para isso? Existe uma maneira de evitar esse comportamento?
Respostas:
Não é para isso que servem os parâmetros ocultos ...?
Eu não contaria com nenhum navegador mantendo nenhuma string de consulta existente no URL da ação.
Conforme as especificações ( RFC1866 , página 46; seção 17.13.3 do HTML 4.x ):
Talvez alguém possa codificar por cento o URL da ação para incorporar o ponto de interrogação e os parâmetros e depois cruzar os dedos para esperar que todos os navegadores deixem esse URL como ele (e validam que o servidor também o entende). Mas eu nunca confiaria nisso.
A propósito: não é diferente para campos de formulário não ocultos. Para POST, o URL da ação pode conter uma string de consulta.
fonte
No HTML5, esse é um comportamento por especificação.
Consulte http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm
Veja "4.10.22.3 Algoritmo de envio de formulário", etapa 17. No caso de um formulário GET para um URI http / s com uma string de consulta:
Portanto, seu navegador lixeira a parte "? ..." existente do seu URI e a substitui por uma nova com base em seu formulário.
No HTML 4.01, a especificação produz URIs inválidos - a maioria dos navegadores ainda não fez isso.
Consulte http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 , etapa quatro - o URI terá um? anexado, mesmo que já contenha um.
fonte
?
URL de ação é removido? Então, o que é, se o parâmetro GET no URL da ação contiver o destino, onde o formulário deve ser processado? gosto:action="index.php?site=search"
. Não tenho certeza, se colocar o parâmetro GET em campos de entrada ocultos é uma ideia divina.O que você pode fazer é usar um foreach simples na tabela que contém as informações GET. Por exemplo, em php:
fonte
Você deve incluir os dois itens (a e b) como elementos de entrada ocultos e também C.
fonte
Location:
redirecionamento do servidor, se você não desejar nenhuma interação com o usuário final. .Eu tive um problema muito semelhante ao da ação do formulário, algo como:
O botão levaria o usuário ao site, mas as informações da consulta desapareceram para que o usuário chegasse à página inicial em vez da página de conteúdo desejada. A solução no meu caso foi descobrir como codificar a URL sem a consulta que levaria o usuário à página desejada. Nesse caso, meu alvo era um site do Drupal, pelo que
/content/something
também funcionou. Eu também poderia ter usado um número de nó (ie/node/123
).fonte
Se você precisar de uma solução alternativa, como esse formulário pode ser colocado em sistemas de terceiros, use o Apache mod_rewrite da seguinte maneira:
seu novo formulário ficará assim:
e o Apache anexará o terceiro parâmetro à consulta
fonte
Sua construção é ilegal. Você não pode incluir parâmetros no valor da ação de um formulário. O que acontece se você tentar isso dependerá das peculiaridades do navegador. Eu não ficaria surpreso se funcionasse com um navegador e não com outro. Mesmo que parecesse funcionar, eu não confiaria nele, porque a próxima versão do navegador pode mudar o comportamento.
"Mas digamos que eu tenha parâmetros na string de consulta e nas entradas ocultas, o que posso fazer?" O que você pode fazer é corrigir o erro. Para não ser brincalhão, mas isso é um pouco como perguntar: "Mas digamos que meu URL use sinais de porcentagem em vez de barras, o que posso fazer?" A única resposta possível é que você pode corrigir o URL.
fonte
Isso é uma resposta à postagem acima da Efx:
Se o URL já contiver o var que você deseja alterar, ele será adicionado novamente como um campo oculto.
Aqui está uma modificação desse código para impedir a duplicação de vars no URL:
fonte
altere o método de solicitação para 'POST' em vez de 'GET'.
fonte
Eu costumo escrever algo como isto:
Isso está funcionando, mas não se esqueça de higienizar suas entradas contra ataques XSS!
fonte