OVH Cloud OVH Cloud

[un peu long] Champ de formulaire a ne pas transmettre

25 réponses
Avatar
Olivier Miakinen
Bonjour,

Je cherche la méthode la plus efficace et la plus jolie pour avoir
un champ de formulaire qui ne soit *pas* transmis lors du Submit. Je
m'explique.

Le formulaire ressemble à quelque chose comme ça :
________________________________
Utilisateur : |_MIAKINEN_______________________|
Code PIN : |_****___________________________|
---------
|Continuer|
---------

J'ai une fonction JavaScript appelée par "onsubmit" qui fait appel à une
fonction Java pour se loguer sur une carte à puce en lui passant le code
PIN, puis qui retourne true si ce code était correct. Dans ce cas, la
requête POST part vraiment vers le serveur, avec le nom d'utilisateur,
et aussi d'autres champs cachés que j'ai remplis à la volée par JavaScript.

Mon problème, c'est que le serveur n'a pas de raison de recevoir le code
PIN, qui est un mot de passe local, et donc je ne voudrais pas l'envoyer
dans le POST. J'ai déjà imaginé deux solutions pour éviter cela, mais
toutes deux ont des inconvénients.

1re solution : sortir le champ "Code PIN" du formulaire.
Cette solution a l'avantage de la simplicité, mais du coup je perds la
possibilité de soumettre le formulaire en tapant sur la touche Entrée du
clavier au lieu d'aller appuyer sur le bouton Continuer.

2e solution : vider le contenu du champ avant envoi.
C'est une solution simple aussi, mais celle-ci risque d'effrayer
l'utilisateur s'il voit disparaître les étoiles représentant son code
PIN juste au moment de la soumission : il peut penser que quelque chose
n'a pas marché, et que l'authentification échouera (même si en fait elle
a déjà eu lieu).

D'autres idées ? Par exemple, est-il possible de détecter l'utilisation
de la touche Entrée dans un champ extérieur à un formulaire, puis de
déclencher la soumission du formulaire.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

10 réponses

1 2 3
Avatar
Olivier Miakinen

2e solution : vider le contenu du champ avant envoi.
C'est une solution simple aussi, mais celle-ci risque d'effrayer
l'utilisateur s'il voit disparaître les étoiles représentant son code
PIN juste au moment de la soumission : il peut penser que quelque chose
n'a pas marché, et que l'authentification échouera (même si en fait elle
a déjà eu lieu).


Tiens, finalement je viens d'avoir une autre idée : au lieu de vider le
contenu du champ, je peux le remplacer par une chaîne de même longueur,
par exemple "xxxx" ou "****" si c'était "4752". L'utilisateur ne devrait
pas constater de changement puisque les caractères sont déjà remplacés
par des étoiles à l'affichage, et je ne transmets pas le code au serveur.

Cela étant, si jamais il existe une autre solution cela m'intéresse
toujours.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Jibé
Jette un coup d'oeil au fil "détruire un élément de formulaire" un peu
plus haut. J'avais pour d'autres raisons le même genre de demande et la
solution apportée fonctionne impeccable.

JB
Avatar
Olivier Miakinen

Jette un coup d'oeil au fil "détruire un élément de formulaire" un peu
plus haut. [...]


Je l'ai lu, et je t'en remercie. Cependant ma demande est différente :
justement je ne veux pas détruire ce champ pour ne pas effrayer
l'utilisateur, je veux juste que la valeur ne soit pas transmise au
serveur pour raisons de sécurité.

Cordialement,
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Cenekemoi

Bonjour,

[...]


Veux-tu que cela marche avec tous les navigateurs (même les NS 4.*) ?

Si non, tu peux essayer qcquechose comme :

f.pin.disabled = true;
f.submit();
f.pin.disabled = false;

Ca peut marcher avec IE5+ et Firefox 1+...

Cordialement,

Thierry ;-)
____________________________________


01 41 88 02 02
____________________________________



--
Cordialement, Thierry ;-)

Avatar
Cenekemoi
Bonjour,

