Soumission de formulaire
Résolu
heliconius
Messages postés
539
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonsoir,
J'ai un souci pour envoyer un formulaire en javascript. En fait, il s'agit d'un script PHP mais peu importe, le problème est de l'ordre du Javascript ou peut-être --mais peu probable-- de HTML. Il s'agit d'une gestion de carnet d'adresses en un seul fichier PHP récursif (ajout, modification, exports, etc...) et je voudrai ajouter cloner.
Le même script se rappelle plusieurs fois.
- Quand on l'appelle normalement (pour ajout) il y a un champ caché (
- quand on a sélectionné une fiche pour modification, les champs sont affichés avec les valeurs qui avaient été saisies, le champ caché est toujours là mais avec une autre valeur (
Parfois, j'ai des enregistrements presque identiques et plutôt que tout ressaisir, je préfère afficher une fiche similaire, modifier un champ ou deux et appuyer sur un bouton [Cloner] afin d'exécuter un
J'ai imaginé (mais ai-je raison ?) demander une modif mais faire croire à un ajout. Comme il ne peut y avoir qu'un seul bouton de type "
Ci-dessous le code en question (enfin les parties principales) :
Comme rien ne partait, entre les deux instruction de la fonction
J'ai cherché sur le net et j'ai trouvé une doc préconisant
Je ne sais plus quoi faire. Quelqu'un a-t-il une idée ?
Merci pour votre aide.
J'ai un souci pour envoyer un formulaire en javascript. En fait, il s'agit d'un script PHP mais peu importe, le problème est de l'ordre du Javascript ou peut-être --mais peu probable-- de HTML. Il s'agit d'une gestion de carnet d'adresses en un seul fichier PHP récursif (ajout, modification, exports, etc...) et je voudrai ajouter cloner.
Le même script se rappelle plusieurs fois.
- Quand on l'appelle normalement (pour ajout) il y a un champ caché (
name="action" value="ajout") un bouton submit pour valider et enregistrer (le script PHP exécute alors une requête
INSERT INTO...)
- quand on a sélectionné une fiche pour modification, les champs sont affichés avec les valeurs qui avaient été saisies, le champ caché est toujours là mais avec une autre valeur (
name="action" value="modif") et lors de la validation le script PHP exécute alors une requête
UPDATE Table SET champ=...)
Parfois, j'ai des enregistrements presque identiques et plutôt que tout ressaisir, je préfère afficher une fiche similaire, modifier un champ ou deux et appuyer sur un bouton [Cloner] afin d'exécuter un
INSERT INTO...avec les valeurs inscrites dans les champs dont beaucoup sont identiques sauf un ou deux champs modifiés, ce qui fera un enregistrement supplémentaire.
J'ai imaginé (mais ai-je raison ?) demander une modif mais faire croire à un ajout. Comme il ne peut y avoir qu'un seul bouton de type "
submit" dans le formulaire, le bouton [Cloner] est de type "
button" et l'attribut
onclickpointe vers une fonction javascript "
cloner()". Comme j'avais cliqué sur le bouton [Modifier] pour afficher l'enregistrement voulu, le bouton caché indique qu'il s'agit d'une modif (
name="action" value="modif"), la fonction cloner() change cette valeur en "
ajout" avant de soumettre le formulaire. La modification du champ caché se fait mais le formulaire ne part pas, n'est pas soumis comme si c'était un ajout normal (pour cloner), il reste à l'affichage et n'exécute pas l'enregistrement.
Ci-dessous le code en question (enfin les parties principales) :
<script language="javascript" type="text/javascript"> function verif() { // ... // ici fonctions de vérification des champs // ... } function cloner() { document.personne.action.value="ajout"; document.personne.submit(); } </script> <body> ... <form name="personne" id="personne" method="post" action="SELF-en-PHP" onsubmit="return verif()"> ... <input type="text" name="nom" size="20" value="..."> <!-- value est vide ou contient une valeur selon saisie ou modif --> ... <input type="submit" name="submit" value="..."> <!-- value contient "Enregistrer" ou "Modifier" selon le cas --> <input type="button" name="Cloner" onclick="javascript:cloner()"> </form>
Comme rien ne partait, entre les deux instruction de la fonction
cloner(), j'ai rajouté
alert(document.personne.action.value)pour verifier. Lors du clic sur le bouton [Cloner], ça me précise bien que la valeur de action a été modifiée de "
modif" (à cause de l'affichage) en "
ajout". Mais ça ne part pas.
J'ai cherché sur le net et j'ai trouvé une doc préconisant
document.forms[form_id].submit()j'ai donc ajouté dans la balise
form, en plus de l'attribut
name="personne", l'attribut
id="personne"mais : que je mettre
document.personne.submit();ou
document.forms[personne].submit();le formulaire n'est pas soumis et reste à l'affichage.
Je ne sais plus quoi faire. Quelqu'un a-t-il une idée ?
Merci pour votre aide.
Configuration: Dual boot: Windows XP Pro SP3 / Debian Linux
A voir également:
- Soumission de formulaire
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Confirmer le nouvel envoi du formulaire err_cache_miss - Forum Webmastering
- Problème avec Google Chrome - Forum Google Chrome
2 réponses
Bonjour
Tu as dans ton form un élément qui s'appelle "submit".
document.personne.submit désigne cet élément, et non plus la méthode submit de document.personne.
Renomme ton élément différemment, et document.personne retrouvera sa méthode "submit".
Remarque complémentaire : pourquoi écris-tu "Comme il ne peut y avoir qu'un seul bouton de type "submit" dans le formulaire" ? Qu'est-ce qui t'empêche d'en mettre plusieurs ? Il suffit de leur donner des noms différents, et de tester quel est le nom transmis car seuls les boutons cliqués sont transmis. Tu peux également leur donner le même nom, mais deux "value" différentes.
Tu as dans ton form un élément qui s'appelle "submit".
document.personne.submit désigne cet élément, et non plus la méthode submit de document.personne.
Renomme ton élément différemment, et document.personne retrouvera sa méthode "submit".
Remarque complémentaire : pourquoi écris-tu "Comme il ne peut y avoir qu'un seul bouton de type "submit" dans le formulaire" ? Qu'est-ce qui t'empêche d'en mettre plusieurs ? Il suffit de leur donner des noms différents, et de tester quel est le nom transmis car seuls les boutons cliqués sont transmis. Tu peux également leur donner le même nom, mais deux "value" différentes.
Alors, là ! Super merci, grand bravo et chapeau bas. A double titre.
D'abord le fait qu'une fonction submit() disparaisse au profit d'un contrôle ayant le même nom, ce n'est pas d'une évidence flagrante. Vu qu'en PHP une variable $truc peut cohabiter avec une fonction truc(), je n'ai jamais pensé qu'il pût en être différemment avec Javascript ! Tu dois avoir pas mal d'heures de javascript derrière toi...
Ensuite, le fait qu'il puisse y avoir plusieurs boutons de type submit ! J'ai toujours cru et codé avec l'idée que s'il pouvait y avoir plusieurs formulaires dans la même page, ce qui n'était pas gênant car chacun d'eux avait leur nom propre, il ne pouvait y avoir qu'un seul et unique bouton de type submit par formulaire. Je viens d'apprendre donc, que dans un formulaire il peut y avoir plusieurs boutons de type submit et qui plus est, avec le même nom et que la différnce se fera par la valeur ! Bluffé. Sérieusement, ça m'ouvre d'autres perspectives. Merci.
Si ça t'intéresse, je peux t'envoyer en MP le code complet, le tester et proposer des améliorations de fonctionnalités voire corriger un bug sur lequel je bute aussi (facultatif :-). C'est une gestion de carnet d'adresses avec différents types d'export. Objectif : fichier PHP unique.
En tout cas un très grand merci, t'as pas volé ton pseudo, toi ! ;-)
Question résolue.
D'abord le fait qu'une fonction submit() disparaisse au profit d'un contrôle ayant le même nom, ce n'est pas d'une évidence flagrante. Vu qu'en PHP une variable $truc peut cohabiter avec une fonction truc(), je n'ai jamais pensé qu'il pût en être différemment avec Javascript ! Tu dois avoir pas mal d'heures de javascript derrière toi...
Ensuite, le fait qu'il puisse y avoir plusieurs boutons de type submit ! J'ai toujours cru et codé avec l'idée que s'il pouvait y avoir plusieurs formulaires dans la même page, ce qui n'était pas gênant car chacun d'eux avait leur nom propre, il ne pouvait y avoir qu'un seul et unique bouton de type submit par formulaire. Je viens d'apprendre donc, que dans un formulaire il peut y avoir plusieurs boutons de type submit et qui plus est, avec le même nom et que la différnce se fera par la valeur ! Bluffé. Sérieusement, ça m'ouvre d'autres perspectives. Merci.
Si ça t'intéresse, je peux t'envoyer en MP le code complet, le tester et proposer des améliorations de fonctionnalités voire corriger un bug sur lequel je bute aussi (facultatif :-). C'est une gestion de carnet d'adresses avec différents types d'export. Objectif : fichier PHP unique.
En tout cas un très grand merci, t'as pas volé ton pseudo, toi ! ;-)
Question résolue.
ça ne me gênait pas d'afficher le code. Mais il faisait plus de 3300 lignes, je n'avais pas envie de faire comme certains qui te balancent le code entier d'une page et disent : merci de me trouver l'erreur.
Les gens qui aident sont des gens qui aident, pas des larbins qu'on vient solliciter juste quand on en a besoin.
D'ailleurs, pour éviter d'encombrer le fil, je proposais même d'envoyer le code en privé et n'afficher que ce qui me paraissait utile. Mais tu n'as pas tort non plus, un code un peu plus fourni... Ce qui n'est pas évident c'est de savoir ce qui sera utile. En tout cas merci à toi aussi de t'être arrêté sur cette question et de m'avoir rappelé qu'il existait une console du navigateur que je n'avais jamais eu l'heur d'utiliser. :-(
En tout cas merci à tous et la question est marquée en résolue.
Les gens qui aident sont des gens qui aident, pas des larbins qu'on vient solliciter juste quand on en a besoin.
D'ailleurs, pour éviter d'encombrer le fil, je proposais même d'envoyer le code en privé et n'afficher que ce qui me paraissait utile. Mais tu n'as pas tort non plus, un code un peu plus fourni... Ce qui n'est pas évident c'est de savoir ce qui sera utile. En tout cas merci à toi aussi de t'être arrêté sur cette question et de m'avoir rappelé qu'il existait une console du navigateur que je n'avais jamais eu l'heur d'utiliser. :-(
En tout cas merci à tous et la question est marquée en résolue.
et merci pour ta réponse. La fonction verif() ne pose pas de problème. Le script a été commencé en avril 2013 et je l'utilise sans problème depuis. Quand j'ai besoin d'une fonction utilisateur supplémentaire, je rajoute le code PHP nécessaire et éventuellement une ou des fonctions javascript nécessaire(s) à cette nouvelle fonction d'utilisation mais je ne touche pas au code de la fonction verif() sauf si j'ajoute un nouveau champ qu'il faut vérifier.
En gros, je m'étais fait une bibliothèque de fonctions javascript totalement indépendantes de la page dans laquelle elles sont utilisées. Les variables sont internes à chacune de ces fonctions.
Pour m'y retrouver, j'ai normalisé les noms :
- Il y a les fonctions is.....() qui retournent une valeur true ou false (ex: isDate(), isHour(), isTDL(), etc...)
- et il y a les fonctions isValid....() qui retournent soit OK soit un message d'erreur à afficher (ex: isValidText(), isValidDate(), isValidMail(), etc...)
Ces deux paquets de fonctions peuvent être utilisés dans n'importe quelle page web.
Vient ensuite la fonction verif(), propre à mon formulaire, et qui utilise ces fonctions "bibliothèque" pour :
1) vérifier si le champ nécessaire est présent
2) vérifier que tous les caractères saisis soient dans la liste des caractères aurorisés pour ce champ ainsi que la longueur soit comprise entre des limites inférieure et supérieure. Dans ce cas un "OK" est renvoyé par une des fonctions isValid...() et on passe au champ suivant. Sinon le message d'erreur renvoyé est affiché, le curseur positionné sur le champ erroné et la main est rendue
3) Certains champs sont facultatifs. S'ils sont vides on passe au champ suivant mais s'ils sont saisis, la validité des saisies est vérifiée.
etc... pour tous les champs. En fin de la vérification, true est renvoyé et le formulaire est soumis, envoyé.
Je ne touche quasiment jamais à la fonction verif() qui a toujours fonctionné jusque là. Tu peux d'ailleurs les trouver à l'URL http://www.fauque.fr/pbjs.php
Je peux ici t'afficher ce code mais je ne pense pas qu'il ne t'aidera pas à résoudre. Cela ne me gêne pas de t'envoyer le tout en privé. Mais :
1) tu n'es pas mon debugger privé, juste quelqu'un qui veut bien aider et c'est sympa,
2) Je n'aime pas trop fournir quelque chose qui soit imparfait même si je compte par la suite le laisser en téléchargement libre. En effet, il y a dedans un "bug" (je ne sais comment l'appeler). Parmi les exports possibles : csv, sql, vcf, xml, Word, Excel, il y a aussi l'export en ebook au format epub. L'export se fait correctement. Je le récupère sur PC et l'ouvre sans problème avec un lecteur d'ebook PC ou avec le plug-in EPUBReader de Firefox. Mais si je l'importe avec un smartphone ou une tablette : Erreur ! En revanche, si j'ouvre ce fichier .epub avec Sigil (logiciel libre de création d'epub) et que SANS RIEN MODIFIER j'enregistre (donc: Fichier/Ouvrir et Fichier/Enregistrer dans la foulée) le problème est réglé et l'epub est lisible sur smartphone, ou tablette (bref, Android). Quand le problème sera réglé, il sera mis en téléchargement libre. J'ai cherché longtemps mais n'ai pas encore trouvé. Je laisse donc en standby et voulais juste ajouter la fonction Cloner une fiche dans laquelle je rencontre cette soumission de formulaire sur laquelle je butte. Et ton aide est la bienvenue sur tous les fronts... :-)
Merci.
PS: J'ai honte mais je n'ai jamais utilisé la console du navigateur et ne sais comment faire. :-((
Menu : Outils / Développement web / Console web : Onglet "Console"
TypeError: document.getElementById(...).submit is not a function
Dans la fonction javascript cloner() j'ai remplacé par mais avec l'une ou l'autre instruction j'ai le même message d'erreur.
NB: La première instruction de la fonction cloner() : est opérationnelle.
Tu as donc certainement une erreur ailleurs....
Mais comme tu ne veux pas nous montrer l'intégralité de ton code... ni de capture d'écran de ta console ( au chargement de la page PUIS lors du clic sur le bouton ).. IMPOSSIBLE de t'en dire plus !
Ce n'est pas que je NE VEUX PAS montrer mon code, mais l'intégralité du code PHP fait 3389 lignes !!!
Ce que je peux faire c'est :
1) Copier le code source d'une page à modifier (avant de cloner), de l'alléger (car le défi que je m'étais fixé était de TOUT faire en UN SEUL et UNIQUE script, images comprises) et poster le résultat ici.
2) t'envoyer l'intégralité du code en MP en te donnant quelques infos pour savoir où modifier le code (pour l'accès à la base de données) afin que tu l'utilises "en situation réelle" (ajouts, modifs, exports etc..) ça te permettra peut-être de mieux voir où ça peut coincer.
Voici donc le source HTML lorsqu'un enregistrement est affiché (pour modif ou clonage) :
Si tu veux le code PHP complet en MP, dis-le moi.
Si tu disposes d'un hébergement PHP/MySQL après avoir modifié les lignes avec les infos pour accéder à MySQL, il suffit de taper pour créer les tables, puis de l'utiliser.