Pergunta

Eu tenho formulários de pesquisa casal, 1 com ~ 50 campos e outro com ~ 100. Normalmente, como a especificação HTML diz, eu faço pesquisas usando o método GET como nenhum dado é alterado. Eu não executar para esse problema, mas eu estou querendo saber se eu vou ficar sem espaço URL em breve?

O limite de Internet Explorer é de 2083 caracteres. Outros navegadores, tem um muito maior limite . Estou executando o Apache, então o limite há cerca de 4000 caracteres, qual o IIS é 16384 caracteres.

A 100 campos, dizem duração média nome de campo de 10 caracteres, que já está 5000 caracteres ... incrível no formulário de 100 campo, eu não tive quaisquer erros ainda. (25% dos campos são múltiplos selecciona, de modo que o comprimento do campo é muito mais longo.)

Então, eu estou querendo saber quais são minhas opções. (Encurtar as formas não é uma opção.) Aqui minhas idéias:

  • Use POST. Eu não gosto disso tanto porque nos utilizadores momento pode marcar suas pesquisas e realizá-las novamente mais tarde -. Um bom recurso realmente Dang
  • ter o JavaScript loop através do formulário para determinar quais campos são diferentes do padrão, preencher outro formulário e enviar essa. O usuário seria, evidentemente marcar a versão abreviada.

Quaisquer outras ideias?

Além disso, alguém sabe se o comprimento é o comprimento codificado ou apenas texto sem formatação?

Estou desenvolvendo em PHP, mas provavelmente não faz diferença.

Editar: eu sou incapaz de remover todos os campos; Eu sou incapaz de encurtar o formulário. Isto é o que o cliente pediu e eles frequentemente usam uma variedade de campos, nas diferentes categorias. Eu sei que é difícil pensar em uma forma que parece bom com isso muitos campos, mas os usuários não têm uma compreensão problema como ele funciona.

Foi útil?

Solução

São seus usuários realmente vai estar usando todos os 50-100 campos para fazer suas pesquisas? Se estiver usando apenas alguns, por que não publicar a pesquisa para um "entre" página que header () - redireciona para a página de resultados com apenas os campos alterados pelo usuário na URL? A página de resultados, então, usar os valores padrão para os campos que não existem na URL.

Outras dicas

Para endereçar indiretamente a sua pergunta, se eu estava diante de um formulário 100-campo para preencher em uma página, eu provavelmente perto meu navegador, que soa como uma usabilidade completa pesadelo .

A minha resposta é que, se há um perigo que eu estou recebendo qualquer lugar perto desse limite para normais o uso do formulário, provavelmente estou fazendo errado.

Em ordem de preferência, eu o faria

  1. Split a forma e usar algum estado do lado do servidor retenção
  2. Mudar para POST, e, em seguida, gerar e redirecionar para uma URL mais curta em POST que resolveu o mesmo resultado
  3. Dá;)

Você mencionou em um comentário que muitos dos campos "estão escondidos e pode ser aberto, conforme necessário".

Se você está disposto a descartar degradação graciosa, você sempre pode realmente adicionar e remover os campos do formulário, em vez de apenas se escondendo e mostrando-lhes: o navegador não irá submeter os que não estão incluídos no formulário.

Esta é uma variante das formas "marca e modelo" que etc páginas de seguros on-line usar -. Selecionar a marca, enviar de volta para o servidor e obter a lista de modelos para esse fabricante

Se você não se importa com javascript, então você pode tê-lo trabalhar o comprimento da string de consulta e se for muito longo, em seguida, mudar para um post. Então, algum tipo de mapeador url, que lhes permitam marcar essas pesquisas publicadas.

Use post e se os bookmarks do usuário de pesquisa, salve-o em um banco de dados e dar-lhe um token único, em seguida, redirecionar para a página de pesquisa usando GET e passando o token como parâmetro.

TinyURL é um exemplo bom:. Você dar-lhe uma muito longa URL, ele salva-lo para um DB, dá-lhe um identificador único para esse URL e depois você pode solicitar a longa URL usando esse identificador

Em PHP seria algo ao longo das linhas de:

<?php
if (isset($_GET['token']))
{
    $token = addslashes($_GET['token']);
    $qry = mysql_query("SELECT fields FROM searches WHERE token = '{$token}'");
    if ($row = mysql_fetch_assoc($qry))
    {
        performSearch(unserialize($row['fields']));
        exit;
    }
    showError('Your saved search has been removed because it hasn\'t been used in a while');
    exit;
}
$fields = addslashes(serialize($_POST));
$token = sha1($_SERVER['REMOTE_ADDR'].rand());
mysql_query("INSERT INTO searches (token, fields, save_time) Values ('{$token}', '{$fields}', NOW())");
header('Location: ?token='.$token);
exit;
?>

e executar um script diária:

<?php
mysql_query('DELETE FROM searches WHERE save_time < DATE_ADD(NOW(), INTERVAL -200 DAY)');
?>

Além disso, alguém sabe se o comprimento é o comprimento codificado ou apenas texto sem formatação?

Meu palpite foi para o comprimento codificado. Eu fiz um teste simples: a textarea e um botão de envio para um script PHP simplista
. Carregada a página no IE6, colado algum texto francês no textarea, 2000 caracteres. Se eu acertar o botão enviar, nada. Eu tive que reduzir o comprimento do texto para ser capaz de enviar.

Em outras palavras, o limite de caracteres 2083 é exatamente o comprimento máximo do URL encontrado na barra de endereço após a apresentação do pedido GET.

eu iria para a solução JavaScript: em apresentar, analisar a forma, criar uma forma secundária com atributos hidden, e alegam que

.

Algumas estratégias sobre encurtando a saída:

  • Como salienta, você já pode pular todos os valores da esquerda para a padrão (nenhum campo, nenhum valor).
  • Se você tem um formulário como o da Processamento de busca fórum você pode agrupar todos os estados caixa de seleção em uma variável única, por exemplo. usando a letra de codificação.
  • Usar atributos curto value (em select por exemplo).

. Nota: Se a página de pesquisa é realmente composto de várias formas independentes, onde os usuários preencher apenas uma seção ou outra, você pode fazer várias formas separadas
pode não se aplicar ao seu caso e poder parece óbvio, mas vale a pena mencionar para o registro ... ^ _ ^

Pode-se filosoficamente olhar para o POST submissão de pesquisa como a criação de uma pesquisa salva (especialmente quando uma pesquisa é tão complexo um objeto como a seus usuários estão fazendo). Neste caso, você poderia aceitar o cargo para a criação de uma pesquisa e, em seguida, redirecionar usando um GET para buscar os resultados de pesquisa apropriados (post / redirecionamento / get).

Isso também permitiria que os usuários para marcar os resultados da pesquisa (GET) para voltar a qualquer momento para executar re-pesquisa.

Get pode ter uma vantagem se os resultados da pesquisa podem ser compartilhados, em caso de solicitação post, se você enviar o link para alguém, essa pessoa não vai ver todos os resultados de busca

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top