tot0che Posted February 28, 2012 Share Posted February 28, 2012 Bonjour, je suis nouveau sur le forum, j'ai un petit quelque chose qui me chagrine, je suis entrain de développer une classe qui permet de commander automatiquement les produits nécéssaires aux producteurs respectifs. il s'agit donc d'un formulaire dans le backoffice avec : - un numéro de commande de début : - un numéro de commande de fin : - une possibilité d'exclusion d'id_order (séparé par des ';') - une possibilité de ne choisir de commander a 1 seul fournisseur grace a son id_supplier. Le tout est traité pour être soit envoyé par mail, ou si le producteur ne travail pas par mail nous générons dans tout les cas un CSV avec les informations sur les commandes et leur fournisseur Ce qui disfonctionne, c'est le cas ou l'utilisateur du backoff choisit d'envoyer les commandes d'une plage d'id_order (par exemple : numdeb = 150 ; numfin = 175) et qu'il souhaite exclure par exemple les valeurs : 153;158;159;170;171 Pour les test j'ai mis a tous les producteurs mon adresse mail. Je reçois le nombre de mail voulu : sur mes tests avec les exclusions choisis, je devais récupérer 2 mails (car 2 producteurs concernés par la plage de commande) ce qui est bien le cas ... néanmoins dans le mail le tableau ne s'affiche pas ! je pense qu'il s'agit donc d'un soucis au niveau de la $req2 car c'est à ce moment là que les informations sont récupérés sur les commandes. =>> pas d'information dans la requete =>> pas de tableau dans le mail ! Surtout que j'utilise la meme fonction mail pour gérer l'autre cas : c'est à dire le cas ou l'utilisateur choisi de ne transmettre les commandes que d'un seul producteur ! Cette partie du code fonctionne niquel (elle n'est pas présenté ici) Mon code ressemble donc à cela : // On compte le nombre de fournisseurs différents dans l'interval choisi // On s'en reservira pour la boucle qui enverra le mail au fournisseur $results = explode(";", $_POST['numOrderExclu']); $req3 = 'SELECT DISTINCT (p.id_supplier), s.mail, s.name FROM '._DB_PREFIX_.'order_detail AS od, '._DB_PREFIX_.'product AS p, '._DB_PREFIX_.'supplier as s WHERE od.product_id = p.id_product AND p.id_supplier = s.id_supplier AND od.id_order >= '.intval($numdeb).' AND od.id_order <= '.intval($numfin); foreach($results as $result) // tant qu'il y a des valeurs dans le tableau des id_order exclus, on exclus l'id de la requète. { $req3 .= ' AND od.id_order != '.intval($result); } $req3 .= ' AND p.id_supplier != 9 AND p.id_supplier != 10 AND p.id_supplier != 11 AND p.id_supplier != 12 AND od.product_name != "Boite Isotherme consignée" AND od.product_name != "SMS de suivi de commande" ORDER BY 1 ASC'; $res_sql3 = Db::getInstance()->ExecuteS($req3); $nbsupplier = count($res_sql3); // Contient le nombre de fournisseurs diff�rents // Fin du comptage des fournisseurs foreach($res_sql3 as $r3) { // On r�cup�re les NOMS de produits et les QUANTITES, qu'on REGROUPE ensuite par FOURNISSEURS $req2='SELECT od.product_name, SUM( od.product_quantity ) AS product_quantity , p.id_supplier FROM '._DB_PREFIX_.'order_detail AS od, '._DB_PREFIX_.'product AS p WHERE od.product_id = p.id_product AND od.id_order >= '.intval($numdeb).' AND od.id_order <= '.intval($numfin); // on stock les numéros de commande exclus dans un tableau foreach($results as $result) // tant qu'il y a des valeurs dans le tableau des id_order exclus, on exclus l'id de la requète. { $req2 .= 'AND od.id_order != '.intval($result); } $req2 .= 'AND p.id_supplier = $r3[\'id_supplier\'] AND p.id_supplier != 9 AND p.id_supplier != 10 AND p.id_supplier != 11 AND p.id_supplier != 12 AND od.product_name != "Boite Isotherme" AND od.product_name != "SMS de suivi de commande" GROUP BY 1 ORDER BY 3'; $res_sql2= Db::getInstance()->ExecuteS($req2); { // mail $to = $r3['mail']; $subject = 'Commande Parole de Fermiers' ; $body = '<HTML> <HEAD> </HEAD> <BODY> <p> Bonjour '; $body = $body . $r3['name'] . ' ---- ' . $r3['id_supplier'] ; $body = $body . ', parole de fermiers souhaite commander des produits de votre production. En voici la liste : <br /><br /> <div width="800"> <center> <table border="1" cellspacing="0" cellpadding="15">'; foreach($res_sql2 as $r2) { $body = $body . '<tr><td>'; $body = $body . $r2['product_name']; $body = $body . '</td><td>' ; $body = $body . $r2['product_quantity'] ; $body = $body . '</td><tr>' ; } $body = $body . '</table> </center> </div> </BODY> </HTML>' ; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; ; mail($to, $subject, $body , $headers); } } n'hesitez pas a demander des précisions. En vous remerciant chaleureusement par avance. Link to comment Share on other sites More sharing options...
tot0che Posted February 29, 2012 Author Share Posted February 29, 2012 please up Link to comment Share on other sites More sharing options...
coeos.pro Posted February 29, 2012 Share Posted February 29, 2012 Salut, tu devrais peut être respecté un peu plus lcertaines choses par exemple : 1- au lieu de mettre $_POST['machin'] utilise Tools::getValue('machin') 2- $req2 .= 'AND p.id_supplier = $r3[\'id_supplier\'] me gène un peu, met plutot $req2 .= 'AND p.id_supplier = '.$r3['id_supplier'].' 3- au lieu de mettre $body = $body . 'machin'; met $body .= 'machin'; 4- au lieu de intval($result) met (int)$result 5- ça ne me plais pas trop : GROUP BY 1 et ORDER BY 3 6- FROM '._DB_PREFIX_.'order_detail AS od, '._DB_PREFIX_.'product AS p faudrait peut être précisé INNER JOIN... exemple : FROM '._DB_PREFIX_.'order_detail od INNER JOIN '._DB_PREFIX_.'product p ON (p.un_champ = od.un_autre_champ) 7- met des ` (ALT+7, 2 fois si ça n’affiche rien)autours des noms dans les requêtes SQL : FROM `'._DB_PREFIX_.'order_detail` od INNER JOIN `'._DB_PREFIX_.'product` p ON (p.`un_champ` = od.`un_autre_champ`) Link to comment Share on other sites More sharing options...
tot0che Posted February 29, 2012 Author Share Posted February 29, 2012 ok bien aimable je test tout cela et je viens donner le retour ! merci Link to comment Share on other sites More sharing options...
tot0che Posted February 29, 2012 Author Share Posted February 29, 2012 Bon j'ai respecté les consignes, et me voila avec une erreur intéressante en activant le debug sql. il me dit : 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 '` = `p.id_product` AND `s.id_supplier` = `p.id_supplier` AND `od.id' at line 3 SELECT DISTINCT (`p.id_supplier`), `s.mail`, `s.name` FROM `ps_supplier` AS s, `ps_order_detail` AS od, `ps_product` AS p WHERE `od.product_id` = `p.id_product` AND `s.id_supplier` = `p.id_supplier` AND `od.id_order` >= 151 AND `od.id_order` <= 165 AND `od.id_order` != 152 AND `od.id_order` != 153 AND `od.id_order` != 154 AND `od.id_order` != 155 AND `od.id_order` != 156 AND `od.id_order` != 157 AND `od.id_order` != 158 AND `od.id_order` != 159 AND `od.id_order` != 160 AND `od.id_order` != 161 AND `od.id_order` != 162 AND `od.id_order` != 163 AND `p.id_supplier` != 9 AND `p.id_supplier` != 10 AND `p.id_supplier` != 11 AND `p.id_supplier` != 12 AND `od.product_name` != "Boite Isotherme consignée" AND `od.product_name` != "SMS de suivi de commande" Je n'ai pas trop l'habitude avec le INNER JOIN , j'aimerais lier tout cela grace a un INNER JOIN ! Comment faire avec 3 tables ? : FROM `ps_supplier` AS s, `ps_order_detail` AS od, `ps_product` AS p WHERE `od.product_id` = `p.id_product` AND `s.id_supplier` = `p.id_supplier` merci Link to comment Share on other sites More sharing options...
coeos.pro Posted February 29, 2012 Share Posted February 29, 2012 au lieu de mettre `od.product_id` met plutot od.`product_id` , il faut faire les changement partout évidemment http://sqlpro.developpez.com/cours/sqlaz/jointures/ j'ai mis des exemples dans mon précédent post : FROM `'._DB_PREFIX_.'table1` t1 INNER JOIN `'._DB_PREFIX_.'table2` t2 ON (t2.`un_champ_de_t2` = t1.`un_champ_de_t1`) INNER JOIN `'._DB_PREFIX_.'table3` t3 ON (t3.`un_champ_de_t3` = t2.`un_champ_de_t2`) Link to comment Share on other sites More sharing options...
tot0che Posted February 29, 2012 Author Share Posted February 29, 2012 AH d'accord merci beaucoup j'essaye tout cela Link to comment Share on other sites More sharing options...
tot0che Posted February 29, 2012 Author Share Posted February 29, 2012 sa fonctionne ! je n'ai pas encore mis les INNER JOIN mais je vais faire sa de suite histoire de rendre le code vraiment impeccable mais j'obtient bien ce que je souhaite ! c'est parfait merci encore ! 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