jpgraph, php und sqlite

  • Hallo zusammen,

    versuche gerade über php und jpgraph Werte aus einer sqlite Datenbank zu visualisieren. Habe mir da diverses zusammen gesucht.

    Für die Datenbank abfragen habe ich mir nach der Anleitung hier (Datenbanken mit SQLite) eine phpDBfunction.php gebaut:
    [code=php]
    <?php
    setlocale (LC_TIME, "de_DE");


    // DB connect
    function db_con($DBfile) {
    if (!$db = new PDO("sqlite:$DBfile")) {
    $e="font-size:23px; text-align:left; color:firebrick;
    font-weight:bold;";
    echo "<b style='".$e."'>Fehler beim öffnen der Datenbank
    $DBfile:</b><br/>";
    echo "<b style='".$e."'>".$db->errorInfo()."</b><br/>";
    die;
    }
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $db;
    }

    // DB Query
    function db_query($sql) {
    global $db;
    $result = $db->query($sql) OR db_error($sql,$db->errorInfo());
    return $result;
    }

    // DB errors
    function db_error($sql,$error) {
    die('<small><font color="#ff0000"><b>[DB
    ERROR]</b></font></small><br/><br/><font
    color="#800000"><b>'.$error.'</b><br/><br/>'.$sql.'</font>');
    }

    // Add HTML character incoding to strings
    function db_output($string) {
    return htmlspecialchars($string);
    }
    // Add slashes to incoming data
    function db_input($string) {
    if (function_exists('mysql_real_escape_string')) {
    return mysql_real_escape_string($string);
    }
    return addslashes($string);
    }


    ?>
    [/php]

    Aus Dem Tutorial zu jpgraph (http://www.binnendijk.net/jpgraph/index.php?page=line_1) habe ich mir das Diagramm gezogen. Nach dem anpassen der Pfade, bekomme ich auch ein Diagramm angezeigt. Jetzt habe ich angefangen die DB-Abfrage einzubauen. Nach diversen Versuchen habe ich herausgefunden, dass alleine schon das include der phpDBfunction.php dazu führt, das ich den Fehler "The image (...) cannot be displayed because it contains errors" bekomme. Interessanterweise funktioniert eine DB-Abfrage mit "echo" Ausgabe?

    Kann mir hier jemand helfen?

    Hier noch der Code:
    [code=php]
    <?php
    include ("jpgraph/jpgraph.php");
    include ("jpgraph/jpgraph_line.php");
    include ("phpDBfunction.php");

    // Die Werte der 2 Linien in ein Array speichern
    $ydata = array(11,3,8,12,5,1,9,13,5,7);
    $ydata2 = array(1,19,15,7,22,14,5,9,21,13);

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

    // Die Zwei Linien generieren
    $lineplot=new LinePlot($ydata);

    $lineplot2=new LinePlot($ydata2);

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

    // Grafik Formatieren
    $graph->img->SetMargin(40,20,20,40);
    $graph->title->Set("Example 4");
    $graph->xaxis->title->Set("X-title");
    $graph->yaxis->title->Set("Y-title");

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

    $lineplot->SetColor("blue");
    $lineplot->SetWeight(2);

    $lineplot2->SetColor("orange");
    $lineplot2->SetWeight(2);

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

    // Grafik anzeigen
    $graph->Stroke();
    ?>
    [/php]

    Vielen Dank

    Markus

    Einmal editiert, zuletzt von ich77 (27. November 2014 um 16:25)

  • Hallo,

    habe das Problem jetzt gelöst. Es scheint nicht zu funktionieren, wenn DB-Abfrage und jpgraph in einer Datei liegen. Habe das ganze jetzt in 2 Dateien aufgeteilt und es funktioniert:

    phpDBabfrage.php:
    [code=php]
    <?php

    error_reporting (E_ALL | E_STRICT);
    ini_set ('display_errors' , 1);

    setlocale (LC_TIME, "de_DE");
    include ("phpDBfunction.php");
    session_start();

    $SQLITEdb = "/var/lib/weewx/weewx.sdb";

    $db = db_con($SQLITEdb);
    $query = $db->query("SELECT * FROM archive INNER JOIN (SELECT max(dateTime) as maxDateTime FROM archive) as T2 ON dateTime = maxDateTime ");
    $result = $query->fetch(PDO::FETCH_ASSOC);
    echo" Messdatum/Uhrzeit: ". strftime("%c", $result['dateTime'] );
    echo "<br>" ;
    echo" Au&szlig;entemperatur: ". number_format( ( ($result['outTemp']-32)*5/9) , 1, ',', '.')."&deg;C";
    echo "<br>" ;

    echo "<!doctype html> <html> <head> <meta charset=\"utf-8\">";
    echo " <title>Aktuelles Wetter</title> <style> table, td, th \{ border: 1px solid black\; \} </style> </head>";
    echo " <body> <h1>Aktuelles Wetter</h1> <table>";
    echo "<tr> <th>Messdatum/Uhrzeit:</th> <th>". strftime("%c", $result['dateTime'] )."</th></tr>";
    echo "<tr> <td>Au&szlig;entemperatur:</td> <td>". number_format( ( ($result['outTemp']-32)*5/9) , 1, ',', '.')."&deg;C</td></tr>";
    echo "<tr> <td>Luftfeuchte au&szlig;en:</td> <td>". number_format( ( $result['outHumidity']) , 0, ',', '.')."%</td></tr>";
    echo "<tr> <td>Innentemperatur:</td> <td>". number_format( ( ($result['inTemp']-32)*5/9) , 1, ',', '.')."&deg;C</td></tr>";
    echo "<tr> <td>Luftfeuchte innen:</td> <td>". number_format( ( $result['inHumidity']) , 0, ',', '.')."%</td></tr>";

    $db1 = db_con($SQLITEdb);
    $query1 = $db1->query("SELECT * FROM (SELECT * FROM Archive ORDER BY dateTime DESC LIMIT 248) t1 ORDER BY dateTime ASC");

    $n=0;

    While($result1 = $query1->fetch(PDO::FETCH_ASSOC)){
    $ydata[$n] = ($result1['outTemp']-32)*5/9;
    $ydata2[$n] = $result1['outHumidity'];
    $xaxis[$n] = $result1['dateTime'];
    $n++;
    }

    $_SESSION['ydata'] = $ydata;
    $_SESSION['ydata2'] = $ydata2;
    $_SESSION['xaxis'] = $xaxis;

    echo "<img src=\"chartTempOut.php\" width=\"300\" height=\"200\">" ;
    ?>
    [/php]

    ... und das "Bild" ...

    chartTempOut.php:
    [code=php]
    <?php

    Session_start() ;

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

    // Die Werte der 2 Linien in ein Array speichern
    $ydata = $_SESSION['ydata'] ;
    $ydata2 = $_SESSION['ydata2'] ;
    $xaxis = $_SESSION['xaxis'] ;

    array_walk($xaxis,'formatDate');

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

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

    $graph->xaxis->SetTickLabels($xaxis);
    $graph->xaxis->SetLabelAngle(90);


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

    // Grafik Formatieren
    $graph->img->SetMargin(40,40,20,80);
    $graph->title->Set("Temperatur und Luftfeuchte (Aussen) ");
    $graph->xaxis->title->Set("X-title");
    $graph->yaxis->title->Set("Y-title");

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

    $lineplot->SetColor("blue");
    $lineplot->SetWeight(2);

    $lineplot2->SetColor("orange");
    $lineplot2->SetWeight(2);

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

    $lineplot->SetLegend("Temperatur");
    $lineplot2->SetLegend("Luftfeuchte");
    $graph->legend->Pos(0,0.5,"center","bottom");
    $graph->legend->SetLayout(LEGEND_HOR);

    //$graph->grid->SetGridDepth(DEPTH_FRONT);
    $graph->xgrid->Show(true, false);
    $graph->ygrid->Show(true, false);
    //$graph->ygrid->SetFillColor(true, '#EFEFEF@0.6', '#EFEFEF@0.6');

    $graph->xaxis->SetTextLabelInterval(12);

    // Grafik anzeigen
    $graph->Stroke();

    // Some userdefined human readable version of the timestamp
    function formatDate(&$aVal) { $aVal = date('d. M H:i',$aVal); }
    ?>[/php]

    Gruß

    Markus

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!