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

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.


Oui, j'y avais pensé, mais je voulais aussi qu'une soumission au clavier
sur le premier formulaire puisse être récupérée et transformée en
soumission du second formulaire. D'après Thierry, ce serait possible par
une fonction f.submit(), ce que je vois confirmé ici :
<http://fr.selfhtml.org/javascript/objets/elementshtml.htm#form>

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


Je vais essayer. Merci à tous les deux.

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


Avatar
Patrick Mevzek
Oui, j'y avais pensé, mais je voulais aussi qu'une soumission au clavier
sur le premier formulaire puisse être récupérée


On peut récupérer un événement (comme la frappe d'une touche) normalement
sur n'importe quel élément HTML, même si c'est complexe à faire
proprement car il y a 3 modèles différents
Cf http://www.quirksmode.org/js/introevents.html
et pages qui suivent ou équivalent en français.

et transformée en soumission du second formulaire. D'après Thierry, ce serait possible par
une fonction f.submit(), ce que je vois confirmé ici :
<http://fr.selfhtml.org/javascript/objets/elementshtml.htm#form>


On peut émuler la soumission d'un formulaire depuis javascript, avec
submit(), oui.

--
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
ASM

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


oui et tu peux depuis le 2 submiter le 1
tu peux même simuler le click sur le bouton d'envoi

f2.elements['envoi'].click();

(qui a l'avantage de déclancher aussi le onsubmit du 2)

mais ... ça ne nous annule pas la touche 13 (entree)

<body onkeydown="window.status=event.keyCode;
if(event.keyCode=) {
if(verifPin() && verifForm()) f2.submit();
else return 0;}">

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 ?


ce devrait (f1 n'aurait alors pas d'action)

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...


le submit() envoie l'action stipulée ...
à toi de voir cette action ?

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************

Avatar
Cenekemoi
(...)
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 possible, ça ? c'est possible ?


Oui, toutafé...

(...)
Euh... quand on appelle f.submit(), ça ne remplace pas la page
courante par le résultat du POST ?


Pas obligatoirement. Cela dépend de ce que tu demande dans l"action" de
ton formulaire.

--
Cordialement, Thierry ;-)

Avatar
Olivier Miakinen
Le 02/02/2005 00:18, ASM me répondait :

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...


le submit() envoie l'action stipulée ...
à toi de voir cette action ?


Quant à Cenekemoi, il disait :

(...)
Euh... quand on appelle f.submit(), ça ne remplace pas la page
courante par le résultat du POST ?



Pas obligatoirement. Cela dépend de ce que tu demande dans l"action" de
ton formulaire.


Qu'est-ce qu'on peut mettre comme action en dehors d'une url ? Une
fonction JavaScript ? Dans ce cas, qu'est-ce qu'on met comme méthode ?



Avatar
Cenekemoi
Qu'est-ce qu'on peut mettre comme action en dehors d'une url ? Une
fonction JavaScript ? Dans ce cas, qu'est-ce qu'on met comme méthode ?


Ah, bonne question !

Regarde un peu cette page :
http://jibbering.com/2002/4/httprequest.html
tu y trouveras, j'en suis sûr, moultes applications potentielles.

En particulier, cela permet d'interroger un Serveur (via un formulaire,
par exemple) sans rafraichir la page en cours mais en y intégrant la
réponse du serveur via un "innerHtml" par exemple.

--
Cordialement, Thierry ;-)

Avatar
Olivier Miakinen
Le 02/02/2005 11:43, Cenekemoi me répondait :

Qu'est-ce qu'on peut mettre comme action en dehors d'une url ? Une
fonction JavaScript ? Dans ce cas, qu'est-ce qu'on met comme méthode ?


Ah, bonne question !

Regarde un peu cette page :
http://jibbering.com/2002/4/httprequest.html
tu y trouveras, j'en suis sûr, moultes applications potentielles.


Raté. © ;-)

Le seul formulaire de cette page a son action qui ne sert à rien
puisqu'elle n'est jamais exécutée (return false dans la fonction
JavaScript).

Un autre exemple ?


Avatar
Cenekemoi
Raté. © ;-)

Le seul formulaire de cette page a son action qui ne sert à rien
puisqu'elle n'est jamais exécutée (return false dans la fonction
JavaScript).


Attention, je n'ai pas prétendu que tu en avais besoin pour ton site
*actuel*, mais que les potentialités pour d'*autres* utilisations
étaient à considérer...

Un autre exemple ?


Pas si simple, évidemment ;-)

--
Cordialement, Thierry

Avatar
YD

Qu'est-ce qu'on peut mettre comme action en dehors d'une url ? Une
fonction JavaScript ? Dans ce cas, qu'est-ce qu'on met comme méthode ?


Ben, une URL ;-) Mais tu peux en construire une avec un "pseudo-protocole" (genre about: ou javascript:)

Supposons que tu aies une fonction que tu souhaites appeler sur le submit *sans que rien ne parte vers le serveur* : <form action="javascript:mafonction(mesargs);"> la page n'est pas rechargée, les champs restent tels quels mais la fonction est exécutée. Je ne sais pas si ça répond à ton problème (fil un peu long...), mais à ta question oui.

De mémoire, l'attribut method n'est pas "required" dans la DTD HTML 4.01 donc XHTML 1.0 de facto. (sa valeur par défaut est get, ça n'empêche pas action="javascript:..." de fonctionner correctement sur les navigateurs récents).

--
Y.D.

Avatar
Olivier Miakinen

Le seul formulaire de cette page a son action qui ne sert à rien
puisqu'elle n'est jamais exécutée (return false dans la fonction
JavaScript).


Attention, je n'ai pas prétendu que tu en avais besoin pour ton site
*actuel*,


Je ne l'ai pas non plus envisagé un seul instant, mais ta proposition de
faire quelque chose après le f.submit() m'avait fait poser la question,
à laquelle la page que tu as signalée ne répond pas. En revanche, YD
vient d'y apporter une vraie réponse.


1 2 3