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 :

Envoi requête Ajax/jQuery/Php en deuxième instance


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Par défaut Envoi requête Ajax/jQuery/Php en deuxième instance
    Bonjour ,

    Je me permets de vous contacter afin de m'aider à résoudre mon problème .
    Je dois faire une arborescence de menu et sous menu ( Domaines -> Objectifs -> Attentes ) afin de faciliter le choix de ces dernières .

    Voici mon code et je vous explique ce qui en ressort :

    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
                <select class="custom-select custom-select-md lg-3" name="eleves" id="eleves">
                <option value="0">Sélectionner un élève</option>
                <?php
     
    $reponse = $bdd->query('SELECT * FROM eleves ORDER BY eleveCycle');
     
    while ($donnees = $reponse->fetch())
    {
    ?>
               <option value="<?php echo $donnees['eleveNom']?>"> <?php echo $donnees['eleveNom'] . "  " . $donnees['elevePrenom'] . " - " . "Cycle " . $donnees['eleveCycle'];?>
     
               </option>
               <?php };?>
               </select>
       </div>
     
       <div class="form">
            <select class="custom-select custom-select-md lg-3" name="domaines" id="domaines">
           	<option value="0">Sélectionner le domaine </option>
                <?php
     
    $reponse2 = $bdd->query('SELECT DISTINCT matieresID FROM attentes_fondamentales');
     
    while ($donnees = $reponse2->fetch())
    {
    ?>
            <option value="<?php echo $donnees['matieresID']?>"> <?php echo $donnees['matieresID'];?></option>
     
               <?php };
    ?>
           </select>
    <?php 
    $reponse->closeCursor();
    $reponse2->closeCursor();?>
     
       </div>
          <div class="form">
           <select class="custom-select custom-select-md lg-3" name="objectifs" id="objectifs">
            <option value="0">Sélectionner l'Objectif</option>
           </select>
        </div>
     
        <div class="form">
           <select class="custom-select custom-select-md lg-3" name="attentes" id="attentes">
            <option value="0">Sélectionner l'attente fondamentale</option>
           </select>
     
     
       </div>

    Partie Script :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <script>  
     $(document).ready(function(){ 
      $('#objectifs').hide();
      $('#attentes').hide();
          $('#domaines').change(function(){  
               var domaines = $(this).val();
               $('#objectifs').show();
               console.log(domaines);
               $.ajax({  
                    url:"load_data.php",
                    dataType: "json",  
                    method:"GET",  
                    data:{domaines:domaines},  
                    success:function(data){
                    console.log(data);  
                         $('#objectifs').html(data);  
                    }
               });  
          });
          $('#objectifs').change(function(){  
               var objectifs = $(this).val();
               $('#attentes').show(); 
               console.log(objectifs);
               $.ajax({  
                    url:"load_data2.php",
                    dataType: "json",
                    method:"GET",  
                    data:{objectifs:objectifs},  
                    success:function(data){  
                         $('#attentes').html(data);  
                    }  
               });  
          });   
     });  
     </script>
    1er Ajax :

    Code php : 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
    18
    19
    20
    <?php
    include 'bsd.php';
    if (isset($_GET['domaines'])) 
    {
     
    $domaines = $_GET['domaines'];
    $req = $bdd->query("SELECT DISTINCT Objectifs FROM attentes_fondamentales WHERE matieresID = '$domaines'");
    $options="";
    		while($donnees = $req->fetch())
    		{
        			$options.='<option value=' . $donnees["Objectifs"] .'>'.  $donnees["Objectifs"].'</option>';
        	}
     
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    $req->closeCursor();
     
    }
     
    ?>

    2eme Ajax :

    Code php : 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
    18
    <?php
    include 'bsd.php';
    if (isset($_GET['objectifs'])) 
    {
     
    $objectifs = $_GET['objectifs'];
    $req = $bdd->query("SELECT attentesNom FROM attentes_fondamentales WHERE Objectifs = '$objectifs'");
    $options="";
    		while($donnees = $req->fetch())
    		{
        			$options.='<option value=' . $donnees["attentesNom"] .'>'. $donnees["attentesNom"].'</option>';
        	}
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    $req->closeCursor();
    }
     
    ?>


    Voici maintenant ce qui se passe :

    - Le premier retour Ajax fonctionne parfaitement , il me renvoie dans le menu les bons termes , et les bonnes options value dans la console .
    - Le deuxième en revanche ne fonctionne pas , cela me laisse un sous menu vide .

    En regardant dans la console , le console.log me ressort que le premier mot de la phrase qui doit être comparé avec la BDD . Du coup , la requête fait dans la deuxième req Ajax ne peut pas fonctionner .
    En regardant dans l'onglet réseau , je vois la requête GET fonctionner mais elle ne prend que le premier mot .
    En faisant des tests en créant une attente qui ne se compare qu'avec le premier mot ( et non la phrase ) , la requête fonctionne car cela remplit le dernier champ .

    Je ne sais pas si j'ai été clair tout du long , mais je galère et j'aimerais vraiment de l'aide .

    Merci d'avance pour votre implication !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 679
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 679
    Par défaut
    je n'ai pas très bien compris cette partie, vous pouvez nous montrez un exemple de 1er mot et de phrase ?
    Citation Envoyé par Sauruos Voir le message
    En regardant dans la console , le console.log me ressort que le premier mot de la phrase qui doit être comparé avec la BDD . Du coup , la requête fait dans la deuxième req Ajax ne peut pas fonctionner .
    En regardant dans l'onglet réseau , je vois la requête GET fonctionner mais elle ne prend que le premier mot .
    En faisant des tests en créant une attente qui ne se compare qu'avec le premier mot ( et non la phrase ) , la requête fonctionne car cela remplit le dernier champ .

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- si je comprends bien, les value des <option> peuvent être composés de plusieurs mots, séparés par des espaces.

    1a-> Il manque des "..." aux value *.

    Actuellement, tu obtiens :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value=plusieurs mots>plusieurs mots</option>
    Seul "plusieurs" est pris en compte.

    1b-> D'autre part, pour peu que le texte comporte aussi des apostrophes ou guillemets, il faut utiliser SYSTÉMATIQUEMENT htmlspecialchars() A L'AFFICHAGE.

    Il faut remplacer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
        			$options.='<option value=' . $donnees["attentesNom"] .'>'.  $donnees["attentesNom"].'</option>';
    par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
        			$options.='<option value="'. htmlspecialchars($donnees["attentesNom"]) .'">'.  htmlspecialchars($donnees["attentesNom"]) .'</option>';

    *@mathieu
    C'est justement le "...avec le premier mot ( et non la phrase )..." qui m'a mis la puce à l'oreille



    2- D'autre part, il faut PREPARER les requêtes pour les SECURISER :
    remplacer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = $bdd->query("SELECT attentesNom FROM attentes_fondamentales WHERE Objectifs = '$objectifs'");
    par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = $bdd->prepare("SELECT attentesNom FROM attentes_fondamentales WHERE Objectifs = ?");
    $req->execute( array($objectifs) );


    Idem pour les autres scripts.
    Dernière modification par Invité ; 09/09/2018 à 14h06.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Par défaut
    @mathieu : désolé si je n'ai pas été clair

    Par rapport au message cité , effectivement tu as compris mon problème !
    J'ai testé en faisant les modifications htmlspecialcharts et les requetes préparées mais j'ai toujours le même resultat au final seul le premier mot de la phrase est pris en compte ...
    J'ai fait le test console et réseau , toujours le même résultat ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re-montre ton code (après corrections).

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Par défaut
    Code php : 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
    18
    19
    20
    21
    <?php
    include 'bsd.php';
    if (isset($_GET['domaines'])) 
    {
     
    $domaines = $_GET['domaines'];
    $req = $bdd->prepare("SELECT DISTINCT Objectifs FROM attentes_fondamentales WHERE matieresID = '$domaines'");
    $req->execute( array($objectifs) );
    $options="";
    		while($donnees = $req->fetch())
    		{
        			$options.='<option value=' .  htmlspecialchars($donnees["Objectifs"]) .'>'.   htmlspecialchars($donnees["Objectifs"]).'</option>';
        	}
     
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    $req->closeCursor();
     
    }
     
    ?>

    Code php : 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
    18
    19
    <?php
    include 'bsd.php';
    if (isset($_GET['objectifs'])) 
    {
     
    $objectifs = $_GET['objectifs'];
    $req = $bdd->query("SELECT attentesNom FROM attentes_fondamentales WHERE Objectifs = ?");
    $req->execute( array($objectifs) );
    $options="";
    		while($donnees = $req->fetch())
    		{
        			$options.='<option value=' . htmlspecialchars($donnees["attentesNom"]) .'>'. htmlspecialchars($donnees["attentesNom"]).'</option>';
        	}
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    $req->closeCursor();
    }
     
    ?>

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

Discussions similaires

  1. Requête AJAX vers PHP, back-end JSON et résultat
    Par wenijah dans le forum jQuery
    Réponses: 2
    Dernier message: 23/04/2012, 14h19
  2. [AJAX] Ajax jQuery PHP
    Par pit0n dans le forum AJAX
    Réponses: 2
    Dernier message: 18/08/2011, 16h45
  3. envoi variable ajax jquery
    Par amine.h dans le forum jQuery
    Réponses: 7
    Dernier message: 22/07/2009, 19h05
  4. [Prototype] Problème dans requête ajax
    Par tibo894 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 27/05/2009, 14h54
  5. [MySQL] Problème de requête imbriquée (mysql) & php
    Par niacinside dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/05/2008, 10h59

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