Je cherche la méthode la plus efficace et la plus jolie pour avoir
un champ de formulaire qui ne soit *pas* transmis lors du Submit. Je
m'explique (...)


Veux-tu que cela marche avec tous les navigateurs (même les NS 4.*) ?

Si non, tu peux essayer qcquechose comme :

f.pin.disabled = true;
f.submit();
f.pin.disabled = false;

Ca doit marcher avec IE5+, Firefox 1+ et autre NS6+

--
Cordialement, Thierry ;-)

Avatar
Olivier Miakinen
Le 01/02/2005 14:35, Cenekemoi me répondait :

Veux-tu que cela marche avec tous les navigateurs (même les NS 4.*) ?


Non, j'utilise déjà des fonctions de gestion du DOM et des CSS
incompatibles avec NS 4. On va supposer qu'il s'agit soit d'un
navigateur moderne, soit d'Internet Explorer 6 (qui me pose déjà
de nombreux soucis).

Si non, tu peux essayer qcquechose comme :

f.pin.disabled = true;


Excellent ! Je n'osais pas espérer une solution aussi simple.
Je l'adopte.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Olivier Miakinen

f.pin.disabled = true;


Excellent ! Je n'osais pas espérer une solution aussi simple.
Je l'adopte.


Euh non, ça ne va pas non plus. Je sais, je suis exigeant : la case se
retrouve grisée pendant la seconde ou deux que dure l'appel au serveur.

Je crois que je vais rester sur ma troisième idée, qui est assez simple
à mettre en ½uvre elle aussi :
pincode.value = pincode.value.replace(/./g, "*");

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.


Avatar
Cenekemoi

f.pin.disabled = true;


Excellent ! Je n'osais pas espérer une solution aussi simple.
Je l'adopte.


Euh non, ça ne va pas non plus. Je sais, je suis exigeant : la case se
retrouve grisée pendant la seconde ou deux que dure l'appel au
serveur.

Je crois que je vais rester sur ma troisième idée, qui est assez
simple à mettre en ½uvre elle aussi :
pincode.value = pincode.value.replace(/./g, "*");


Oui, mais là, tu perds la valeur contenue dans ta zone...

Peut-être dois-tu faire :

var pinSave = f.pincode.value;
f.pincode.value = f.pincode.value.replace(/./g, "*");
f.submit();
f.pincode.value = pinSave;

--
Cordialement, Thierry ;-)



Avatar
Patrick Mevzek

D'autres idées ?


Faire deux formulaires:
- l'un avec les deux champs pour entrer nom et code mais sans bouton
d'envoi
- un autre, avec 2 champs cachés, et un bouton d'envoi.

Quand on clique sur le bouton d'envoi (celui du deuxième donc), votre
javascript récupère les valeurs du premier, fais les vérifications locales
qu'il doit faire, et après recopie les valeurs nécessaires dans les champs
cachés, et envoie *ce* formulaire.

Ca a l'air tarabiscoté mais quelque chose dans le genre pourrait peut-être
fonctionner.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>

Avatar
Olivier Miakinen

Je crois que je vais rester sur ma troisième idée, qui est assez
simple à mettre en ½uvre elle aussi :
pincode.value = pincode.value.replace(/./g, "*");


Oui, mais là, tu perds la valeur contenue dans ta zone...


Ça je m'en fiche, je me suis déjà logué avec le pincode.

Peut-être dois-tu faire :

var pinSave = f.pincode.value;
f.pincode.value = f.pincode.value.replace(/./g, "*");
f.submit();


Je faisais « return true » et je ne savais pas que l'on pouvait faire
« f.submit() ». Si c'est possible, je peux bien avoir deux formulaires,
f1 qui contient le pincode et f2 qui contient le nom d'utilisateur, et
lorsque je détecte un "onsubmit" sur f1 j'appelle f2.submit() ! C'est
posible, ça ? c'est possible ?

f.pincode.value = pinSave;


Euh... quand on appelle f.submit(), ça ne remplace pas la page courante
par le résultat du POST ? Je ne vois pas trop l'intérêt de repositionner
une valeur dans une page qui est censée ne plus exister...

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.


1 2 3