Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Un formulaire tout en Javascript avec traitement préalable sur les données trrans mises.

2 réponses
Avatar
Jean-Francois Ortolo
Bonsoir

Mon problème, consiste en lançant un formulaire en Javascript ayant
deux champs de saisie, de pouvoir accoler en Javascript ( avec
séparateur fixe, par exemple '#' ), les deux champs de saisie, avant de
les envoyer à l'url de la balise action.

Donc, une fonction target Javascript du formulaire html ( c'est un
formulaire codé en html au départ ), déclenche le traitement de collage
des deux données ( appelons-les pseudo et email remplies par
l'utilisateur, ce qui donne les valeurs de pseudo#email ( en remplaçant
les noms par leurs valeurs ), puis la fonction déclenche l'envoi du
formulaire d'une manière classique, en retournant la valeur true.

Mais... Est-il possible de spécifier ce champ de saisie unique de nom
"datas", comportant les deux données accolées, au formulaire envoyé ?

Cependant, avant de renvoyer la valeur true, la fonction doit faire
un traitement de type asynchrone ( lancement d'un script php en mode
Ajax mettons ), ce script attend que les conséquences du formulaire
aient modifié la base de de données du site, avant de rendre la main en
indiquant que tout est correct, ce à quoi la fonction target du
formulaire réagit en rendant la valeur true au formulaire.

J'ai déjà fait cela avec un formulaire et une fonction Javascript
target qui fait la même chose, mais sans accoler les deux valeurs du
formulaire. Cà marche parce que le lancement du script php est en mode
Ajax asynchrone.

Comte tenu que le lancement du script php en mode Ajax est
asynchrone, est-ce que cette approche ci-dessus est correcte ?

Autrement dit, n'y aura-t-il pas un problème de "dead lock", si la
fonction target attend que le formulaire s'exécute pour rendre true,
alors que le formulaire attend que la fonction rende true pour s'exécuter ?

C'est vrai que je n'aime pas le Javascript, et que cette approche
ci-dessus, va faire que ce formulaire ne sera utilisable que sur les
navigateurs avec Javascript activé. Mais bon, quand on ne peut pas on ne
peut pas...

Merci beaucoup de bien vouloir répondre à ma question ci-dessus.

Je n'avais pas pensé à cette approche, et je croyais qu'il fallait
nécessairement passer par un second formulaire qui reçoive les deux
données pseudo et email, les accole en php, et les envoie avec le
deuxième formulaire.

Mais le Monsieur pour qui je fais ce petit travail, veut absolument
que l'ensemble du traitement se fasse avec un seul formulaire...

Est-ce possible ?

Merci beaucoup de vos réponses.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr

2 réponses

Avatar
Pascal
Le 25/09/2010 20:42, Jean-Francois Ortolo a écrit :
Bonsoir



Bonjour,

Mon problème, consiste en lançant un formulaire en Javascript ayant deux
champs de saisie, de pouvoir accoler en Javascript ( avec séparateur
fixe, par exemple '#' ), les deux champs de saisie, avant de les envoyer
à l'url de la balise action.



A priori ça ne parait pas très compliqué.
Avant d'envoyer les données, je collerais les valeurs concaténées dans
un champ caché, et je rendrais "disabled" les deux champs d'origine.

Donc, une fonction target Javascript du formulaire html ( c'est un
formulaire codé en html au départ ), déclenche le traitement de collage
des deux données ( appelons-les pseudo et email remplies par
l'utilisateur, ce qui donne les valeurs de pseudo#email ( en remplaçant
les noms par leurs valeurs ), puis la fonction déclenche l'envoi du
formulaire d'une manière classique, en retournant la valeur true.



Je pense que ça répond à ça.

Mais... Est-il possible de spécifier ce champ de saisie unique de nom
"datas", comportant les deux données accolées, au formulaire envoyé ?



Et à ça aussi.

