radiobutton - w3schools html radio checked




enviar um formulário GET com params de string de consulta e params ocultos desaparece (7)

Em HTML5, esse é o comportamento por especificação.

Consulte http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm

Consulte "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:

Deixe o destino ser um novo URL que seja igual à ação, exceto que seu componente <query> é substituído por consulta (adicionando um caractere U + 003F QUESTION MARK (?), Se apropriado).

Então, o seu navegador irá reduzir a parte "? ..." existente do seu URI e substituí-lo por um novo baseado em seu formulário.

No HTML 4.01, a especificação produz URIs inválidos - a maioria dos navegadores não fez isso.

Veja http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 , etapa quatro - o URI terá um? acrescentado, mesmo que já contenha um.

Considere esta forma:

<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 a e b estão desaparecendo. Existe uma razão para isso? Existe uma maneira de evitar esse comportamento?


Eu costumo escrever algo assim:

foreach($_GET as $key=>$content){
        echo "<input type='hidden' name='$key' value='$content'/>";
}

Isso está funcionando, mas não se esqueça de higienizar suas entradas contra ataques XSS!


Isto é em resposta ao post acima por 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 evitar a duplicação de vars no URL:

foreach ($_GET as $key => $value) {
    if ($key != "my_key") {
        echo("<input type='hidden' name='$key' value='$value'/>");
    }
}

Não é isso que os parâmetros ocultos são para começar ...?

<form action="http://www.example.com" method="GET">
  <input type="hidden" name="a" value="1" /> 
  <input type="hidden" name="b" value="2" /> 
  <input type="hidden" name="c" value="3" /> 
  <input type="submit" /> 
</form>

Eu não contaria com nenhum navegador que retivesse qualquer string de consulta existente no URL de ação.

Como as especificações ( RFC1866 , página 46; HTML 4.x seção 17.13.3) afirmam:

Se o método for "get" e a ação for um URI HTTP, o agente do usuário aceita o valor da ação, acrescenta um "?" para ele, em seguida, acrescenta o conjunto de dados do formulário, codificado usando o tipo de conteúdo "application / x-www-form-urlencoded".

Talvez seja possível codificar por percentual a URL de ação para incorporar o ponto de interrogação e os parâmetros, e então cruzar os dedos para esperar que todos os navegadores deixem essa URL como ela (e confirme que o servidor também a entende). Mas eu nunca confiaria nisso.

A propósito: não é diferente para campos de formulário não ocultos. Para o POST, o URL de ação pode conter uma string de consulta.


Se você precisar de solução alternativa, como este formulário pode ser colocado em sistemas de terceiros, você pode usar o mod_rewrite do Apache assim:

RewriteRule ^dummy.link$ index.php?a=1&b=2 [QSA,L]

então seu novo formulário ficará assim:

<form ... action="http:/www.blabla.com/dummy.link" method="GET">
<input type="hidden" name="c" value="3" /> 
</form>

e o Apache anexará o terceiro parâmetro para consultar


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 vai depender de 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 poderia mudar o comportamento.

"Mas digamos que eu tenha parâmetros na string de consulta e em entradas ocultas, o que posso fazer?" O que você pode fazer é corrigir o erro. Não ser sarcástico, mas isso é um pouco como perguntar: "Mas digamos que meu URL usa sinais de porcentagem em vez de barras, o que posso fazer?" A única resposta possível é que você pode corrigir o URL.


<form ... action="http:/www.blabla.com?a=1&b=2" method ="POST">
<input type="hidden" name="c" value="3" /> 
</form>

altere o método de solicitação para 'POST' em vez de 'GET'.







submit