11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Cela fait maintenant quelque jours que je cherche une réponse à mon problème sans succès donc je le pose ici en espérant avoir des réponses.

Alors voilà, je code un site avec Symfony sur PhpStorm. Dans mon site j'ai fait un bouton dynamique qui fait apparaitre une liste déroulante à chaque fois que l'utilisateur touche le bouton. Je veux maintenant récuperer chaque valeur choisie pour les listes crées et les enregistrer avec DOCTRINE. Cependant je n'ai pas trouvé de méthode adéquate...

Voici ce que j'ai essayé:

J'ai fait le bouton dans mon fichier html. À l'aide de Js j'ai fait apparaitre des listes à chaque clique de bouton. Dans ma fonction Js j'ai mis un compteur afin de savoir combien de listes on été créée.
Voici le code Js:

  <script>
            var compteur=0;
            function viewListe(){
                document.getElementById('maListe').innerHTML += '            <label for="userR">\n' +
                    '            <select name="'+compteur+'" id="'+compteur+'" >\n' +
                    '                <option value="vide">Pour validation</option>\n' +
                    '                {% for user in listeUsers %}\n' +
                    '                    {% if userCo.id!=user.id %}\n' +
                    '                        <option value="{{ user.id }}">{{ user.lastname|upper }} {{ user.firstname }}</option>\n' +
                    '                    {% endif %}\n' +
                    '                {% endfor %}\n' +
                    '               <option value="compteur">'+compteur+'</option>\n' +
                    '            </select>\n' +
                    '            </label> <br/>';
                    compteur++;
            }

        </script>

Voici le code du bouton en question:

        <input type="button"  onclick="viewListe()" value="+"><br/>
        <p id="maListe"></p><br/>


Ce que je voulais faire ensuite était de récupérer les valeurs de chaque liste dans mon controller à l'aide d'une boucle for. For(i=0;i<compteur;i++): récupérer les valeurs des listes i et les enregistrer. J'ai essayé par exemple d'ajouter 3 listes de mettre un i<3 dans mon for pour voir si tout s'enregistrer bien comme il faut et c'est le cas. Cependant impossible pour moi de trouver comment récupérer la valeur du compteur pour l'utiliser dans mon for.

Voici ma boucle for:


                for($i=0;$i<3;$i++){
                    $idR=$request->request->get($i);
                    $identifiantR=new Identifiants();
                    $utilisateurR=$this->getDoctrine()->getRepository(User::class)->find($idR);
                    $identifiantR->setUserFiche($utilisateurR);
                    $identifiantR->setFicheNCUser($ficheNC);
                    $identifiantR->setStatut('Reçue');
                    $manager->persist($identifiantR);

                }


Qui lorsque je pose le nombre de liste marche très bien.

Je n'ai réussi nul part à trouver comment récupérer ma variable compteur de Js dans ma boucle for Php et je commence à croire que ce n'est pas possible.... Si quelqu'un peut m'aider à trouver comme récupérer ma variable compteur, ou à trouver un autre moyen de récupérer les valeurs des listes pour pouvoir les enregistrer je leur en serai très reconnaissante.

Merci beaucoup Smiley smile
Modifié par romane_pm (07 Nov 2019 - 14:36)
Il faut mettre tes <select> dans un formulaire <form> et prévoir de traiter les données du formulaire sur le serveur.
S'il y a plusieurs <select> à actualiser "en live", il faut déclencher l'envoi du formulaire avec sa fonction submit() à chaque évènement 'click' déclenché par <select>.

C'est quoi l'intérêt d'utiliser Javascript pour nourrir les <select> avec les <options> ? Smiley decu
Et en plus, ta méthode est lourde.
Cela peut se faire directement sur le serveur en PHP.

Si ta page HTML est très lourde et que tu ne veux pas la rechanger, il faut utiliser XMLHttpRequest en Javascript mais cela complique le problème.
Salut

je rejoins un peu bazooka sur l'utilisation des forms.

tous éléments input/select etc... qui ont un attribut name="" vont être reçu en PHP dans ta Request $request (symfony) il suffit de regarder dedans du coup.
Modifié par JENCAL (08 Nov 2019 - 14:03)
Petite astuce :
Lorsque je tombe sur un formulaire mal fichu ou compliqué, je crée le fichier "/variables.php" à la racine du site avec simplement ceci :
<?php phpinfo(INFO_VARIABLES); ?>

Et je modifie la balise d'ouverture du formulaire comme ceci
<form action="/variables.php"  method="post">
<!--- pour voir ce que renvoie le formulaire  -->
</form>

Cela permet de savoir ce que va recevoir le serveur sans utiliser xdebug
Bien sûr, cela va pour faire des tests. En production, il faut virer ce fichier.
Modifié par bazooka07 (08 Nov 2019 - 21:18)
Javascript s'éxécute dans le navigateur, PHP sur le serveur. Donc, dans l'immense majorité des cas… pas sur la même machine.

Passer une variable de javascript à PHP n'est donc pas directement possible, et il convient de l'envoyer explicitement depuis le navigateur au serveur, soit via un form HTML, soit en envoyant une requête HTTP avec XMLHttpRequest ou fetch().

Mais je ne suis pas bien sûr que c'est ce que tu cherches.