Bonjour tout le monde
j'ai un problème de récupération de données d'un formulaire je travaille sur php 5 objet
voila je vais essayer de détailler mon problème :
je dois récupérer des valeurs d'une base de données et les afficher sous forme d'un tableau en utilisant des méthodes déjà définie dans prestashop (framework)
ce tableau peut ensuite être modifié en fixant la date de début et celle de la fin , pour la date c'est géré il n y a pas de problème ,
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 <?php /** * Statistics * lala */ class statslalalaquiche extends ModuleGrid { private $_html = null; private $_query = null; private $_columns = null; private $_defaultSortColumn = null; private $_emptyMessage = null; private $_pagingMessage = null; function __construct() { $this->name = 'statslalalaquiche'; $this->tab = 'Stats'; $this->version = 1.0; $this->_defaultSortColumn = 'reference'; $this->_emptyMessage = $this->l('Empty recordset returned'); $this->_pagingMessage = $this->l('Displaying').' {0} - {1} '.$this->l('of').' {2}'; $this->_columns = array( array( 'id' => 'reference', 'header' => $this->l('Ref-Four'), 'dataIndex' => 'reference', 'align' => 'left', 'width' => 50 ), array( 'id' => 'nomduproduit', 'header' => $this->l('Nom-Produit'), 'dataIndex' => 'nomduproduit', 'align' => 'left', 'width' => 100 ), array( 'id' => 'quantitevendue', 'header' => $this->l('QuantiteVendue'), 'dataIndex' => 'quantitevendue', 'width' => 50, 'align' => 'right' ) ); parent::__construct(); $this->displayName = $this->l('les produits vendus'); $this->description = $this->l('Le premier module de LALA la quiche'); } public function install() { return (parent::install() AND $this->registerHook('AdminStatsModules')); } public function hookAdminStatsModules($params) { $engineParams = array( 'id' => 'reference', 'title' => $this->displayName, 'columns' => $this->_columns, 'defaultSortColumn' => $this->_defaultSortColumn, 'emptyMessage' => $this->_emptyMessage, 'pagingMessage' => $this->_pagingMessage ); $suppliers = Supplier::getSuppliers(false); $myHtml= ' <fieldset class="width3"> <div class="margin-form"> <label> '.$this->l('Choix du fournisseur').' </label> <form action="" method="post" id="Fourform"> <select name="id_supplier" onchange="$(\'#Fourform\').submit();"> <option value="0">'.$this->l('Tout').'</option>'; foreach($suppliers as $supplier) { $myHtml .= '<option value="'.$supplier['id_supplier'].'"'.($id_supplier == $supplier['id_supplier'] ? ' selected="selected"' : '').'>'.$supplier['name'].'</option>'; } $myHtml .= ' </form> </div> <legend><img src="../modules/'.$this->name.'/logo.gif" /> '.$this->displayName.'</legend> '.ModuleGrid::engine($engineParams).' </fieldset>'; return $myHtml; } public function getData() { $dateBetween = $this->getDate(); $arrayDateBetween = explode(' AND ', $dateBetween); $this->_query = 'SELECT product_supplier_reference as reference , product_name as nomduproduit, sum(product_quantity) as quantitevendue from ps_order_detail od LEFT JOIN ps_orders o ON od.id_order = o.id_order LEFT JOIN ps_order_history oh ON od.id_order=oh.id_order LEFT JOIN ps_product p ON (p.id_product = od.product_id) LEFT JOIN ps_supplier s ON (s.id_supplier = p.id_supplier) where o.invoice_date BETWEEN '.$dateBetween.' and oh.id_order_state=5 group by od.product_attribute_id'; $this->_values = Db::getInstance()->ExecuteS($this->_query); } } ?>
pour l'instant il m'affiche tout ce que je eux c'est à dire la liste des produis vendus entre deux dates avec le référence et la quantité vendu de chaque produit
maintenant j'aimerai faire une sélection par fournisseur
j 'ai rajouté un formulaire pour avoir une liste déroulante des fournisseurs (supplier)
j'ai modifié mon getdata (ma requete) comme ceci
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 public function getData() { $dateBetween = $this->getDate(); $arrayDateBetween = explode(' AND ', $dateBetween); $andsupplier = ((isset($_POST['id_supplier']))?'AND s.id_supplier='.$_POST['id_supplier']. ' ':''); $this->_query = 'SELECT product_supplier_reference as reference , product_name as nomduproduit, sum(product_quantity) as quantitevendue from ps_order_detail od LEFT JOIN ps_orders o ON od.id_order = o.id_order LEFT JOIN ps_order_history oh ON od.id_order=oh.id_order LEFT JOIN ps_product p ON (p.id_product = od.product_id) LEFT JOIN ps_supplier s ON (s.id_supplier = p.id_supplier) where oh.id_order_state=5 '.$andsupplier. 'group by od.product_attribute_id'; $this->_values = Db::getInstance()->ExecuteS($this->_query); }
mais in ne me fait pas la sélection j'ai toujours l'affichage de tout les produits même en changeant de fournisseur dans la liste déroulante,
ce qui est plus bizarre c'est que quand je fais un echo de la de ma requête comme ceci
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 $querystring= 'SELECT product_supplier_reference as reference , product_name as nomduproduit, sum(product_quantity) as quantitevendue from ps_order_detail od LEFT JOIN ps_orders o ON od.id_order = o.id_order LEFT JOIN ps_order_history oh ON od.id_order=oh.id_order LEFT JOIN ps_product p ON (p.id_product = od.product_id) LEFT JOIN ps_supplier s ON (s.id_supplier = p.id_supplier) where o.invoice_date BETWEEN '.$dateBetween.' and oh.id_order_state=5 '. ((isset($_POST['id_supplier']))?'AND s.id_supplier ='.$_POST['id_supplier']. ' ':''). 'group by od.product_attribute_id'; echo $querystring; $result = Db::getInstance()->GetRow($querystring);
ça me donne un string bon de ma requête ,je l'ai vérifié en testant le string (requte)dans la console sql j'ai bien le résultat attendu mais juste dans la console
puis j'ai essayé de forcer le id_supplier en matant directement une valeur et la tiens sa marche je ne comprend pas pourquoi il le fait pas lors de ma sélection .
si quelqu'un a une idée ça m'aiderait beaucoup ,
je suis la pour toute question
merci beaucoup
Partager