gudule1er Posted September 23, 2014 Share Posted September 23, 2014 (edited) Bonjour, J'essai d'actualiser une liste déroulante dans un module et j'ai une erreur 500 dans la console : GET https://mnsite.fr/modules/compatibilite/compatibilite.php?compa1=1 500 (Internal Server Error) jquery-1.11.0.min.js:4send jquery-1.11.0.min.js:4n.extend.ajax jquery-1.11.0.min.js:4(anonymous function) compatibilite.js:6n.event.dispatch jquery-1.11.0.min.js:3r.handle mon script js $(document).ready(function(){ $("#compa1").change(function() { var selectedVal = $('#compa1 :selected').val(); console.log('Selected value : ' + selectedVal); var val = jQuery(this).val(); $.ajax({ url: '../../modules/compatibilite/compatibilite.php', data: 'compa1='+ val, // on envoie $_GET['compa1'] dataType: 'html', success: function(json) { $.each(json, function(index, value) { $('#compa2').append('<option value="'+ index +'">'+ value +'</option>'); }); } }); console.log('Data : ' + val); }); }); si quelqu'un peu me filer un coup de main ça serait cool... merci Edited October 1, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
FruitySeo Posted September 23, 2014 Share Posted September 23, 2014 Bonjour, Je pense que c'est l'espace (1 500) qui cause l'erreur. Cdt, Link to comment Share on other sites More sharing options...
YopixelAE Posted September 23, 2014 Share Posted September 23, 2014 Bonjour, Ne multipliez pas les topics sur le même sujet. Vous avez reçu beaucoup de réponses dans le topic initial. Poursuivez-le ! Link to comment Share on other sites More sharing options...
gudule1er Posted September 23, 2014 Author Share Posted September 23, 2014 Bonjour, la je parle d'un module avec une page d'admin dans le BO et non plus d'un controleur dans le FO... pas vraiment la même chose à mon sens Merci Link to comment Share on other sites More sharing options...
gudule1er Posted September 23, 2014 Author Share Posted September 23, 2014 Bonjour, Je pense que c'est l'espace (1 500) qui cause l'erreur. Cdt, le 500 derrière le 1 est le code de l'erreur... le 1 étant la valeur que j'envoi Link to comment Share on other sites More sharing options...
YopixelAE Posted September 23, 2014 Share Posted September 23, 2014 En effet, mais c'est toujours le même souci. Déjà répondu par Loulou66 et moi-même. Vous ne lisez pas les réponses. Déjà expliqué aussi, entre autre, que c'est POST en non GET en protocole AJAX dès lors qu'il y a un envoi de valeur. Link to comment Share on other sites More sharing options...
gudule1er Posted September 23, 2014 Author Share Posted September 23, 2014 biensur que je lis les réponses... j'ai même eu loulou66 via skype et qui ne comprend pas non plus pourquoi j'ai (anonymous function) sur $.ajax alors que nous avons bien vérifier que jquery est appelé avant mon script... et j'ai pareil pour POST... (anonymous function) Link to comment Share on other sites More sharing options...
YopixelAE Posted September 24, 2014 Share Posted September 24, 2014 Il ressemble à quoi ce fichier compatibilite.php ? C'est lui qui doit provoquer l'erreur. Link to comment Share on other sites More sharing options...
gudule1er Posted September 24, 2014 Author Share Posted September 24, 2014 je met ce qu'il y a dans la fonction getContent() public function getContent(){ global $smarty; Tools::addJS(($this->_path).'js/compatibilite.js', 'all'); $req_sortie=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite1'); $req_sortie2=Db::getInstance()->ExecuteS('select id, id_compa1, value from '._DB_PREFIX_.'compatibilite2'); $req_sortie3=Db::getInstance()->ExecuteS('select id, id_compa1, id_compa2, value from '._DB_PREFIX_.'compatibilite3'); if (Tools::isSubmit('submitCompa1')) { $value_insert_compa1=Tools::getValue('text_compa1'); if ($value_insert_compa1!="") { $insert_db_compa1=dB::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'compatibilite1 SET value="'.$value_insert_compa1.'" ON DUPLICATE KEY UPDATE value="'.$value_insert_compa1.'"'); unset($value_insert_compa1); } } if (Tools::isSubmit('submitCompa2')) { $value_insert_compa2=Tools::getValue('text_compa2'); $id_insert_compa1=Tools::getValue('compa1'); if ($value_insert_compa2!="") { $insert_db_compa2=dB::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'compatibilite2 SET value="'.$value_insert_compa2.'", id_compa1="'.$id_insert_compa1.'"'); unset($value_insert_compa2); } } if (Tools::isSubmit('submitCompa3')) { $value_insert_compa3=Tools::getValue('text_compa3'); $id_insert_compa2=Tools::getValue('compa2'); $id_insert_compa1=Tools::getValue('compa1'); if ($value_insert_compa3!="") { $insert_db_compa2=dB::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'compatibilite3 SET value="'.$value_insert_compa3.'", id_compa1="'.$id_insert_compa1.'", id_compa2="'.$id_insert_compa2.'"'); unset($value_insert_compa3); } } $this->_html.=' <h2>Configuration du module de '.$this->displayName.'</h2> <h2>Première option</h2> <form method="post" method="updateCompa1"> <select name="compa1" id="compa1"> <option value="select">-- Sélectonner une option --</option>'; foreach($req_sortie as $value_select_req) { $id_compa1=$value_select_req['id']; $value_compa1=$value_select_req['value']; $this->_html.='<option value='.$id_compa1.'>'.$value_compa1.'</option>'; } $this->_html.=' </select> <p>ou entrer une nouvelle option dans la base</p> <input type="text" name="text_compa1"></input> <button type="submit" name="submitCompa1">Update</button> <h2>Deuxième option (dépend de l\'option 1)</h2> <select name="compa2" id="compa2"> <option value="select">-- Sélectonner une option --</option>'; foreach($req_sortie2 as $value_select_req2) { $id_compa2=$value_select_req2['id']; $value_compa2=$value_select_req2['value']; $this->_html.='<option value='.$id_compa2.'>'.$value_compa2.'</option>'; } $this->_html.=' </select> <input type="text" name="text_compa2"></input> <button type="submit" name="submitCompa2">Update</button> <h2>Troisième option (dépend de l\'option 1 et 2)</h2> <select name="compa3" id="compa3"> <option value="select">-- Sélectonner une option --</option>'; foreach($req_sortie3 as $value_select_req3) { $id_compa3=$value_select_req3['id']; $value_compa3=$value_select_req3['value']; $this->_html.='<option value='.$id_compa3.'>'.$value_compa3.'</option>'; } $this->_html.=' </select> <input type="text" name="text_compa3"></input> <button type="submit" name="submitCompa3">Update</button> </form> '; return $this->_html; } dans le BO j'ai bien les listes déroulantes ainsi que la possibilité d'ajouter des valeurs dans la BDD et ça fonctionne Link to comment Share on other sites More sharing options...
YopixelAE Posted September 24, 2014 Share Posted September 24, 2014 (edited) Ce n'est pas un fichier controlleur, la fonction getContent() et process ne concernent que les infos du form. Traitez la requête AJAX de votre script.js dans un fichier distinct, ce sera + lisible. Exemple fichier compatibilite.php : Cf. Doc donnée en lien Edited September 24, 2014 by Yopixel (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 24, 2014 Author Share Posted September 24, 2014 si je comprend bien, il faudrait que je fasse un fichier PHP distinct pour traiter mes requêtes du fichier JS ? 1 Link to comment Share on other sites More sharing options...
Prestaspirit Posted September 24, 2014 Share Posted September 24, 2014 Bonjour, Est-ce que vous avez lu la documentation à propos des requêtes Ajax avec les modules Prestashop? Comment utiliser Ajax au sein de PrestaShop 1 Link to comment Share on other sites More sharing options...
YopixelAE Posted September 24, 2014 Share Posted September 24, 2014 (edited) si je comprend bien, il faudrait que je fasse un fichier PHP distinct pour traiter mes requêtes du fichier JS ? Oui, par exemple fichier ajax.php dans votre module. Extrait de la DOC (edit: voir le lien donné) : // Located in /modules/mymodule/ajax.php require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); switch (Tools::getValue('method')) { case 'myMethod' : ... // What you want break; default: exit; } exit; Edited September 24, 2014 by Yopixel (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 24, 2014 Author Share Posted September 24, 2014 ok je n'avais pas vu cette doc... je regarde tout ça... je vous fait un retour... merci 1 Link to comment Share on other sites More sharing options...
Prestaspirit Posted September 24, 2014 Share Posted September 24, 2014 Si vous avez besoin d’accéder à la classe principale de votre module vous pouvez aussi inclure le fichier, ma méthode consiste à récupérer la variable action et ajax et d’appeler une méthode ajaxCall de ma classe principale : <?php $useSSL = true; include(dirname(__FILE__).'/../../../config/config.inc.php'); include(dirname(__FILE__).'/../../../init.php'); include(dirname(__FILE__).'/../MyModule.php'); $mymodule = new MyModule(); echo $mymodule->ajaxCall(Tools::getValue('ajax'), Tools::getValue('action')); ensuite je switch dans ma methode principale pour avoir mon retour ( en json tjrs !) mais si vous savez que vous allez avoir une seul action vous pouvez juste créer une méthode displayAjaxMonaction() 1 Link to comment Share on other sites More sharing options...
gudule1er Posted September 24, 2014 Author Share Posted September 24, 2014 oula, je vais déjà essayer de mettre en place comme dans la doc... je verrai ensuite pour faire tout ce que je veux... Link to comment Share on other sites More sharing options...
gudule1er Posted September 24, 2014 Author Share Posted September 24, 2014 quand je met "var query $.ajax" dans la console j'ai : Uncaught SyntaxError: Unexpected identifier Link to comment Share on other sites More sharing options...
gudule1er Posted September 24, 2014 Author Share Posted September 24, 2014 une autre question, dans l'onglet "ressources" de la console, l'ordre d'appel des scripts est bien à la suite ou classé par ordre alphabétique ? Link to comment Share on other sites More sharing options...
gudule1er Posted September 25, 2014 Author Share Posted September 25, 2014 Bonjour, j'ai toujours le soucis d'une erreur 500 sur mon fichier ajax.php mon fichier js $(document).ready(function(){ $("#compa1").change(function() { var selectedVal = $('#compa1 :selected').val(); console.log('Selected value : ' + selectedVal); var val = jQuery(this).val(); var query = $.ajax({ type: 'POST', url: '../../modules/compatibilite/ajax.php', data: 'compa1='+ val, // on envoie $_GET['compa1'] dataType: 'json', success: function(json) { $.each(json, function(index, value) { $('#compa2').append('<option value="'+ index +'">'+ value +'</option>'); }); } }); console.log('Data : ' + val); }); }); et mon fichier ajax.php require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); include(dirname(__FILE__).'/compatibilite.php'); switch (Tools::getValue('compa1')) { case 'compa1' : $filtre_compa2=$_POST['compa1']; $aff_filtre_compa2=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); foreach ($aff_filtre_compa2 as $result_compa2) { die( Tools::jsonEncode( array('id_compa2'=>'id') ('value_compa2'=>'value') ); } break; default: exit; } exit; je comprend pas tout, mais ça vous avez du le voir, de plus j'ai toujours (anonymous function) sur la ligne 6 de mon fichier js qui est var query =$.ajax etc merci pour votre aide Link to comment Share on other sites More sharing options...
Prestaspirit Posted September 25, 2014 Share Posted September 25, 2014 Je pense qu'il vous manque quelques notions de codage mais là c'est plus du ressort du forum prestashop vous feriez mieux d'aller poser la question sur le site du zero ou Alsacréation 1 Link to comment Share on other sites More sharing options...
YopixelAE Posted September 25, 2014 Share Posted September 25, 2014 (edited) var query = $.ajax({ ... ?! AJAX est asynchrone par défaut, vous ne pouvez pas affecter comme ceci le résultat à la variable query. D'ailleurs dans quel but ? Si vous avez un but, passez en asynchrone (async = false) ou bien définissez votre variable dans le success (success : function (data) { var query = data;} et si vous n'avez pas de but n'affectez rien ! Par ailleurs les chemins d'appel à compatibilite.php sont-ils corrects ? Également : console.log('Data : ' + val); Ce n'est pas clair, soit vous comptez loguer la réponse retournée par le serveur soit la valeur de la variable val (que vous avez définie avant l'appel), dans l'un ou l'autre cas le console.log n'est pas cohérent. Edited September 25, 2014 by Yopixel (see edit history) Link to comment Share on other sites More sharing options...
Prestaspirit Posted September 25, 2014 Share Posted September 25, 2014 Y'a rien de cohérent dans ce bout de code, là c'est tous le cours de javascript qui est à revoir mais c'est pas la fonction de ce forum. @Yopixel : pour le ajax c'est le this qui pose problème, y'a pas de this a cette endroit là 1 Link to comment Share on other sites More sharing options...
YopixelAE Posted September 25, 2014 Share Posted September 25, 2014 @Yopixel : pour le ajax c'est le this qui pose problème, y'a pas de this a cette endroit là var val = jQuery(this).val(); Ah oui pas vu ça merci de la remarque ! Et tantôt c'est jQuery, tantôt c'est $. Gudule1er va mettre un peu de temps à terminer ! Link to comment Share on other sites More sharing options...
gudule1er Posted September 26, 2014 Author Share Posted September 26, 2014 (edited) personne pour un coup de main ? j'avais pas eu les mails des réponses désolé... Edited September 26, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
YopixelAE Posted September 26, 2014 Share Posted September 26, 2014 Mettez en pièce jointe du topic votre module, et expliquez ce que vous attendez qu'il réalise. Comme ça chacun pourra l'essayer et le terminer. Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 (edited) bonjour, j'avance un peu switch (Tools::getValue('method')) { case 'compa1' : $filtre_compa2=$_POST['compa1']; $aff_filtre_compa2=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); foreach ($aff_filtre_compa2 as $result_compa2) { Tools::jsonEncode( array(id_compa2=>$result_compa2['id'], value_compa2=>$result_compa2['value'],)); } je n'ai plus d'erreur 500 sur ce bout de code par contre je n'arrive pas à bien utiliser la classe Tools::jsonEncode() j'ai cherché sur le net mais aucune référence ou autre tuto... une personne pourrais m'expliquer comment remplir le tableau pour le retour merci Edited September 27, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 (edited) alors la suite, je n'ai plus aucune erreur dans la console avec cette syntaxe... require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); switch (Tools::getValue('method')) { case 'compa1' : $filtre_compa2=$_POST['compa1']; $aff_filtre_compa2=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); Tools::jsonEncode(); } exit; pas sur que ce soit bon quand même puisque je ne sais pas comment affiché le success dans mon fichier Edited September 27, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
YopixelAE Posted September 27, 2014 Share Posted September 27, 2014 data: 'compa1='+ val, // switch (Tools::getValue('method')) method correspond à quoi ? Mettez 'compa1', pas l'exemple de la doc ! Tools::jsonEncode(); ?! Il n'y a aucune valeur. Et puis aucun retour par la suite. J'ai l'impression que vous faites tout un peu au hasard. Je préfère quitter ce topic, désolé mais ça tourne en rond ! Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 method correspond à ce que je met dans data de la fonction ajax data: 'method=compa1&compa1='+ selectedVal, non je ne fais pas tout par hasard... j'ai essayer plusieurs chose dans le jsonEncode et à chaque fois j'ai une erreur 500... Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 j'ai essayer de faire passer "$aff_filtre_compa2" qui me sort un tableau avec les résultats, mais ça ne fonctionne pas... c'est pour ça que je demander si il y avais un doc pour cette fonction... j'ai été voir dans le fichier tools.php pour voir à quoi ressemblé cette fonction, en effet elle attend un $data, mais je n'arrive pas à comprendre quoi... j'ai lu que le json transformer un tableau php en tableau json pour un retour en javascript, mais je n'arrive pas à faire passer quoi que ce soit dedans... Link to comment Share on other sites More sharing options...
Eolia Posted September 27, 2014 Share Posted September 27, 2014 dans votre script,faites un Tools::jsonEncode($result); $result étant votre tableau à envoyer, Puis ouvrez votre console(f12) et regardez la réponse à votre requête ( ou ouvrez directement l'url appelée dans votre navigateur) Pour info les erreurs 500 trouvent leur explication dans le fichier error.log de php Je pense que vous avez bien activé l'affichage des erreurs dans votre boutique, n'est ce pas ? Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 Bonsoir, oui je suis en mode debug Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 ça ne fonctionne pas... j'ai ça dans la console : Notice: Undefined variable: result in /home/mototestdb/www/modules/compatibilite/ajax.php on line 9 et la ligne 9 c'est ça : Tools::jsonEncode($result); et ùon fichier ajax.php require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); switch (Tools::getValue('method')) { case 'compa1' : $filtre_compa2=Tools::getValue('compa1'); $req_filtre_compa2=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); foreach ($req_filtre_compa2 as $aff_compa2) Tools::jsonEncode($result); } exit; Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 donc j'ai fait ça... require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); switch (Tools::getValue('method')) { case 'compa1' : $filtre_compa2=Tools::getValue('compa1'); echo $filtre_compa2; $req_filtre_compa2=Db::getInstance()->ExecuteS('select id, id_compa1, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); foreach ($req_filtre_compa2 as $resultat) Tools::jsonEncode($resultat); } exit; comme ça je fait passer mon tableau php dans la fonction jsonEncode, et dans la console j'ai bien la valeur que je fais passer mais en réponse j'ai "no properties" Link to comment Share on other sites More sharing options...
Eolia Posted September 27, 2014 Share Posted September 27, 2014 (edited) Ben en regardant votre code vous envoyez un json_encode à chaque boucle du foreach, en aucun cas vous ne renvoyez un tableau... A la limite un foreach ($req_filtre_compa2 as $resultat) { $result[$resultat['id_compta1']] = $resultat['value'] } Tools::jsonEncode($result); soit vous supprimez cette boucle foreach qui ne sert à rien et vous envoyez directement: Tools::jsonEncode($req_filtre_compa2); Enfin, difficile de vous en dire plus comme cela, ne sachant pas ce que vous voulez obtenir, pour en faire quoi, ni ce que contient votre base de données. Toujours est-il que jsonEncode ne sert qu'au transport de vos données entre votre script php et votre script js, et qu'il ne fait rien d'autre. Donc ce que vous envoyez, vous le récupérez à l'identique. PS: Dans mon post précédent, "dans votre script,faites un Tools::jsonEncode($result);$result étant votre tableau à envoyer," $result était juste un exemple, à vous de définir le nom de votre tableau. Je n'ai pas dit de recopier mon exemple sans réfléchir. Car là évidemment vous avez un résultat vide et une notice disant que $result n'est pas défini.... Edited September 27, 2014 by Eolia (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 27, 2014 Author Share Posted September 27, 2014 (edited) quand je met Tools::jsonEncode($req_filtre_compa2); j'ai le même résultat "no properties" alors je cherche à faire des listes déroulantes dynamique... quand on sélectionne une valeur dans compa1, je fais un filtre pour afficher les valeurs correspondante dans compa2 la structure de mes tables : table1 : id, value table2 : id, id_table1, value table3 : id, id_table1, id_table2, value table1 correspond à la liste compa1, table à la liste compa2 et table3 à la liste compa3 Edited September 27, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted September 28, 2014 Share Posted September 28, 2014 et avec un var_dump() vous voyez quelquechose ? require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); switch (Tools::getValue('method')) { case 'compa1' : $filtre_compa2=Tools::getValue('compa1'); echo $filtre_compa2; $req_filtre_compa2=Db::getInstance()->ExecuteS('select id, id_compa1, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); die(var_dump($req_filtre_compa2)); } Link to comment Share on other sites More sharing options...
gudule1er Posted September 28, 2014 Author Share Posted September 28, 2014 (edited) oui ma requete fonctionne... la réponse dans la console par contre je ne sais pas pourquoi ça me met un 1 devant array 1array(1) { [0]=> array(3) { ["id"]=> string(1) "1" ["id_compa1"]=> string(1) "1" ["value"]=> string(14) "Shiver 750 ABS" } } Edited September 28, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 28, 2014 Author Share Posted September 28, 2014 (edited) y'a plus le 1, je faisais un echo pour voir si je récupérer la valeur du $_POST Edited September 28, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 28, 2014 Author Share Posted September 28, 2014 Par contre je ne comprend pas pourquoi ça me construit 2 tableaux... array(1) { [0]=> array(3) { ["id"]=> string(1) "1" ["id_compa1"]=> string(1) "1" ["value"]=> string(14) "Shiver 750 ABS" } } Link to comment Share on other sites More sharing options...
Eolia Posted September 28, 2014 Share Posted September 28, 2014 Bon, je pense qu'effectivement il vous manque des bases en php/mySql... Vous n'avez pas 2 tableaux, mais un seul: - Votre array comporte les résultats obtenus sous la forme: Ensemble des résultats (1 array) : - 1er résultat [0] donne un sous-array avec 3 entrées Il vous suffit de récupérer les valeurs du premier indice du tableau ( [0] ) dans votre script // récupère les résultats compris dans le 1er index du tableau $result['id'] = $req_filtre_compa2[0]['id']; $result['id_compa1'] = $req_filtre_compa2[0]['id_compa1']; $result['value'] = $req_filtre_compa2[0]['value']; Tools::jsonEncode($result); Un article qui peut vous servir: http://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ Avant d'aller plus loin, je vous conseille quand même de lire les tutoriaux concernant la syntaxe et l'usage des langages php, mysql et javascript. Copier/coller un code n'avance pas à grand chose si on a pas compris son fonctionnement. Link to comment Share on other sites More sharing options...
gudule1er Posted September 28, 2014 Author Share Posted September 28, 2014 j'avoue ne pas avoir manipulé souvent les tableaux et le javascript... mais au moins tes explications sont clair pour moi... merci Link to comment Share on other sites More sharing options...
gudule1er Posted September 28, 2014 Author Share Posted September 28, 2014 (edited) j'ai déjà lu cet article... il m'a été utile... ça fait un bon 5 ans que je n'ai pas dev en php... de plus prestashop à ses propres fonctions... et pas beaucoup d'explications sur le net... je rame un peu... Edited September 28, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 (edited) bon alors j'arrive à faire mon retour json sans aucune erreur $req_filtre_compa2=Db::getInstance()->ExecuteS('select id, id_compa1, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); echo Tools::jsonEncode($req_filtre_compa2); avec ce code j'ai bien mon tableau avec toute les réponses contenue dans la BDD [{"id":"1","id_compa1":"1","value":"Shiver 750 ABS"},{"id":"3","id_compa1":"1","value":"Shiver 750"}] en gros il manquait juste "echo" mais pour vous embêter encore un peu, comment je fais pour afficher ça dans la page d'admin de mon module. voilà ce que j'ai dans le success success: function(json) { $.each(json, function(id, value) { $('#compa2').append('<option value="'+ id +'">'+ value +'</option>'); }); merci encore pour votre aide et patiente de mon fichier js Edited September 30, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted September 30, 2014 Share Posted September 30, 2014 je ne sais pas quelle est la forme de votre tableau retour mais vous devez pouvoir récupérer vos variables sous la forme json['id'], json['value'], etc... ou if (typeof json['id'] === "undefined") { var jsonObject = JSON.parse(json); //si vous avez prévu une gestion d'erreur qui envoie $req_filtre_compa2['error'] = 2; par exemple if (json.error === 2) alert('Message erreur correspondant); } Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 non je ne gère pas les erreurs... j'ai fait ce code et ça fonctionne success: function(data) { $.each(data, function(index, valeur) { console.log (valeur) $('#compa2').append('<option value="'+ valeur.id +'">'+ valeur.value +'</option>'); }); } j'ai juste un soucis, quand je sélectionne une première option dans "compa1" ça m'affiche bien les infos dans "compa2". par contre que je reselectionne une autre option dans "compa1" ça ne m’efface pas le contenue précédent de "compa2" Link to comment Share on other sites More sharing options...
Eolia Posted September 30, 2014 Share Posted September 30, 2014 (edited) Ben là on n'est plus dans l'ajax mais dans le javascript/jquery avec action suivant les événements A vous de déterminer suivant le onchange qu'est ce qui doit être affiché/caché ou modifié $(document).ready(function(){ $('.id_de_votre_1er_select').change(function() { if($(this).val() == "0") //faire quelquechose... } }); Edited September 30, 2014 by Eolia (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 ok je vais voir les fonction disponible merci Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 bizarrement dès que je met un if dans le js j'ai une erreur dans la console... Uncaught SyntaxError: Unexpected identifier Link to comment Share on other sites More sharing options...
Eolia Posted September 30, 2014 Share Posted September 30, 2014 bizarrement dès que je met un if dans le js j'ai une erreur dans la console... Uncaught SyntaxError: Unexpected identifier il doit manquer une accolade ou une parenthèse qqpart Copie de la ligne en erreur svp Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 $("#compa1").change(function() { if (valeur.id !="") { $('#compa2')empty; } Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 (edited) c'était une erreur de ma part... il manque un . devant empty... mais ça doit pas être la bonne commande... Edited September 30, 2014 by gudule1er (see edit history) Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 et si c'est ok, ça fonctionne Link to comment Share on other sites More sharing options...
Eolia Posted September 30, 2014 Share Posted September 30, 2014 $("#compa1").change(function() { if (valeur.id !="") { $('#compa2 option[value="x"]').attr("disabled", "disabled"); $('#compa2 option[value="x"]').removeAttr("selected"); } }); x étant la value de l'option à ne plus afficher Link to comment Share on other sites More sharing options...
Eolia Posted September 30, 2014 Share Posted September 30, 2014 oui, tout dépend ce que vous voulez faire, mais .empty() efface tout ce qui est dans le noeud (structure et valeurs) Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 alors avec ce code ça fonctionne $("#compa1").change(function() { var verifCompa2 = $('#compa2 :selected').val(); if (verifCompa2 !="") { $('#compa2').empty(); } par contre j'ai un truc bizarre, encore vous allez me dire j'active ma deuxieme requete pour mon compa2 et la j'ai une erreur switch (Tools::getValue('method')) { case 'compa1' : $filtre_compa2=Tools::getValue('compa1'); $req_filtre_compa2=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite2 WHERE id_compa1='.$filtre_compa2.''); echo Tools::jsonEncode($req_filtre_compa2); case 'compa2' : $filtre_compa3=Tools::getValue('compa2'); $req_filtre_compa3=Db::getInstance()->ExecuteS('select id, value from '._DB_PREFIX_.'compatibilite3 WHERE id_compa2='.$filtre_compa3.''); echo Tools::jsonEncode($req_filtre_compa3); } alors que c'est la même requete qu'au dessus avec une table différente... le message d'erreur... <b>Fatal error</b>: Uncaught You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1<br /><br /><pre>select id, value from ps_prodcompatibilite3 WHERE id_compa2=</pre> thrown in <b>/home/mototestdb/www/classes/db/Db.php</b> on line <b>635</b><br /> Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 désolé encore une connerie de ma part, j'oublié le break... Link to comment Share on other sites More sharing options...
gudule1er Posted September 30, 2014 Author Share Posted September 30, 2014 oui c'est ce que je viens de voir pour empty(); c'est pas très propre... je vais faire autrement Link to comment Share on other sites More sharing options...
gudule1er Posted October 1, 2014 Author Share Posted October 1, 2014 par contre avec votre solution je ne vois pas comment faire, puisque les valeurs sont variables... Link to comment Share on other sites More sharing options...
gudule1er Posted October 1, 2014 Author Share Posted October 1, 2014 Bonjour, en faisant comme ça c'est parfait : success: function(data) { $('#compa2').html('<option value="select">-- Sélectionner une option --</option>'); $.each(data, function(index, valeur) { $('#compa2').append('<option value="'+ valeur.id +'">'+ valeur.value +'</option>'); }); } Link to comment Share on other sites More sharing options...
gudule1er Posted October 1, 2014 Author Share Posted October 1, 2014 Merci à tous pour votre aide... Link to comment Share on other sites More sharing options...
Eolia Posted October 1, 2014 Share Posted October 1, 2014 Bonne continuation ! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now