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

AJAX Discussion :

Lier deux SELECT


Sujet :

AJAX

  1. #1
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 201
    Points : 92
    Points
    92
    Par défaut Lier deux SELECT
    Bonjour,
    Je voudrais par le biais d'un formulaire qu'un utilisateur efface des recettes des collections qu'il a crée. En faisant simplement tout marche mais je voudrais avoir deux select quand l'utilisateur dans le premier select va choisir une collection dans le deuxième select je voudrais avoir la liste des recettes liées à cette collection.
    J'ai essayé d'utiliser des portions de scripts que j'ai déjà utilisé dans certaines circonstances mais je m'en doutais cela ne marche pas. Quand je sélectionne une collection on dirais que la page s'actualise.
    Mon formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!--formulaire supprimer la recette d'une collection-->
                            <form action="vueCollections.php" method="post" class="formDelRec">
                                <div class="form-group mb-3">
                                    <select select class ="mescollections form-select" name="id_collRec"  onChange="chargerRecByCollection()">
                                        <option value="" selected>vos collections</option>
                                        <?php foreach($collections as $collection) : ?>
                                        <option value="<?=$collection['id_coll']?>"><?=$collection['titre_coll']?></option>
                                        <?php endforeach?>      
                                    </select>
                                    <select select class ="recettesByCollect form-select" name="id_rec">
                                    </select>
                                </div>
                                <input type="submit" name="submitDelRecByCollect" class=" mb-3" value="submit">
                           </form>
    Mon code js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function chargerRecByCollection() {
            collection_text= document.querySelector('.mescollections').value;
            console.log(collection_text);
            if(collection_text!="") {
                //j'ajoute l'id de la collection à mon URL
                window.location.href = "vueCollections.php?id_coll=" + collection_text;
                //recuperation des recettes pour le select page collections
            let file = "../ajax/recettesByCollect_ajax.php";
            fetch (file)
            .then(x => x.text())
            .then(y => document.querySelector("recettesByCollect").innerHTML = y);
            }
        }
    Enfin ma page recettesByCollect_ajax.php :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $recettesByCollection = $recettesController->getRecByCollection($id_coll = $_GET['id_coll'] ?? null);
     
    ?>
    <option selected>recettes</option>
      <?php foreach($recettesByCollection as $recetteCollect) :?>
          <option value="<?=$recetteCollect['id_rec']?>">
                  <?=$recetteCollect["titre"]?>
          </option> 
      <?php endforeach?>
    merci beaucoup pour votre aide

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 121
    Points
    44 121
    Par défaut
    Bonjour,
    Quand je sélectionne une collection on dirais que la page s'actualise.
    cela est dû à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //j'ajoute l'id de la collection à mon URL
    window.location.href = "vueCollections.php?id_coll=" + collection_text;
    Ce que je ne comprends pas c'est pourquoi en Ajax tu interroges une page, "../ajax/recettesByCollect_ajax.php", alors qu'en soumission directe tu en interroges une autre, "vueCollections.php" !

    De plus tu ne passes pas de paramètres lors de la soumission Ajax.

    Je partirais à priori sur quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const oSelect = document.querySelector('.mescollections');
    oSelect.addEventListener("change", chargerRecByCollection);
     
    function chargerRecByCollection() {
      const textSelected = this.value;
      if (textSelected != "") {
        //j'ajoute l'id de la collection à mon URL
        const file = "../ajax/recettesByCollect_ajax.php?id_coll=" + textSelected;
        //recuperation des recettes pour le select page collections
        fetch(file)
          .then(x => x.text())
          .then(y => document.querySelector("recettesByCollect").innerHTML = y);
      }
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 201
    Points : 92
    Points
    92
    Par défaut
    Bonjour,
    je vous remercie de votre aide
    mon idée est de sélectionner la collection dans la liste du select (l'utilisateur peut avoir crée plusieurs collections).
    Dans le deuxième select afficher la liste des recettes qui font parti de la collection sélectionnée, donc j'appel la page recettesByCollect_ajax.php
    puis lors du submit du formulaire suppression de la recette choisi.
    j'ai testé votre code mais mon deuxième select reste vide, j'ai l'impression que la page n'est pas appelée. J'ai bien mis aussi dans mon premier select onChange="...()"Hier soir j'ai adapté un code avec XMLHttpRequest() en mettant un paramètre : dans mon deuxième select par contre j'ai juste la première ligne de la page recettesByCollect_ajax.php, tout ce qu'il y a à l'intérieur de la boucle n'apparait pas (ma requête), j'ai même essayé de mettre une balise option en dur après la boucle mais rien...
    cette ligne ci apparait :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <option selected>recettes</option>

    voici mon code testé hier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function showRec(str) {
      if (str == "") {
        document.querySelector(".recettesByCollect").innerHTML = "";
        return;
      } else {
        alert(str);
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200) {
            document.querySelector(".recettesByCollect").innerHTML = this.responseText;
            alert(this.responseText);
          }
        };
        xmlhttp.open("POST","../ajax/recettesByCollect_ajax.php?q="+str, true);
        xmlhttp.send();
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onChange="showRec(this.value)"
    alert() c'était juste pour tester et il m'envoie bien l'id du premier select
    merci

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 121
    Points
    44 121
    Par défaut

    côté client, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlhttp.open("POST","../ajax/recettesByCollect_ajax.php?q="+str, true);
    et côté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $recettesByCollection = $recettesController->getRecByCollection($id_coll = $_GET['id_coll'] ?? null);

  5. #5
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 201
    Points : 92
    Points
    92
    Par défaut
    Bonjour,
    merci oui je n'avais pas vu désolé
    bonne journée.

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

Discussions similaires

  1. [MySQL] Lier deux select
    Par Sub217 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/10/2010, 00h14
  2. [Dojo] Lier deux dojox.grid.cells.Select dans un dojox.grid
    Par moukit233 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 03/09/2009, 15h18
  3. lier deux select
    Par Alex35 dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 17/04/2007, 17h05
  4. [Javascript] Comment lier deux liste de sélection
    Par orleans dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/04/2006, 07h12
  5. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 14h45

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