Question

J'ai quelques formulaires de recherche, l'un avec ~ 50 champs et l'autre avec ~ 100. En règle générale, comme l'indique la spécification HTML, je recherche à l'aide de la méthode GET car aucune donnée n'est modifiée. Je n'ai pas encore rencontré ce problème, mais je me demande si je vais bientôt manquer d'espace URL?

La limite de Internet Explorer est de 2083 caractères. Les autres navigateurs ont une limite beaucoup plus élevée . J'utilise Apache, la limite est donc d'environ 4000 caractères, dont IIS est de 16384 caractères.

Avec 100 champs, disons une longueur moyenne de 10 caractères pour un nom de champ, cela fait déjà 5000 caractères ... incroyable sur le formulaire de champ 100, je n’ai pas encore eu d’erreurs. (25% des champs sont des sélections multiples, la longueur du champ est donc beaucoup plus longue.)

Alors, je me demande quelles sont mes options. (Raccourcir les formulaires n’est pas une option.) Voici mes idées:

  • Utilisez POST. Je n'aime pas trop cela, car pour le moment, les utilisateurs peuvent enregistrer leurs recherches dans leurs favoris et les exécuter à nouveau, ce qui est une fonctionnalité vraiment intéressante.
  • Demandez à JavaScript de parcourir le formulaire pour déterminer quels champs sont différents de celui par défaut, remplissez un autre formulaire et envoyez-le. L’utilisateur marquerait bien sûr la version abrégée.

Avez-vous d'autres idées?

Aussi, est-ce que quelqu'un sait si la longueur est la longueur codée ou juste du texte brut?

Je développe en PHP, mais cela ne fait probablement pas de différence.

Modifier: je ne peux supprimer aucun champ; Je suis incapable de raccourcir le formulaire. C’est ce que le client a demandé et il utilise souvent une gamme de champs, dans les différentes catégories. Je sais qu’il est difficile de penser à un formulaire qui ressemble à de nombreux champs, mais les utilisateurs n’ont pas de mal à comprendre comment cela fonctionne.

Était-ce utile?

La solution

Vos utilisateurs vont-ils utiliser tous les champs 50-100 pour effectuer leurs recherches? S'ils n'en utilisent que quelques-uns, pourquoi ne pas POSTER la recherche à un "entre les deux"? page quel en-tête () - les redirige vers la page de résultats avec uniquement les champs modifiés par l'utilisateur dans l'URL? La page de résultats utiliserait alors les valeurs par défaut pour les champs qui n'existent pas dans l'URL.

Autres conseils

Pour répondre indirectement à votre question, si j’étais confronté à un formulaire de 100 champs à remplir sur une page, je fermerais probablement mon navigateur. Cela ressemblerait à une convivialité complète cauchemar .

Ma réponse est la suivante: s'il y a un risque que je me rapproche de cette limite pour une utilisation normale du formulaire, je vais probablement me tromper.

Par ordre de préférence, je voudrais

  1. Scindez le formulaire et utilisez une rétention d'état côté serveur
  2. Basculez vers POST, puis générez et redirigez vers une URL plus courte résolue vers le même résultat
  3. Abandonnez;)

Vous avez mentionné dans un commentaire que de nombreux champs "sont masqués et peuvent être ouverts à volonté".

Si vous souhaitez supprimer la dégradation progressive, vous pouvez toujours ajouter et supprimer les champs du formulaire, au lieu de simplement les masquer et les afficher: le navigateur ne soumettra pas ceux qui ne figurent pas dans le formulaire.

Il s'agit d'une variante de la marque et du modèle " formulaires que les pages d’assurance en ligne, etc. utilisent: sélectionnez la marque, renvoyez-la au serveur et obtenez la liste des modèles de ce fabricant.

Si vous n’êtes pas dérangé par l’utilisation de javascript, vous pouvez l’aider à déterminer la longueur de la chaîne de requête. Si elle est trop longue, passez à une publication. Ensuite, avoir une sorte de mappeur d'URL pour leur permettre de marquer ces recherches postées.

Utilisez post et si l'utilisateur enregistre la recherche dans les favoris, enregistrez-la dans une base de données et attribuez-lui un jeton unique, puis redirigez-la vers la page de recherche à l'aide de GET et en transmettant le jeton en tant que paramètre.

TinyURL est un bon exemple: vous lui donnez une URL très longue, il l'enregistre dans une base de données, vous donne un identifiant unique pour cette URL et vous pouvez demander plus tard l'URL longue en utilisant cet identifiant.

En PHP, ce serait quelque chose comme:

<?php
if (isset(

Utilisez post et si l'utilisateur enregistre la recherche dans les favoris, enregistrez-la dans une base de données et attribuez-lui un jeton unique, puis redirigez-la vers la page de recherche à l'aide de GET et en transmettant le jeton en tant que paramètre.

TinyURL est un bon exemple: vous lui donnez une URL très longue, il l'enregistre dans une base de données, vous donne un identifiant unique pour cette URL et vous pouvez demander plus tard l'URL longue en utilisant cet identifiant.

En PHP, ce serait quelque chose comme:

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

Et lancez un script quotidiennement:

<*>GET['token'])) { $token = addslashes(

Utilisez post et si l'utilisateur enregistre la recherche dans les favoris, enregistrez-la dans une base de données et attribuez-lui un jeton unique, puis redirigez-la vers la page de recherche à l'aide de GET et en transmettant le jeton en tant que paramètre.

TinyURL est un bon exemple: vous lui donnez une URL très longue, il l'enregistre dans une base de données, vous donne un identifiant unique pour cette URL et vous pouvez demander plus tard l'URL longue en utilisant cet identifiant.

En PHP, ce serait quelque chose comme:

<*>

Et lancez un script quotidiennement:

<*>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(

Utilisez post et si l'utilisateur enregistre la recherche dans les favoris, enregistrez-la dans une base de données et attribuez-lui un jeton unique, puis redirigez-la vers la page de recherche à l'aide de GET et en transmettant le jeton en tant que paramètre.

TinyURL est un bon exemple: vous lui donnez une URL très longue, il l'enregistre dans une base de données, vous donne un identifiant unique pour cette URL et vous pouvez demander plus tard l'URL longue en utilisant cet identifiant.

En PHP, ce serait quelque chose comme:

<*>

Et lancez un script quotidiennement:

<*>POST)); $token = sha1(

Utilisez post et si l'utilisateur enregistre la recherche dans les favoris, enregistrez-la dans une base de données et attribuez-lui un jeton unique, puis redirigez-la vers la page de recherche à l'aide de GET et en transmettant le jeton en tant que paramètre.

TinyURL est un bon exemple: vous lui donnez une URL très longue, il l'enregistre dans une base de données, vous donne un identifiant unique pour cette URL et vous pouvez demander plus tard l'URL longue en utilisant cet identifiant.

En PHP, ce serait quelque chose comme:

<*>

Et lancez un script quotidiennement:

<*>SERVER['REMOTE_ADDR'].rand()); mysql_query("INSERT INTO searches (token, fields, save_time) Values ('{$token}', '{$fields}', NOW())"); header('Location: ?token='.$token); exit; ?>

Et lancez un script quotidiennement:

<*>
  

De plus, est-ce que quelqu'un sait si la longueur   est la longueur encodée ou juste du texte brut?

Je suppose que c'était pour la longueur encodée. J'ai fait un test simple: une zone de texte et un bouton d'envoi pour un script PHP simpliste.
Chargé la page dans IE6, collé du texte français dans la zone de texte, 2 000 caractères. Si je clique sur le bouton d'envoi, rien. J'ai dû réduire la longueur du texte pour pouvoir le soumettre.

En d'autres termes, la limite de 2083 caractères correspond exactement à la longueur maximale de l'URL trouvée dans la barre d'adresse après avoir soumis la demande GET.

Je choisirais la solution JavaScript: lors de la soumission, analysez le formulaire, créez un formulaire secondaire avec des attributs cachés et soumettez-le.

Quelques stratégies pour raccourcir la sortie:

  • Comme vous le signalez, vous pouvez déjà ignorer toutes les valeurs restantes (par défaut, aucun champ, aucune valeur).
  • Si vous avez un formulaire du type Traitement de la recherche sur le forum , vous pouvez regrouper tous les états de case à cocher dans une seule variable, par exemple. en utilisant le codage de lettre.
  • Utilisez des attributs value courts (dans , sélectionnez par exemple).

Remarque: si la page de recherche est composée de plusieurs formulaires indépendants, où les utilisateurs ne remplissent qu'une section ou une autre, vous pouvez créer plusieurs formulaires distincts.
Cela pourrait ne pas s'appliquer à votre cas et peut sembler évident mais mérite d'être mentionné pour mémoire ... ^ _ ^

Philosophiquement, on pourrait considérer le POST de recherche comme la création d’une recherche enregistrée (en particulier lorsqu’une recherche est un objet aussi complexe que celui que vos utilisateurs sont en train de créer). Dans ce cas, vous pouvez accepter le message pour la création d'une recherche, puis le rediriger à l'aide d'un objet GET afin d'extraire les résultats de la recherche appropriés (post / redirect / get).

Cela permettrait également aux utilisateurs de créer un signet pour que les résultats de la recherche (GET) reviennent à tout moment pour relancer la recherche.

Obtenir peut avoir un avantage si vos résultats de recherche peuvent être partagés, en cas de demande de publication si vous envoyez le lien à quelqu'un, cette personne ne verra aucun résultat de recherche

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top