PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten an JPGraph übergeben


AlexD
14.06.2009, 11:49:39
Hallo zusammen,

ich steh hier vor einem kleinen Problem.
Und zwar möchte ich mir Daten aus der DB holen und in Form eines Diagramms mit Hilfe von JPGraph ausgeben lassen.

Hab mir die Torturials auf der Seite angesehen und auch erfolgreich ein Test-Diagramm erstellt, grundlegend funktioniert alles.

Leider gibts hier jetzt ein paar Probleme.
Das Diagramm soll in der diagramm.php generiert werden, weil die DB-Abfragen immer variieren, wollte ich Daten an die diagramm.php mittels <img src="diagramm.php?data1=".$distanz."&data2=.$kmh."&...."> übergeben um so Diagramme so dynamisch wie möglich erstellen zu können.

Es kommt von JPGraph immer folgende Fehlermeldung:
Cannot user autoscaling since it is impossilbe to determinate a valide min/max value of the Y-axis (only null Values).

Was mir eigentlich sagt, dass nur Null-Werte ankommen.

Wenn ich die SQL-Abfrage genau so in die diagramm.php schreibe, dann funktioniert es!!
Irgendwie stimmt etwas mit dem übergeben der Werten an die diagramm.php nicht.

im Script sieht es wie folgt aus:

//==== statistik.php mit der DB-Abfrage und dem Diagramm-Aufruf ========


$result = mysql_query("SELECT DATE_FORMAT(mt.datum, '%d.') AS tag, mt.trainings_id, mt.individual_eintrag,
mt.individual_strecke, mt.individual_distanz, mt.individual_runde, mt.laufzeit, mt.runden,
st.bezeichnung, st.strecken_id, st.distanz, st.runde, tt.type_id, tt.type
FROM laufen_meintraining mt, laufen_strecken st, laufen_trainingstype tt
WHERE mt.user_id = ".$user_id."
AND mt.strecken_id = st.strecken_id
AND mt.type_id = tt.type_id
AND DATE_FORMAT(mt.datum, '%m') = ".$_GET['monat']."
AND DATE_FORMAT(mt.datum, '%Y') = ".$jahr."
ORDER BY datum ASC",$db) or trigger_error(mysql_error($db));
if(!$result){ logfile('sql',error_get_last());}
while($_data = mysql_fetch_array($result)){

$datum .= $_data['tag']."-";

// Distanz & Strecken-Name von einer inidividuellen Strecke oder Standartstrecke ermitteln
if($_data['individual_eintrag'] == 1){
$distanz .= $_data['individual_distanz']+($_data['runden']*$_data['individual_runde'])."-";
$_distanz = $_data['individual_distanz']+($_data['runden']*$_data['individual_runde']);
} else {
$distanz .= $_data['distanz']+($_data['runden']*$_data['runde'])."-";
$_distanz = $_data['distanz']+($_data['runden']*$_data['runde']);
}

$zeit = explode(":",$_data['laufzeit']);
$sekunden = (($zeit[0]*60)+$zeit[1])*60 + $zeit[2];
$ges_sec = $ges_sec + $sekunden;

//=== km/h ===
$kmh .= round($_distanz/($sekunden/3600),2)."-";
}

$distanz = substr($distanz, 0, -1);
$kmh = substr($kmh, 0, -1);
$datum = substr($datum, 0, -1);


echo "<img src=\"diagramm.php?data1=".$distanz."&data2=".$kmh."&xlabel=".$datum."&monat=".$akt_monat."&jahr=".$jahr."\" width=\"450\" height=\"300\">";

//====== Hier die diagramm.php ============

$ydata_1 = explode("-",$_REQUEST['data1']);
$ydata_2 = explode("-",$_REQUEST['data2']);
$x_label = explode("-",$_REQUEST['xlabel']);



include ("./module/jpgraph/src/jpgraph.php");
include ("./module/jpgraph/src/jpgraph_line.php");
include ("./module/jpgraph/src/jpgraph_bar.php");
// Die Werte der 2 Linien in ein Array speichern
$ydata = $ydata_1;
$ydata2 = $ydata_2;

// Grafik generieren und Grafiktyp festlegen
$graph = new Graph(450,300,"auto");
$graph->SetScale("textlin");
$graph->SetY2Scale ('lin');

// Die Zwei Linien generieren
$barplot=new BarPlot($ydata);
$lineplot2=new LinePlot($ydata2);

// Die Linien zu der Grafik hinzufügen
$graph->AddY2($lineplot2);
$graph->Add($barplot);


// Grafik Formatieren
$graph->img->SetMargin(40,50,20,60);
$graph->title->Set("Km & Km/h pro Trainingseiheit");
$graph->title->SetFont(FF_ARIAL,FS_NORMAL,9);

$graph->subtitle->Set("im ".$_REQUEST['monat']." ".$_REQUEST['jahr']."");
$graph->subtitle->SetFont(FF_ARIAL,FS_NORMAL,8);

$graph->xaxis->title->Set("Tag");
$graph->xaxis->SetPos('min');
$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
$graph->xaxis->SetTickLabels($x_label);
$graph->xaxis->SetLabelAngle(0);

$graph->yaxis->title->Set("Kilometer");
$graph->y2axis->title->Set("Geschwindigkeit in Km/h");

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

$barplot->SetColor("red");
$barplot->SetWeight(0);
$barplot->value->Show();
$barplot->value->SetFont(FF_ARIAL ,FS_NORMAL,6.5);
$barplot->SetFillColor("darkorange@0.6");

$lineplot2->SetColor("darkgreen");
$lineplot2->SetWeight(1);
$lineplot2->mark->SetType (MARK_SQUARE);
$lineplot2->mark->SetFillColor("blue@.2");
$lineplot2->mark->SetWidth(2);
$lineplot2->value->Show();
$lineplot2->value->SetColor("darkgreen");
$lineplot2->value->SetFont(FF_ARIAL ,FS_NORMAL,6.5);

$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(1);

$graph->y2axis->SetColor("darkgreen");
$graph->y2axis->SetWeight(1);

// Legende generieren
$barplot -> SetLegend ("Kilometer");
$lineplot2 -> SetLegend("Km/h");

$graph -> legend -> Pos( 0.5, 0.95, 'center', 'bottom');
$graph -> legend -> SetLayout (LEGEND_HOR);
$graph -> legend -> SetColor ("darkblue");
$graph -> legend -> SetFont(FF_FONT1 ,FS_NORMAL);
$graph -> legend -> SetFillColor ('white');
// Grafik anzeigen
$graph->Stroke();


ich hoffe Ihr könnt mir hier helfen.

vt1816
14.06.2009, 16:47:41
[...]

ich hoffe Ihr könnt mir hier helfen.

Hast Du Dir schon mal mit
var_dump($_GET);
die übergebenen Werte in der diagramm.php anzeigen lassen?

AlexD
14.06.2009, 21:07:47
Hab ich soeben gemacht.

folgendes wird übergeben:
array(4) { ["diagramm"]=> string(5) "monat" ["data1"]=> string(50) "8,76-4,84-4,53-9,06-9,06-6,37-9,32-11,82-8,76-8,76" ["data2"]=> string(49) "8,54-8,79-8,34-8,18-8,08-9,11-8,74-8,64-8,38-7,75" ["xlabel"]=> string(39) "02.-04.-08.-09.-11.-13.-15.-16.-27.-28." }

rarios
14.06.2009, 22:23:26
und was sagt das Dir jetzt?

Du musst schon ein wenig Eigenarbeit leisten!