Hallo Leute!
Ich brauch mal euren Rat.
Es geht darum, dass ich mittel gd-lib Liniendiagramme zeichnen möchte, was auch funktioniert, solang ich die Daten nicht aus der DB hole.
Sobald ich jedoch eine SQL Abfrage der Daten mache wird mir nichts mehr angezeigt. An der SQL Anweisung kann es nicht liegen, das hab ich getestet, ich bekomm die richtigen Ergebnisse.
Fazit einzeln funktioniert alles, nur zusammen nicht.
Hier mal mein php code der funktioniert ( die Datei wird von einer anderen aus aufgerufen mittels
)
ersetze ich nun die beiden Arrays ($daten, $daten_x) durch eine SQL Abfrage
(function.php sorgt für die Abfrage in der Datenbank)
erhalte ich nur noch ein rotes X
Was mach ich falsch??
P.S.: Es ist eine Oracle Datenbank
Vielen Dank für eure Hilfe
Gruß Tricia
Ich brauch mal euren Rat.
Es geht darum, dass ich mittel gd-lib Liniendiagramme zeichnen möchte, was auch funktioniert, solang ich die Daten nicht aus der DB hole.
Sobald ich jedoch eine SQL Abfrage der Daten mache wird mir nichts mehr angezeigt. An der SQL Anweisung kann es nicht liegen, das hab ich getestet, ich bekomm die richtigen Ergebnisse.
Fazit einzeln funktioniert alles, nur zusammen nicht.
Hier mal mein php code der funktioniert ( die Datei wird von einer anderen aus aufgerufen mittels
PHP Code:
echo "<img src=\"diagramm.php\" alt=\"Fehler beim anzeigen\" />";
PHP Code:
$daten[0]='27.9';
$daten[1]='27.89';
$daten[2]='27.86';
$daten[3]='27.79';
$daten[4]='27.83';
$daten[5]='30';
$daten[6]='27.97';
$daten[7]='28.08';
$daten[8]='28.07';
$daten[9]='28.02';
$daten[10]='27.92';
$daten[11]='27.92';
$daten[12]='27.91';
$daten[13]='27.99';
$daten[14]='28.04';
$daten[15]='28.1';
$daten[16]='28.07';
$daten[17]='28.01';
$daten[18]='27.96';
$daten[19]='27.99';
$daten_x[0]='01.06.2011 00:00:00';
$daten_x[1]='01.06.2011 00:05:00';
$daten_x[2]='01.06.2011 00:10:00';
$daten_x[3]='01.06.2011 00:15:00';
$daten_x[4]='01.06.2011 00:20:00';
$daten_x[5]='01.06.2011 00:25:00';
$daten_x[6]='01.06.2011 00:30:00';
$daten_x[7]='01.06.2011 00:35:00';
$daten_x[8]='01.06.2011 00:40:00';
$daten_x[9]='01.06.2011 00:45:00';
$daten_x[10]='01.06.2011 00:50:00';
$daten_x[11]='01.06.2011 00:55:00';
$daten_x[12]='01.06.2011 01:00:00';
$daten_x[13]='01.06.2011 01:05:00';
$daten_x[14]='01.06.2011 01:10:00';
$daten_x[15]='01.06.2011 01:15:00';
$daten_x[16]='01.06.2011 01:20:00';
$daten_x[17]='01.06.2011 01:25:00';
$daten_x[18]='01.06.2011 01:30:00';
$daten_x[19]='01.06.2011 01:35:00';
$realHeight = '740';
$realWidth = '923';
$imgHeight = '590';
$imgWidth = '773';
// Position von $diagramm in $background
$x_background = '70';
$y_background = '50';
$schrift = 3;
$background = imagecreate($realWidth, $realHeight);
$diagramm = imagecreate($imgWidth, $imgHeight);
imagecolorallocate($diagramm, 255, 255, 255); // Hintergrundfarbe fuer Diagramm
imagecolorallocate($background, 255, 255, 255); // Hintergrundfarbe fuer Diagramm
// Farben fuer Background !!! ACHTUNG REIHENFOLGE !!!
$farbeUmrandung = imagecolorallocate($background, 0, 0, 0); // Farbe Umrandung
// Farben fuer Diagramm
$farbeText = imagecolorallocate($diagramm, 0, 0, 0 );
$farbeRaster = imagecolorallocate($diagramm, 229, 229, 229); // Farbe des Rasters
$farbeLinie = imagecolorallocate($diagramm, 26, 26, 223); // Farbe der Diagrammlinie und Text
$farbeAchse = imagecolorallocate($diagramm, 0, 0, 0 ); // Farbe Achsenbeschriftung
// Umrandung Hintergrund: imageline($Bildname, $x1, $y1, $x2, $y2, $Textfarbe)
imageline($background, 0, 0, $realWidth , 0, $farbeUmrandung); //oben
imageline($background, $realWidth-1, 0, $realWidth-1, $realHeight-1, $farbeUmrandung); //rechts
imageline($background, 0, $realHeight-1, $realWidth, $realHeight-1, $farbeUmrandung); //unten
imageline($background, 0, 0, 0, $realHeight, $farbeUmrandung); //links
// Zeichnen des Rasters
$pxRaster = '20'; //Abstand Rasterlinien
$pxWidth = round($imgHeight / $pxRaster, 0); // Anzahl der Rasterlinien
for( $i=0; $i < $pxWidth; $i++ )
{
//Erklärung: imageline($bild, x1, y1, x2, y2, $farbe);
imageline($diagramm, 0, ($imgHeight-($pxRaster*$i)-1), ($imgWidth-10), ($imgHeight-($pxRaster*$i)-1), $farbeRaster); //horizontal
//imageline($diagramm, $i*$pxRaster, 0, $i*$pxRaster, $imgHeight, $farbeRaster); //vertikal
}
// Linien fuer x- und y-Achse
imageline($diagramm, 0, $imgHeight-1, $imgWidth, $imgHeight-1, $farbeAchse); //unten
imageline($diagramm, 0, 0, 0, $imgHeight, $farbeAchse); //links
// Anfangswert um den maximalen Wert aus dem Datensatz berechnen zu koennen
$maxHeight = $daten[0];
// sucht nach dem hoechsten Wert im Datensatz
for( $i=1; $i < count($daten); $i++ )
{
if( $maxHeight < $daten[$i] )
{
$maxHeight = $daten[$i];
}
}
// der hochste Wert bestimmt die Einteilung der y-Achse mit
$dynWidth = round(($imgWidth-45) / (count($daten)-1), 0);
@$dynHeight = ($imgHeight-1) / ($maxHeight+0.5);
// Zeichnet die Daten ein
for ($i=0; $i < count($daten); $i++)
{
// zur Berechnung der x-Werte notwendig
$aktNewSize = @round($dynHeight * $daten[$i]);
$aktNewSize2 = @round($dynHeight * $daten[$i+1]);
if($i+1 < count($daten))
{
// Erklärung: imageline($bild, x1, y1, x2, y2, $farbe);
imageline($diagramm, ($i*$dynWidth), ($imgHeight-$aktNewSize),(($i+1)*$dynWidth), ($imgHeight-$aktNewSize2), $farbeLinie);
// Beschriftung im Diagramm
if($daten[$i] == 0) // sollte der Wert 0 sein wird die Beschriftung etwas verschoben
{
imagestring($diagramm, $schrift, ($i*$dynWidth+5), ($imgHeight-$aktNewSize-13), $daten[$i], $farbeLinie);
}else{ // normale Ausgabe
imagestring($diagramm, $schrift, ($i*$dynWidth+5), ($imgHeight-$aktNewSize-7), $daten[$i], $farbeLinie);
}
}else{
// Beschriftung des letzten Punktes im Diagramm
imagestring($diagramm, $schrift, ($i*$dynWidth+5), ($imgHeight-$aktNewSize-7), $daten[$i], $farbeLinie);
}
// Beschriftung der x-Achse im Diagramm ( hier Uhrzeit)
$uhrzeit = substr($daten_x[$i],11,8); // Datum und Uhrzeit stehen in einem Feld (-> Zeit heraus nehmen)
imagestringup($background, $schrift, (($i*$dynWidth-7)+$x_background), ($imgHeight+65+$y_background), $uhrzeit, $farbeText); // Text wird gegen den Uhrzeigersinn gedreht
}
// Diagrammueberschrift
$zeitraum = "Temperaturdaten vom ".substr($daten_x[0],0,10);
// fuer die Berechnung der px-Breite des Textes
$font_width = imagefontwidth($schrift);
$text_width = $font_width * strlen($zeitraum);
// Ausgabe der Diagrammueberschrift
imagestring($background, $schrift, (($realWidth/2)-($text_width/2)), 20, $zeitraum, $farbeText);
// Ausgabe der y-Achsen Bezeichnung
imagestring($background, $schrift, 50, 50, "°C", $farbeText);
// Ausgabe der x-Achsen Bezeichnung
imagestring($background, $schrift, (count($daten)*$dynWidth+$x_background), ($imgHeight+$y_background), "Uhrzeit", $farbeText);
// Kopiert das Bild $diagramm in das Bild $background
imagecopy($background, $diagramm, $x_background, $y_background, 0, 0, imagesx($diagramm), imagesy($diagramm));
header("Content-type: image/png");
imagepng($background);
imagedestroy($background);
(function.php sorgt für die Abfrage in der Datenbank)
PHP Code:
include_once("function.php");
$datum = "01-JUN-11";
$where_name = '';
$sql = "SELECT Temperatur_1
FROM TEMPERATUR_FEUCHTE
WHERE messdatum LIKE '$datum%'
ORDER BY messdatum";
$order='';
$daten = column_value($sql, $where_name, $order);
$where_name1 = '';
$sql1 = "SELECT to_char (tf.messdatum, 'dd.mm.yyyy hh24:mi:ss')
FROM TEMPERATUR_FEUCHTE tf
WHERE tf.messdatum LIKE '$datum%'
ORDER BY tf.messdatum";
$order1='';
$daten_x = column_value($sql1, $where_name1, $order1);
Was mach ich falsch??
P.S.: Es ist eine Oracle Datenbank
Vielen Dank für eure Hilfe
Gruß Tricia
Comment