PB avec jpGraph

  • Auteur de la discussion Auteur de la discussion Grantome
  • Date de début Date de début
G
Grantome
Guest
Re salut,

Pourquoi cela ne fonctionne t-il pas ?

Explication.
Je vais chercher des données dans ma base
Donnée, que je place dans la variable $data[$x], à savoir, par exemple 10,5,7,3
Puis, je place ces valeurs dans un tableau comme suit
Code:
$data[$x] = array($data[$x])
Mes valeurs sont donc, par exemple:
Code:
$data[1] = array(10,5,7,3)
Or, ça ne marche pas, mais si je met directement la ligne
Code:
$data[1] = array(10,5,7,3);

Ca marche :shock:

Code:
<?php 
include ("../admin/data/config.php");
$db = mysql_connect($serveur, $login, $pass); 
mysql_select_db($base,$db);

$tab = explode("_",$table);
$date = $tab[1];
$table2 = "stat_".$date;
$i = 0;
$u = 0;
$x = 0;
$tab2 = "";
$champs = "points";
$sql = "SELECT gp FROM $table2 ORDER BY id"; 
$res = mysql_query($sql); 
while($aff = mysql_fetch_array($res))
	{
		$i = $i +1;
		$champs = $champs.", ".$aff[gp];
		$tab2[$i] = $aff[gp];
	}
$i = $i +1;
$sql = "SELECT $champs FROM $table ORDER BY points DESC LIMIT 0," . 3; 
$res = mysql_query($sql); 
while($aff1 = mysql_fetch_array($res))
	{
		$x = $x +1;
		$datax = "0";
		for ($u=1; $u<$i; $u++)
			{
				$gpx = $tab2[$u];
				$datax = $datax.", ".$aff1[$gpx];
			}
		$data[$x] = $datax;
		$u = 0;
	}
echo "Donnée sortie du boucle<br><br>";
echo "3e datax = $datax<br><br>";
echo "data[1] = $data[1]<br>";
echo "data[2] = $data[2]<br>";
echo "data[3] = $data[3]<br>";


$data[1] = array($data[1]);
$data[2] = array($data[2]);
$data[3] = array($data[3]); 

//$data[1] = array(0, 10, 10, 10, 10);
//$data[2] = array(0, 8, 5, 8, 3);
//$data[3] = array(0, 3, 6, 6, 8); 

echo "Donnée après mise en array<br><br>";
echo "data[1] = $data[1]<br>";
echo "data[2] = $data[2]<br>";
echo "data[3] = $data[3]<br>";

include ("../src/jpgraph.php");
include ("../src/jpgraph_line.php");

$graph = new graph(500, 200); 
$graph->img->SetMargin(30, 30, 30, 30);     
$graph->SetScale('textlin'); 
$line1 = new LinePlot($data[1]); 
$line1->SetColor('darkolivegreen'); 
$line2 = new LinePlot($data[2]); 
$line2->SetColor('blue'); 
$line3 = new LinePlot($data[3]); 
$line3->SetColor('silver'); 
$graph->Add($line1); 
$graph->Add($line2); 
$graph->Add($line3); 
$graph->Stroke();
 

?>
 
G
Grantome
Guest
Si tu veux, mais ça n'apporte rien.

$datax pour la boucle 1 = 0,8,5,8,3 (par exemple)
puis $data[1] = 0,8,5,8,3
 
E
e-passeport
Guest
alors met un echo dans ton fichier jpgraph à présent et regard ce qui arrive...
 
G
Grantome
Guest
...

Bon, j'ai mis le tout dernier code en haut...


Voici les 2 possibilités:

Tel que le code, ça affiche:
Donnée sortie du boucle

3e datax = 0, 3, 6, 6, 8

data[1] = 0, 10, 10, 10, 10
data[2] = 0, 8, 5, 8, 3
data[3] = 0, 3, 6, 6, 8
Donnée après mise en array

data[1] = Array
data[2] = Array
data[3] = Array
JpGraph Error: A plot has an illegal scale. This could for example be that you are trying to use text autoscaling to draw a line plot with only one point or that the plot area is too small. Try increasing the graph size or correct the lineplot.


En décommantant les $data[] et en commentant les autres voici l'affichage:
Donnée sortie du boucle

3e datax = 0, 3, 6, 6, 8

data[1] = 0, 10, 10, 10, 10
data[2] = 0, 8, 5, 8, 3
data[3] = 0, 3, 6, 6, 8
Donnée après mise en array

data[1] = Array
data[2] = Array
data[3] = Array
JpGraph Error: A plot has an illegal scale. This could for example be that you are trying to use text autoscaling to draw a line plot with only one point or that the plot area is too small. Try increasing the graph size or correct the lineplot.


Si je retire toute la partie ou je vais chercher mes donnée, le graph s'affiche.
Code:
<?php

$data[1] = array(0, 10, 10, 10, 10);
$data[2] = array(0, 8, 5, 8, 3);
$data[3] = array(0, 3, 6, 6, 8); 


include ("../src/jpgraph.php");
include ("../src/jpgraph_line.php");

$graph = new graph(500, 200); 
$graph->img->SetMargin(30, 30, 30, 30);     
$graph->SetScale('textlin'); 
$line1 = new LinePlot($data[1]); 
$line1->SetColor('darkolivegreen'); 
$line2 = new LinePlot($data[2]); 
$line2->SetColor('blue'); 
$line3 = new LinePlot($data[3]); 
$line3->SetColor('silver'); 
$graph->Add($line1); 
$graph->Add($line2); 
$graph->Add($line3); 
$graph->Stroke();
 
?>


Peux rien expliquer d'autre....
Là, y a tout :wink:
 
WRInaute discret
$data[$x] = array($data[$x])
array($data[$x]) : C'est un array d'un array
-> Soit un niveau array de trop (JPGraph attends probablement un simple array)

Remplace tes echo avec print_r
Example print_r($data[1]);
Tu comprendras la différence ainsi.

Chez PEAR ils ont un chouette image_graph. Essaie-le.
 
WRInaute discret
Je retire ce que j'ai dis. (je n'efface pas mon message précedent que le print_r aurait également mis le problème en évidence)
Le probleme est :
$data[1] = array($data[1]);
$data[1] est un string!!! avec comme valeur "0, 10, 10, 10, 10"
array($de_un_string) te crée un array avec un seul élement qui est le string en question.
Et non comme tu espérais un array avec plusieurs élements, le premier étant 0, le deuxième 10, etc...

Pourquoi ne fais-tu pas simplement :
$x = $x +1;
$data[$x]=array();
$data[$x][] = 0;
for ($u=1; $u<$i; $u++)
{
$gpx = $tab2[$u];
$data[$x][] = intval($aff1[$gpx]);
}
$u = 0;
 
G
Grantome
Guest
Pt1, j'y ai pensé presque en même temps de mon erreur de l'array avec un seul élément.

Par contre, je ne connaissais pas "intval"...

Ca marche impec.

Bon, j'vais économiser, vu le fric que je te dois now.

Merci. ;-)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Haut