le message d'erreur signale que tu essaies d'obtenir une propriété d'une variable qui n'est pas un objet.
Est tu sûr que $QuelSOMME est un objet?
Essaie de l'afficher var_dump($QuelSOMME);
Code : Tout sélectionner
bool(false) object(stdClass)#1 (6) { ["idligne"]=> string(1) "3" ["id"]=> string(1) "1" ["somme_quantitedef"]=> string(2) "20" ["somme_production"]=> string(4) "9000" ["annee"]=> string(4) "2008" ["mois"]=> string(1) "2" } object(stdClass)#2 (6) { ["idligne"]=> string(1) "3" ["id"]=> string(1) "2" ["somme_quantitedef"]=> string(2) "10" ["somme_production"]=> string(4) "7800" ["annee"]=> string(4) "2008" ["mois"]=> string(1) "3" } bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) <?php
$db = mysql_connect("localhost","root","");
mysql_select_db("test",$db);
require_once "Artichow/BarPlot.class.php";
$graph = new Graph(700, 700);
$graph->setTiming(TRUE);
$graph->setAntiAliasing(TRUE);
$x = array();
for ($z=0; $z<12; $z++) {
$requete = "SELECT rec.idligne, prod.id, SUM(rec.quantitedef) as somme_quantitedef, ";
$requete .= "SUM(prod.prod) AS somme_production, ";
$requete .= " YEAR( rec.date_atelier ) AS annee, ";
$requete .= " MONTH( rec.date_atelier ) AS mois ";
$requete .= "FROM rec AS rec ";
$requete .= "LEFT JOIN production AS prod ON prod.id = rec.idprod ";
$requete .= "WHERE rec.idligne = 3 ";
$requete .= " AND year( rec.date_atelier ) = 2008 ";
$requete .= " AND MONTH( rec.date_atelier ) = ".($z+1)." ";
$requete .= "GROUP BY MONTH(rec.date_atelier ) ";
$qr1 = mysql_query ($requete);
$QuelSOMME = ($qr1) ? mysql_fetch_object($qr1) : 0;
$x[] = ($QuelSOMME->somme_production == 0) ? 0 : ($QuelSOMME->somme_quantitedef / $QuelSOMME->somme_production) * 1000000;
}
$y = array(
'Janvier',
'Février',
'Mars',
'Avril',
'Mai',
'Juin',
'Juillet',
'Août',
'Septembre',
'Octobre',
'Novembre',
'Décembre'
);
$plot = new BarPlot($x);
$plot->setSpace(6, 6, 10, 10);
$plot->setBarColor(new Color(100, 100, 100, 50));
$plot->label->hideFirst(TRUE);
$plot->label->hideLast(TRUE);
$plot->label->set($x);
$plot->label->move(0, -23);
$plot->label->setBackgroundGradient(new LinearGradient(new Color(250, 250, 250, 10), new Color(255, 200, 200, 30), 0));
$plot->label->border->setColor(new Color(20, 20, 20, 20));
$plot->label->setPadding(0, 0, 0, 1);
$plot->label->setFont(new Tuffy(10));
$plot->setBackgroundGradient(new LinearGradient(new Color(210, 210, 210), new Color(255, 255, 255), 0));
$plot->grid->setBackgroundColor(new Color(235, 235, 180, 60));
$plot->yAxis->setLabelPrecision(2);
$plot->yAxis->label->setFont(new Tuffy(8));
$plot->xAxis->setLabelText($y);
$plot->xAxis->label->setFont(new Tuffy(8));
$plot->xAxis->label->setAngle(45);
$plot->legend->add($plot, "Test", LEGEND_BACKGROUND);
$plot->legend->setModel(LEGEND_MODEL_BOTTOM);
$plot->legend->setPadding(10, 10, 10, 10);
$plot->legend->setPosition(0,0);
$plot->legend->setTextMargin(8, 0);
$graph->add($plot);
$graph->draw();
?>
J'utilise Artichow/BarPlot.class.php comme librairie d'artichow.for ($z=0; $z<12; $z++) {
$requete = "SELECT rec.idligne, prod.id, SUM(rec.quantitedef) as somme_quantitedef, ";
$requete .= "SUM(prod.prod) AS somme_production, ";
$requete .= " YEAR( rec.date_atelier ) AS annee, ";
$requete .= " MONTH( rec.date_atelier ) AS mois ";
$requete .= "FROM rec AS rec ";
$requete .= "LEFT JOIN production AS prod ON prod.id = rec.idprod ";
$requete .= "WHERE rec.idligne = 3 ";
$requete .= " AND year( rec.date_atelier ) = 2008 ";
$requete .= " AND MONTH( rec.date_atelier ) = ".($z+1)." ";
$requete .= "GROUP BY MONTH(rec.date_atelier ) ";
$qr1 = mysql_query ($requete);
$QuelSOMME = ($qr1) ? mysql_fetch_object($qr1) : 0;
$x[] = 2;
print_r($QuelSOMME);
}
J'obtiens : stdClass Object
(
[idligne] => 3
[id] => 1
[somme_quantitedef] => 20
[somme_production] => 9000
[annee] => 2008
[mois] => 2
)
stdClass Object
(
[idligne] => 3
[id] => 2
[somme_quantitedef] => 10
[somme_production] => 7800
[annee] => 2008
[mois] => 3
)
Je comprend pas pourquoi sa marche sans artichow et avec artichow sa bug.Code : Tout sélectionner
object(stdClass)#1 (6)
{ ["idligne"]=> string(1) "3" ["id"]=> string(1) "1" ["somme_quantitedef"]=> string(2) "20" ["somme_production"]=> string(4) "9000" ["annee"]=> string(4) "2008" ["mois"]=> string(1) "2" }Code : Tout sélectionner
bool(false)$QuelSOMME = ($qr1) ? mysql_fetch_object($qr1) : 0;
met dans la variable $QuelSOMME l'objet représentant l'enregistrement sql si mysql_fetch_object($qr1) ne renvoie pas false c'est à dire si il y un encore un enregistrement à parcourir dans le résultat sql $qr1.$QuelSOMME->somme_production
sans même tester la valeur de $QuelSOMME.$qr1 = mysql_query ($requete);
while($QuelSOMME = mysql_fetch_object($qr1)){
$x[] = ($QuelSOMME->somme_production == 0) ? 0 : ($QuelSOMME->somme_quantitedef / $QuelSOMME->somme_production) * 1000000;
}
$qr1 = mysql_query ($requete);
//pas de valeurs pour le mois
if(mysql_num_rows($qr1)==0)
$x[] = 0;
//au moins une valeur pour le mois
else{
while($QuelSOMME = mysql_fetch_object($qr1)){
$x[] = ($QuelSOMME->somme_production == 0) ? 0 : ($QuelSOMME->somme_quantitedef / $QuelSOMME->somme_production) * 1000000;
}
}
Mais je pense que tu peux faire une seule requête pour les 12 mois, ça sera moins couteux en ressources.