Retourner aux forums || Retourner au forum Programmation.web
Programmation.web : Le beurre et l'argent du beurre
Posté par Gyro Gearllose () le 13 juin 2008Je suis confronté au problème suivant :
pour les besoins de plusieurs applications, un script php génère des formulaires en nommant les champs comme suit :
formField[0][clef1]
formField[1][clef2]
C'était très pratique, car lors de l'envoi du formulaire, on récupère automatiquement sur le serveur un tableau $_POST bien rempli et associatif.
Le problème, c'est que maintenant, j'ai du code javascript à ajouter à ces formulaires et qu'évidement en javascript, document.forms[0].formField[0][clef1] ne fonctionne pas.
D'ailleurs, je ne comprends pas pourquoi.
Etant donné que je ne peux pas modifier les scripts php qui représentent deux ans de boulot, au bas mot, il faut que je trouve une solution javascript pour traiter les informations côté client.
Voilà donc ma question : sachant que je ne connais à priori pas le type des champs de formulaire (text, select, textarea, checkbox, etc) ni leur nom, comment puis-je écrire une fonction javascript qui me récupère à coup sûr uniquement les valeurs saisies par l'utilisateur ?
Le but, assez simple finalement, serait d'avoir une méthode sûre pour récupérer les valeurs de tous les champs du formulaire avec du javascript, quel que soit le nom que ces champs portent.
Si vous avez des idées, je suis preneur. J'ai bien cherché avec google, sur le site du w3c, et quelques autres, mais je n'ai rien de probant pour l'instant, et visiblement, il semblerait qu'il n'y ait pas de règles pour le nommage des champs, hormis l'unicité des noms utilisés.
Merci pour toute aide, lien, conseil que vous pourrez me donner.
All articles which are excluded shall be deemed included
Tous les articles exclus sont considérés inclus
--Brian de Palma in Phantom of the Paradize
getElementsByName
Tu peux récupérer les objets grace à la méthode getElementsByName('formField[1][clef2]')
Ça marche je l'ai encore fait hier. Par contre il faut se méfier car tu obtient un tableau d'objets, que tu peux ensuite itérer avec un foreach.
De plus ton php ne voit que par la valeur de name="" il te reste la propriété id (ou class éventuellement) pour les différencier et les récupérer av getElementById().
bonne chance.
-
[^]Re: getElementsByName
Posté par Gyro Gearllose () le 13/06/2008 à 19:22. (lien). Évalué à 1.Bon, merci pour cette réponse. Je vais expliciter un peu plus ma problématique :
Voilà, je veux me coder un ensemble de fonctions génériques capables de gérer correctement les formulaires de mes applications.
Jusque là, ça fonctionnait du feu de dieu, mais il n'y avait que du code php.
Les champs n'ont pas été nommés ainsi pour le fun, il y a une logique derrière. En effet, parfois un formulaire n'intervient que sur une ligne d'une table de la base de données. Dans ce cas, le tableau formField ne descend que sur un niveau (0) et les clefs associatives correspondent aux nom des champs de la table en question.
Dans ce cas, avec par exemple une table avec deux champs, je n'aurai dans mon formulaire que formField[0][champ1] et formField[0][champ2].
Mais parfois, j'ai des formulaires qui interviennent sur plusieurs lignes d'une ou plusieurs tables.
Dans ce cas, pas de soucis avec notre modèle conceptuel, car pour chaque ligne, il nous suffit d'incrémenter le niveau de formField.
Ainsi, si je voulais pouvoir modifier sur un autre écran dix lignes simultanées de la même table que précédement, j'aurais :
formField[0][champ1]
formField[1][champ1] etc.
Maintenant que je fais ça en ajax, certes c'est moi qui construit la requête envoyée au serveur, et je peux artificiellement renommer mes champs avant d'envoyer les informations au serveur, je sais bien que ce n'est pas un soucis.
Ce que je voudrais c'est pouvoir récupérer au moins une information équivalente à ce que j'avais auparavant. Avec getElementsByName, il faut que le nom passé soit clairement identifié, mais comme je veux une fonction générique, pas moyen. Je ne connais pas le nom du dernier champs à priori.
Quand à l'id, il doit être unique, mais je me retrouve avec le même problème qu'avant.
Alors je ne vois pas trop comment procéder pour l'instant.
A moins de nommer mes champs formField_0-_champ1- et de remplacer _ par [ et - par ] par exemple, et de faire un eval dessus....
Mais il y a peut-être une façon de procéder plus propre ou plus maline.
Quoi qu'il en soit, avec firebug, j'ai bien pu voir que form.formField[0][champ1] existe, mais pas moyen d'y accéder. A croire que javascript est moins puissant que php de ce point de vue là et n'est pas capable de générer un tableau à la volée.
Voilà, j'espère que ma problématique est plus claire. Je suis ouvert à toute suggestion, et qui sait, peut-être que lundi, après trois nuitées de someil j'aurais cet éclair de génie dont j'ai tellement besoin pour régler le problème !--
All articles which are excluded shall be deemed included
Tous les articles exclus sont considérés inclus
--Brian de Palma in Phantom of the Paradize-
[^]Re: getElementsByName
Posté par Jean B () le 13/06/2008 à 19:39. (lien). Évalué à 4.Ok je comprend mieux ce que tu compte faire. Réinventer la roue...
Pour soumettre les formulaires via AJAX sans se prendre la tête il faut s'orienter du coté des bibliothèques/frameworks JavaScript telles que MooTools ou Prototype.
Tu trouvera facilement de la doc la dessus et ça permet de faire de l'AJAX quasi aussi facilement que du php tout en assurant une compatibilité entre les navigateurs ce qui est loin d'être évident avec la méthode "self made".-
[^]Re: getElementsByName
Posté par Raphaël Gertz (Jabber id, page perso, ) le 21/06/2008 à 13:28. (lien). Évalué à 2.Inclus jquery.js, voir http://jquery.com/
Puis un bête :
var data = $('form input,form select,form textarea').serialize();
Puis tu post en ajax les résultats :
$.post('quelquepart.php',data);
Il existe des callbacks, voir http://doc.jquery.com/Ajax
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.web



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.