Cependant, avant de renvoyer la valeur true, la fonction doit faire un
traitement de type asynchrone ( lancement d'un script php en mode Ajax
mettons ), ce script attend que les conséquences du formulaire aient
modifié la base de de données du site, avant de rendre la main en
indiquant que tout est correct, ce à quoi la fonction target du
formulaire réagit en rendant la valeur true au formulaire.



Donc c'est la même fonction qui fera :
- l'appel Ajax, et si ok :
- la concaténation dans le champ caché
- la mise en disabled des champs d'origine
- le retour à true pour l'envoi du formulaire

Comte tenu que le lancement du script php en mode Ajax est asynchrone,
est-ce que cette approche ci-dessus est correcte ?



Pour moi ça ne devrait rien changer, puisque le script attend le
résultat d'une fonction de callback Ajax.

A tester, bien sûr, et si ça coince on pourrait peut-être voir le code
pour mieux répondre.

Merci beaucoup de vos réponses.



De rien.

--
Cordialement,
Pascal
Avatar
Jean-Francois Ortolo
Le 27/09/2010 12:29, Pascal a écrit :

Pour moi ça ne devrait rien changer, puisque le script attend le
résultat d'une fonction de callback Ajax.





Bonjour Monsieur

Finalement, au lieu de concaténer deux champs, au début de la
fonction je lance avec une requête Ajax synchrone, un script php sur le
site, avec les deux champs en paramètres, ce script lit dans la base de
données, à quel identificateur correspondent ces deux champs ( qui sont
le pseudo et l'email du futur abonné, ces données sont déjà inscrites
dans la bdd et associée à un identificateur numérique idabo unique, qui
est affiché par le script.

S'il y a la moindre erreur dans le script, le script affiche un code
numérique d'erreur négatif. ( commençant par le signe moins ( - ).

A réception du code ( ou de l'idabo affiché par le script ), la
fonction sait s'il y a eu une erreur, dans ce cas affiche le message
correspondant à l'erreur, et la fonction rend false.

S'il n'y a pas d'erreur, le traitement se poursuit avec la requête
Ajax suivante, asynchrone cette fois, qui consiste à déclencher un
script, qui va lire le contenu de la bdd, et attendre jusqu'à ce que le
mot de passe de l'abonné, ait changé ( suite à l'abonnement ).

En effet, suite à un abonnement réussi, l'intermédiaire de paiement
lance un script sur le site, qui prend en compte les données
d'abonnement, et en particulier, modifie le mot de passe de l'abonné, à
sa la valeur fournie par l'intermédiaire de paiement.

Théoriquement, la première requête Ajax est très rapide, et je pense
qu'il ne risque pas du tout d'y avoir un problème de temporisation,
c'est-à-dire que le mot de passe ne peut pas du tout avoir été changé,
avant que la deuxième requête Ajax ait lieu, car le processus
d'abonnement ( dans la fenêtre popup d'abonnement lancée à la fin de la
fonction Javascript ), nécessite de remplir plusieurs menus, ou de
cliquer sur plusieurs fenêtre successives, donner son numéro de CB Visa,
etc... Donc, de ce côté-là, il n'y a pas de problème, ceci d'autant
plus que la fenêtre popup d'abonnement, est lancée par la fonction
Javascript, après que la deuxième requête Ajax ( asynchrone ) ait été
rencontrée dans la fonction.

Je me posais la question de savoir si le fait que la première requête
Ajax est synchrone ( il faut avoir l'idabo résultant pour continuer ),
pouvait perturber le déroulement des opérations.

Cependant, il est vrai que la fonction Javascript est lancée par
l'événement onSubmit du formulaire, c'est-à-dire en premier, évidemment
avant que le formulaire ne puisse être activé. Et puis, il faut bien que
la fonction rende true, avant que le formulaire soit actif, et dès lors
que la fenêtre popup d'abonnement, s'affiche à la fin de la fonction (
après le déclenchement de la deuxième requête Ajax ), il ne devrait pas
y avoir de problème dans le séquencement des opérations.

Merci beaucoup de vos réponses.

Amicalement.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr