[RESOLU] select 1=>select 2

Eléphant du PHP | 183 Messages

08 oct. 2015, 14:08

Salut à tous !
Bon je post car j'ai un soucis avec un script ajax que j'ai récupéré sur le net pour le modifier, oui je l'ai pas créé car je connais pas javascript, ajax et tous ça...
Le probleme est courant mais pas facile, j'ai un premier select avec des langues (parlé pas de boeuf :D ) et suivant la langue choisis, un 2eme select va se remplir avec le resultat de ma requete php/sql qui dit " cherche users dans la table inscription qui parle lang= $lang", en gros c'est ça voir code en dessous.
Et donc pour l'instant j'ai bien mon premier select qui se remplit via bdd mais dès que je choisis une langue le 2eme select est vide.....

Voici le code html/ajax (pas de balise html car c'est une page incluse dans un conteneur div et jaaser c'est un user) :

Code : Tout sélectionner

<?php include 'config-connexion.php'; include 'select_chat_accueil.php'; ?> <script type="text/javascript" > $(document).ready(function() { var $lang = $('#lang'); var $choisir_jaaser = $('#choisir_jaaser'); // chargement des langues $.ajax({ url: 'select_chat_accueil.php', data: 'go', // on envoie $_GET['go'] dataType: 'json', // on veut un retour JSON success: function(json) { $.each(json, function(index, value) { // pour chaque noeud JSON // on ajoute l option dans la liste $lang.append('<option value="'+ index +'">'+ value +'</option>'); }); } }); // à la sélection d une langue de la liste $lang.on('change', function() { var val = $(this).val(); // on récupère la valeur de la langue if(val != '') { $choisir_jaaser.empty(); // on vide la liste des users $.ajax({ url: 'select_chat_accueil.php', data: 'id_lang='+ val, // on envoie $_GET['id_lang'] dataType: 'json', success: function(json) { $.each(json, function(index, value) { $choisir_jaaser.append('<option value="'+ index +'">'+ value +'</option>'); }); } }); } }); }); </script> <select id="lang" name="lang"> <option value="">-- Langue --</option> </select> <select id="choisir_jaaser" name="choisir_jaaser"> <option value="">-- utilisateur--</option> </select>
Voici le php :

Code : Tout sélectionner

<?php if(isset($_GET['go']) || isset($_GET['id_lang'])) { // connexion à la base de données try { $bdd = new PDO ('mysql:host=localhost;dbname=xxx;charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $json = array(); if(isset($_GET['go'])) { // requête qui récupère les langues $requete = "SELECT lang FROM langue ORDER BY lang"; // exécution de la requête $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo())); // résultats while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) { $json[$donnees['lang']][] = utf8_encode($donnees['lang']); } // envoi du résultat echo json_encode($json); } else if(isset($_GET['id_lang'])) { $id =$_GET['id_lang']; // requête qui récupère les users qui ont la langue choisi dans le premier select $requete = "SELECT users FROM inscription WHERE lang_1 = ". $id ." OR lang_2 = ". $id ." OR lang_3 = ". $id ." "; // exécution de la requête $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo())); // résultats while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) { // je remplis un tableau $json[$donnees['users']][] = utf8_encode($donnees['users']); } // envoi du résultat echo json_encode($json); } } ?>
Liens où j'ai trouver le script :
http://chez-syl.fr/2012/02/jquery-rempl ... tre-liste/

Voilà merci pour votre futur aide :-D

Mammouth du PHP | 2703 Messages

08 oct. 2015, 16:00

que dit la console quand une sélection est faite dans la 1ère liste ? une url est-elle bien appelée ? quand on ouvre cette url, on a bien le json attendu ?

Eléphant du PHP | 183 Messages

08 oct. 2015, 16:05

En fait j'arrive pas debugger avec des var_dump ou printr comme je fais d'habitude, rien s'affiche, pas d'erreur, juste le 2eme select qui passe de choisir jaaser à vide...

Eléphant du PHP | 183 Messages

09 oct. 2015, 12:02

Personne n'a une idée ? :d

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

09 oct. 2015, 19:02

Pour debuguer des requêtes ajax, la solution la + basique est d'utiliser la console de développement de ton navigateur (Ctrl+i), puis dans l'onglet réseau tu verras les requêtes qui sont effectuées et en cliquant sur les requêtes tu verras la réponse du serveur (et les éventuels avr_dump que tu auras effectués.
N'oublie pas aussi de regarder la console javascript (idem dans Ctrl+i) et les logs PHP directement sur ton serveur pour gagner du temps.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 183 Messages

09 oct. 2015, 21:51

ok merci pour ces infos, je vais essayé de debugger comme ça et reviens pour vous dire où ça en est. Merci.

Eléphant du PHP | 183 Messages

09 oct. 2015, 22:27

yahoooooooooooo !! Merci grâce à ton astuce j'ai pu déboggé seul, merci encore !
Sinon c’était une bête erreur d'apostrophes dans ma requête mysql....
Bon maintenant que j'ai réussi à l’adapté à mes besoins, je vais pouvoir ajouter 2 , 3 trucs pour qu'il soit parfait :-D
du coup j’attends un peu pour mettre résolu, qu'il soit vraiment finaliser.

EDIT =>
Voilà j'ai ajouté une fonction de plus et tout est ok . Encore un grand merci pour l'astuce de débogage.
a bientôt !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 oct. 2015, 02:44

Ravi d'avoir pu t'aider, et maintenant tu sais débuguer de l'ajax ! :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 183 Messages

12 oct. 2015, 09:47

oui c'est vraiment cool merci encore !
Dis moi, en ajax, tu sais faire un appel a une fonction toutes les 5s qui remplit un <p>, un exemple.