Forum Programmation.web Le beurre et l'argent du beurre

Posté par  .
Étiquettes : aucune
0
13
juin
2008
Hello !
Je 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.
  • # getElementsByName

    Posté par  . Évalué à 4.

    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  . É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 !
      • [^] # Re: getElementsByName

        Posté par  . É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".

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.