Affichage graphique [Jpgraph] avec BdD

Fermé
gui - 22 avril 2006 à 15:02
 Fouad - 27 juin 2007 à 13:30
bonjour a tous,
je souhaiterai afficher un graphique par l'intermédiaire de ma base de données!Cependant je n'y arrive pas!Il m'affiche cette erreur :

JpGraph Error Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).

voici mon code :

$req = mysql_query("select temp_ext from releve");
while($res = mysql_fetch_array($req))
{
$temp = $res["temp_ext"];
$val = array($temp);

for($i=0;$i<sizeof($val);$i++)
{

$ydata = array($val[$i].',');
}
}

mysql_close($db);

// Creation du graphique
$graph = new Graph(300,200);
$graph->SetScale("textlin");

// Création du système de points
$lineplot=new LinePlot($ydata);

// On rajoute les points au graphique
$graph->Add($lineplot);

// Affichage
$graph->Stroke();

?>

Pouvez vous me dire quel est le probleme? Car je n'arrive pas a trouver la solution!

merci d'avance!!
A voir également:

4 réponses

bonjour a tous, voila un code que j'utilise pour afficher dans un diagramme de gauntt, les noms des projets avec date de debut et date de fin, que je charche de ma base de données mySQL
mais le probleme ya toujours un message d'errure :

"Chosen locale file ("lang/en.inc.php") for error messages does not exist or is not readable for the PHP process. Please make sure that the file exists and that the file permissions are such that the PHP process is allowed to read this file."



voici le code en question
<?
include ( "config/config.php");
include ( "include/jpgraph.php");
include ( "include/jpgraph_gantt.php");
@MYSQL_CONNECT($serveur,$login,$pass) or die ("Le Serveur ne répond pas");
@MYSQL_SELECT_DB("$base") or die ("Connexion à la base $base impossible");
$x = 0;
$lire = mysql_query("SELECT * FROM $table_mp order by id");
$num = mysql_num_rows($lire);

for($x; $x<=$num; $x++)
{
$lire = mysql_query("SELECT * FROM $table_mp where id=$x");

while ($d=mysql_fetch_row($lire))
{
$data[$x][0] = $d["0"];
$data[$x][1] = $d["1"];
$data[$x][2] = $d["2"];
$data[$x][3] = $d["3"];
$data[$x][4] = $d["4"];
}
}

$graph = new GanttGraph ();
$graph->title-> Set("Gantt Graph using CreateSimple()");

// Setup scale
$graph->ShowHeaders( GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
$graph->scale-> week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Add the specified activities
$graph->CreateSimple( $data);

// .. and stroke the graph
$graph->Stroke();
?>


merci
2
Vous n'êtes pas un cas isolé, car j'ai le même problème, même en testant les valeurs null pour exécuter ou non la commande stroke, rien n'y fait
0
pmef93psg Messages postés 1 Date d'inscription vendredi 1 juin 2007 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 17:22
Partant du principe que l'affichage d'un segment de droite nécessite une valeur de départ et de fin, une solution (surement perfectible) est de tester l'existence de valeur différente de 'null'.
Si dans la boucle de tableau, toutes les valeurs sont nulles, on force à la sortie de boucle la valeur du premier élément de tableau à une valeur quelconque différente de 0 (laissant toutes les autres nulles).
Dans ce cas le graphe s'affiche puisqu'il existe au moins une valeur mais comme cette valeur est unique aucun segment n'apparait dans le graphe, évitant ainsi le message d'erreur : JpGraph Error Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).

$data_existe=0;
for ($t=0;$t<$nb_element_au_tableau;$t++) {
if ( $ydata[$t]!=NULL) $data_existe=1;
}
if($data_existe==0)$ydata[0]=0.0001;$data_existe=1;
.../...
$lineplot=new LinePlot($ydata);
$graph->Add($lineplot);
.../...
if($data_existe==1)$graph->Stroke();

Voilà, il y a certainement plus propre mais c'est déjà un début
0
je ne comprend pas bien ton code :
J'ai fais un graphique qui m'affiche la somme du nombre d'heures de presence par jour.
J'ai l'impression que tu ne te connectes pas à ta base, et ta façon de remplir tes tableaux me semble compliquée.
Pour exemple mon script qui fonctionne à merveille !!!!!!!!!
Dans config.php, les infos relative à la base : dbhost, dbname, dbuname et dbpass
$sql_h : la requête qui me somme les heures par journée

$data1y = NULL;
$data1x = NULL; //l'initialisation des séries x et y

$Resultat = mysql_query($sql_h);
for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
{
$data1y[]=mysql_result($Resultat , $Compteur , "Heures");
$data1x[]=mysql_result($Resultat , $Compteur , "date");
} // la construction des tableaux

et le reste est classique

mon script :
<?php
include ("config.php");
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_bar.php");

$sql_h = 'SELECT `date`, SUM( `HeuresMatin` + `heuresSoir` ) AS `Heures` FROM `Table_saisies` WHERE LEFT( `Date`, 7 )="'.$Mois.'" GROUP BY `Date` ORDER BY `Date`;';

@mysql_connect($dbhost,$dbuname,$dbpass) or die("impossible de se connecter : ". mysql_error());
@mysql_select_db($dbname) or die("impossible de sélectionner la base : ". mysql_error());

$data1y = NULL;
$data1x = NULL;

$Resultat = mysql_query($sql_h);
for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
{
$data1y[]=mysql_result($Resultat , $Compteur , "Heures");
$data1x[]=mysql_result($Resultat , $Compteur , "date");
}

mysql_close();
// Create the graph. These two calls are always required
$graph = new Graph(400,400,"auto");
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,30,20,80);

// Create the bar plots
$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$b1plot->value->Show();

// ...and add it to the graPH
$graph->Add($b1plot);

$graph->title->Set("Les stats horaires : ".$Mois);
$graph->xaxis->SetTickLabels($data1x);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->title->Set("");
$graph->yaxis->title->Set("Nombre d'heures");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
0