IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[PHP-JS] Manipuler en Javascript un tableau dans un formulaire PHP


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut [PHP-JS] Manipuler en Javascript un tableau dans un formulaire PHP
    Pourtant, toutes les docs sont claires et unanimes, dans tous les langages, l'accès à un tableau se fait par "montableau[numChamp]". Sauf que ...

    Contexte :
    Je travaille en PHP, je crée un formulaire avec un tableau de longueur variable, avec des cases à cocher (style un calendrier, et je coche les dates que je réserve). Et je souhaite mettre un bouton de commande "Tout chocher", ou de même "tout décocher". Et là, selon la syntaxe, soit le PHP marche, soit le Javascript.

    Solution 1 : pas de [] dans le formulaire HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='checkbox' name='semaine' value=$n >
    Le Javascript peut "Tout cocher" en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for (i=0;i<52,i++) document.forms.f_resa.semaine[i].checked =true;
    Dans ce cas le PHP suivant ne récupère que la dernière valeur : si je coche 12 semaines, seule la 12° (la valeur 38 ) arrive dans le champ _HTTP_POST_VARS['semaine'].

    Solution 2 : cette fois, je mets des [] dans le HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='checkbox' name='semaine[]' value=$n >
    Ici, le PHP récupère toutes les valeurs dans le tableau $_REQUEST('semaine'], c'est nickel.
    Mais cette fois, c'est le Javascript qui ne fait rien losque je clique sur "Tout cocher".

    J'ai fait les même essais avec des zones de texte (colonne 'hidden' qui contient la valeur de la case à cocher), rien à faire, mais rien de rien. C'est quand même fou !

    Sinon, la dernière idée, c'est de mettre dans mon formulaire un champ texte 'hidden' unique, qui va contenir la totalité du tableau "à plat", du style "Semaine1=Oui ; Semaine2=Oui, Semaine3=Non, ....". Charge au PHP qui recevra ça de tout décomposer. Ca devrait marcher, mais je trouverais ça dommage de bâtir une usine à gaz, pour un truc qui parait "ordinaire".

    Merci d'avance pour votre coup de main.

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    effectivement il te faut les [] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checks = document.getElementsByName("semaine[]");
    apres tu boucle sur checks

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut [Résolu]
    Excusez-moi messires,

    Depuis 2 semaines je suis sur ce seul pb, toutes les nuits, dans les cours, dans les FAQ, et à lire les 40 premières pages des forums.
    Ne trouvant rien, je finis par me décider à écrire un post.
    Du coup je m'inscrit, et je poste ma demande (hier soir).
    Et ce midi je découvre un bouton : "Recherche avancée". Grâce à cette recherche avancée, je trouve un sujet équivalent au mien, résolu le 17 février 2005 par un certain "Javatwister".

    Après des tests cet après-m, ça marche super.
    Donc merci beaucoup à lui, et désolé d'avoir envoyé un post "inutile". Je n'avais jamais vu ce bouton.
    De même que dans les règles du forum, il est conseillé d'utiliser le bouton "résolu" en bas à gauche.... que je ne trouve pas.

    Je n'avais trouvé cette syntaxe form.elements["list[]"] dans aucun cours, aucune FAQ. De même que "getElementsByName" ; disons que ce genre de méthode est plus souvent utilisée pour de la programmation dynamique, alors que moi, je voulais juste cocher des cases, sans modifier l'allure du formaulaire.

    En tout cas merci beaucoup.

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    alors, en fait ces deux solutions sont équivalentes, l'une utilise le dom (manipulation de la page a l'aide d'un arbre), l'autre non

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut Merci
    Et moi ça m'a aussi permis de resoudre un probleme sur lequel je butais depuis un moment.
    Je ne connaissais pas non plus cette syntaxe : form.elements['zone[]']
    Je suis débutante et j'ai appris un nouveau truc qui effectivement ne figure pas ma bible javascript.

    Un grand Merci à vous deux !!! C'est top (meme 4 ans aprés )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Placer un tableau dans u post php
    Par fakeclk dans le forum Android
    Réponses: 5
    Dernier message: 13/06/2012, 17h49
  2. [SOAP] Tableau dans un client PHP
    Par nezdeboeuf62 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/11/2009, 16h13
  3. [PHP 5.0] Popup Javascript dans mon formulaire PHP
    Par kykyboogy dans le forum Langage
    Réponses: 7
    Dernier message: 05/02/2009, 23h36
  4. Réponses: 4
    Dernier message: 17/02/2008, 15h54
  5. [ STRUTS ] [ LOGIC:ITERATE ] tableau dans un formulaire
    Par LoulouFifi dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/06/2004, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo