Aller au contenu principal
← Tous les Articles

Pratique technique M48

Comment concevoir un formulaire de candidature qui ne perd pas les données saisies

Un guide pratique pour créer des formulaires de candidature qui préservent les saisies utilisateur en cas d'interruption, couvrant la validation, le stockage local, les sauvegardes serveur et une checklist avant lancement.

M48 Editorial6 minutesMis à jour:

Pourquoi les formulaires perdent des données

Les utilisateurs abandonnent les formulaires de candidature pour de nombreuses raisons : un onglet de navigateur se ferme par erreur, une coupure réseau interrompt l'envoi, ou une erreur de validation efface les champs déjà remplis. Lorsque cela se produit, le coût ne se limite pas à la frustration. Chaque entrée perdue est une demande manquée, et les tentatives répétées sont souvent abandonnées complètement. Un formulaire qui préserve les saisies respecte le temps de l'utilisateur et protège votre pipeline.

Critères de décision avant de construire

Choisissez votre stratégie de persistance en fonction de trois facteurs : la longueur du formulaire, la sensibilité des données et la criticité de la soumission. Une courte inscription à une newsletter nécessite moins de protection qu'une candidature à un emploi en plusieurs pages. Si le formulaire collecte des identifiants personnels, des détails financiers ou des documents, le stockage côté client seul ne suffit pas ; vous avez besoin de brouillons côté serveur avec chiffrement au repos et en transit. Pour les demandes à faible enjeu, l'enregistrement automatique basé sur le navigateur peut suffire. Évaluez le risque d'abord, puis sélectionnez l'approche technique.

Étapes d'implémentation

Commencez par une amélioration progressive. Construisez un formulaire HTML simple qui fonctionne sans JavaScript, puis ajoutez des améliorations par-dessus. Utilisez l'attribut autocomplete sur chaque saisie afin que les navigateurs puissent suggérer des valeurs précédemment saisies. Ajoutez les attributs required et pattern pour une validation côté client de base, mais ne vous y fiez jamais comme seule sauvegarde.

Ensuite, implémentez l'enregistrement local des brouillons. Lorsqu'un utilisateur tape dans un champ, écrivez la valeur dans le localStorage ou l'IndexedDB du navigateur, indexée par un identifiant de formulaire stable. Lors du chargement de la page, vérifiez s'il existe un brouillon enregistré et remplissez automatiquement les champs. Effacez le brouillon uniquement après une soumission réussie au serveur ou lorsque l'utilisateur réinitialise explicitement le formulaire. Cela protège contre les rafraîchissements accidentels et les onglets fermés.

Pour les formulaires plus longs, enregistrez les brouillons sur le serveur à intervalles réguliers ou lors de la perte de focus d'un champ. Envoyez uniquement les champs modifiés dans une requête légère, et stockez la charge utile associée à un jeton de session anonyme ou à un compte utilisateur authentifié. Lorsque l'utilisateur revient, récupérez le brouillon et fusionnez-le avec les valeurs actuelles du formulaire. Cette approche survit aux changements d'appareil et au vidage du navigateur, mais elle introduit des considérations de confidentialité.

Gérez la validation avec soin. Affichez les erreurs en ligne à côté du champ concerné plutôt qu'un message générique en haut de page. Préservez toutes les autres valeurs saisies lorsqu'une erreur apparaît. Ne videz pas le formulaire en cas d'échec de soumission ; renvoyez l'utilisateur sur la même page avec ses données intactes et mettez en évidence exactement ce qui doit être corrigé.

Ajoutez un état clair pour le bouton de soumission. Désactivez le bouton pendant l'envoi pour éviter les doublons, mais réactivez-le si la requête échoue afin que l'utilisateur puisse réessayer sans ressaisir les données. Fournissez un message de succès qui confirme la réception et explique les étapes suivantes.

Échecs courants et comment les éviter

Un échec courant consiste à stocker des données sensibles en texte brut dans le localStorage. Tout script s'exécutant sur la page peut les lire, ce qui est dangereux pour les informations personnelles ou financières. Hypothétiquement, si un formulaire de candidature à un emploi enregistrait un numéro d'identification national dans le localStorage et qu'un widget tiers était compromis, cet identifiant pourrait être exposé. Évitez de stocker les champs sensibles côté client ; conservez-les dans des brouillons côté serveur avec des contrôles d'accès.

Un autre échec est l'écrasement silencieux des brouillons. Si un utilisateur ouvre le même formulaire dans deux onglets et enregistre dans l'un, l'autre onglet peut charger des données obsolètes et écraser les entrées plus récentes lors du rafraîchissement. Utilisez un horodatage de dernière modification ou un indicateur de version pour détecter les conflits et avertir l'utilisateur avant de remplacer un brouillon plus récent.

Effacer le localStorage lors de la déconnexion est également problématique. Si un utilisateur connecté enregistre un brouillon puis se déconnecte, le brouillon peut disparaître s'il est lié uniquement à la session. Gardez les brouillons anonymes séparés des sessions authentifiées, ou invitez l'utilisateur à enregistrer ou à annuler avant de se déconnecter.

Enfin, ne confondez pas l'autocomplétion du navigateur avec la persistance du formulaire. L'autocomplétion aide les utilisateurs récurrents à remplir des valeurs connues, mais elle ne reconstruit pas un formulaire partiellement complété après un crash. Traitez-les comme complémentaires, non interchangeables.

Mesures de protection des données

Traitez les brouillons non enregistrés comme des données personnelles. Limitez la durée de conservation des brouillons sur le serveur et supprimez-les automatiquement après une période de rétention définie. Les brouillons contenant des fichiers doivent stocker des références, et non les fichiers eux-mêmes, jusqu'à la soumission finale. Utilisez HTTPS pour toutes les requêtes de brouillon, et appliquez les mêmes règles d'authentification et d'autorisation que pour les candidatures soumises.

Si vous utilisez des cookies pour suivre les identifiants de brouillon, définissez les attributs HttpOnly et SameSite pour réduire l'exposition. Ne consignez pas le contenu des brouillons sur les plateformes d'analyse à moins d'avoir une base légale claire et le consentement de l'utilisateur. Tenez un registre des données collectées, de leur lieu de stockage et de leur date de suppression.

Checklist avant lancement

  • [ ] Le formulaire fonctionne sans JavaScript pour une soumission de base
  • [ ] Chaque saisie possède un attribut autocomplete approprié
  • [ ] Les brouillons sont enregistrés dans le localStorage ou l'IndexedDB à chaque saisie
  • [ ] Les brouillons sont restaurés lors du chargement de la page après une fermeture accidentelle
  • [ ] Un point de terminaison de brouillon côté serveur existe pour les formulaires longs ou en plusieurs étapes
  • [ ] Les erreurs de validation préservent toutes les valeurs saisies
  • [ ] Le bouton de soumission se désactive pendant la requête et se réactive en cas d'échec
  • [ ] Les champs sensibles ne sont pas stockés en texte brut côté client
  • [ ] Un calendrier de rétention et de suppression des brouillons est défini
  • [ ] Tout le trafic de brouillon utilise HTTPS

Lancer un formulaire sans ces mesures de protection risque de perdre des demandes authentiques. Un formulaire bien protégé garde les saisies utilisateur en sécurité, réduit l'abandon et rend chaque visite plus susceptible de se terminer par une soumission complète.

Discutez de votre projet

Services associés

Prêt à Commencer Votre Projet ?

Discutons de la façon dont nous pouvons aider à donner vie à votre vision

Demander une analyse gratuite ↗