Liniendiagramm mit jpgraph

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Liniendiagramm mit jpgraph

    Hi,

    ich möchte gerne Daten aus meiner Datenbank in einem Liniendiagramm darstellen. Dabei bin ich auf jpgraph gestoßen, was auch bislang in einem separaten Test-Skript gut funktioniert.
    Nun möchte ich das in mein Haupt-Skript einbauen.

    Allgemein geht es darum, dass ich ein paar Verbrauchswerte darstellen möchte, also x-Achse = Zeit und y-Achse = Wert.

    Die, die mir schon bei meinem letzten Problem geholfen haben, werden sich noch vielleicht daran erinnern, dass der Benutzer zuerst aus einer Liste das Jahr auswählt und dann pro Monat ein Datensatz mit Verbäuchen angezeigt bekommt. Pro Jahr also 12 Datensätze.

    Für das ausgewählte Jahr möchte ich nun anhand der Verbrauchsdaten ein Liniendiagramm erstellen, beispielsweise erstmal nur für den Stromverbrauch.

    Hierfür habe ich einen zusätzlichen Button eingefügt, wenn er gedrückt wird, soll die Grafik erstellt werden.

    Folgendes habe ich bislang:

    Quellcode

    1. <?
    2. ...
    3. include ("src/jpgraph.php");
    4. include ("src/jpgraph_line.php");
    5. ...
    6. if($_POST["cmd_zeichnen"])
    7. {
    8. // Grafik generieren und Grafiktyp festlegen
    9. $graph = new Graph(600,400,"auto");
    10. $graph->SetScale("textlin");
    11. $auswahlsatz=$_POST["opt_haken"]; //Benutzerauswahl für Datensätze, die in Grafik dargestellt werden sollen
    12. foreach($auswahlsatz as $auswahl_id)
    13. {
    14. $abfrage = "SELECT verbrauchswert FROM tabelle WHERE id = $auswahl_id";
    15. $result = mysql_query($abfrage) OR die(mysql_error());
    16. $i=0;
    17. while ($array=mysql_fetch_array($result))
    18. {
    19. $wert[$i]=$array[0];
    20. $i++;
    21. };
    22. }
    23. // Linie generieren
    24. $lineplot = new LinePlot($wert);
    25. //Linie zu der Grafik hinzufügen
    26. $graph->Add($lineplot);
    27. // Grafik Formatieren
    28. $graph->img->SetMargin(50,20,20,40);
    29. $graph->title->Set("Gasverbrauch");
    30. $graph->xaxis->title->Set("Jahre");
    31. $graph->yaxis->title->Set("Verbrauch");
    32. $graph->title->SetFont(FF_FONT1,FS_BOLD);
    33. $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    34. $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    35. //Unterteilungslinien
    36. $graph -> SetGridDepth (DEPTH_FRONT);
    37. $graph -> xgrid -> Show(false, false);
    38. $graph -> ygrid -> Show(true, false);
    39. $graph->ygrid->SetColor('blue');
    40. $graph->ygrid->SetFill(true,'#EFEFEF@0.6','#BBCCFF@0.6');
    41. $graph->ygrid->SetLineStyle('dashed');
    42. $graph->ygrid->SetWeight(1);
    43. $lineplot->SetColor("blue");
    44. $lineplot->SetWeight(2);
    45. //Markierungspunkte
    46. $lineplot -> mark -> SetType (MARK_SQUARE);
    47. $lineplot -> mark -> SetFillColor("red");
    48. $lineplot -> mark -> SetWidth(3);
    49. $lineplot->value->Show();
    50. $graph->yaxis->SetColor("red");
    51. $graph->yaxis->SetWeight(2);
    52. $graph->SetShadow();
    53. // Grafik anzeigen
    54. $graph->Stroke();
    55. }
    56. ?>
    Alles anzeigen


    Das Problem liegt wahrscheinlich irgendwo bei der Select-Abfrage. Die Darstellung vom Graphen sollte passen, die übergebenen Daten allerdings nicht, weil nämlich nichs passiert :|

    Ich hoffe, ihr könnt mir helfen :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Billie ()

  • Also ich hatte das erstmal in einem separaten Skript gelöst, anstatt eines Buttons wie jetzt, hatte ich einen Link in meiner Oberfläche, der dann nur den Code für das Diagramm aufgerufen hat. Dabei wird/wurde das Diagramm sofort erstellt, über die Navigations-Button des Browser konnte ich dann auf die Hauptseite meiner Oberfläche zurück.

    Das funktioniert soweit, allerdings werden auf diese Weise wirklich alle Dateneinträge aller Jahre in einem Diagramm verfasst, weil ich da ohne den WHERE Teil rumprobiert habe...und das will ich ja nicht.

    Auf welche Weise kann man Daten noch übertragen?
  • Ich versteh im Moment nicht ganz...nur noch mal zum Verständnis.

    Mit dem HTML Tag <img src="bla.php"> kann ich das Bild einbinden, das in der bla.php mit jpgraph erstellt wird.

    Bislang habe ich aber kein Bild eingebunden, weil es direkt ausgeben wurde, nachdem der Code ausgeführt wurde.

    Also, ich habe das jetzt mal abgeändert. Den Code für die Erstellung der Grafik habe ich in eine separate Datei „grafik.php“ gepackt…in meinem Hauptskript wird das Bild aufgerufen, wenn der Benutzer den Button zur Grafik-Erstellung drückt.

    Quellcode

    1. if($_POST["cmd_zeichnen"])
    2. {
    3. echo"<img src='grafik.php'>";
    4. }


    Das funktioniert soweit einwandfrei, Grafik wird erstellt und es passt soweit, nur die Datenherkunft ist eben noch statisch und somit werden alle Werte dargestellt.

    Quellcode

    1. $abfrage="SELECT wert FROM tabelle WHERE id = $choose_id";


    Jetzt die Frage, wie wir die Benutzerauswahl an den Select-Teil übergeben…mit $_GET geht es auch nicht.

    Ich hatte ja daran gedacht:

    Quellcode

    1. $mark=$_POST["opt_haken"];
    2. foreach($mark as $choose_id)
    3. {
    4. $abfrage="SELECT gas FROM hallo WHERE id = $choose_id";
    5. $res=mysql_query($abfrage);
    6. }


    Es kommt aber nichts an…
  • Vom Aufruf her stimmt das, wie Du es geschrieben hast. In der index.php ist der Button, der ruft dann die grafik.php auf.

    Wenn der Button gedrückt wird, soll ja die Benutzerauswahl übergeben werden. Das machen wir in der index.php aber nicht, wenn ich das richtig verstehe, oder?

    Hier mal ein Ausschnitt aus der grafik.php

    Quellcode

    1. ...
    2. $graph = new Graph(600,400,"auto");
    3. $graph->SetScale("textlin");
    4. $abfrage="SELECT wert FROM tabelle WHERE id = ".mysql_real_escape_string($_GET['choose']);
    5. $res = mysql_query($abfrage) OR die(mysql_error());
    6. $i=0;
    7. while ($array=mysql_fetch_array($res))
    8. {
    9. $gas[$i]=$array[0];
    10. $i++;
    11. };
    12. $lineplot =new LinePlot($gas);
    13. $graph->Add($lineplot);
    14. ...
    Alles anzeigen
  • Ja, ich habe es übernommen...jetzt erscheint ein kleines Quadrat mit einem roten Punkt...da wo sonst die Grafik hinkommt. Wenn ich mit einem Rechtsklick draufgehe und dann Grafik anzeigen wähle, kommt "Unknown column 'Grafik' in 'where clause'".

    Jetzt suche ich den Fehler gerade und finde ihn nicht...

    EDIT: Hab jetzt endlich rausgefunden, woher "Grafik" kommt und die Fehlermeldung verursacht. Und zwar habe ich Grafik als Value bei dem zeichnen-Button.

    Und mit choose=".$_POST["cmd_zeichnen"] übergeben wir den Inhalt vom Button...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Billie ()

  • Mir gehen langsam die Ideen und Tricks aus...

    Ich habe noch versucht, die Benutzerauswahl (select-Box) mit opt_haken direkt zu übergeben, das geht leider auch nicht

    Quellcode

    1. if($_POST["cmd_zeichnen"])
    2. {
    3. echo"<img src='gas_main.php?choose=".$_POST["opt_haken"]."'>";
    4. }


    Da wird wieder nur ein kleiner Rahmen für die Grafik angelegt und unter den Eigenschaften steht "Unknown column 'Array' in 'where clause'"

    Habt ihr noch vielleicht irgendeine Idee, die ich ausprobieren könnte?
  • Billie schrieb:

    Da wird wieder nur ein kleiner Rahmen für die Grafik angelegt und unter den Eigenschaften steht "Unknown column 'Array' in 'where clause'"


    Das deutet daraquf hin, dass jpGraph zu funktionieren scheint, aber deine SQL Abfrage falsch ist.

    Schau dir die ABfragen nochmal genau an.
    Wenn du nichts findest lass sie dir ausgeben und gib sie direkt bei z.B phpMyAdmin ein um zu sehen, wass an deiner "WHERE" Abfrage falsch ist.
  • vince schrieb:

    Billie schrieb:

    Da wird wieder nur ein kleiner Rahmen für die Grafik angelegt und unter den Eigenschaften steht "Unknown column 'Array' in 'where clause'"


    Das deutet daraquf hin, dass jpGraph zu funktionieren scheint, aber deine SQL Abfrage falsch ist.

    Schau dir die ABfragen nochmal genau an.
    Wenn du nichts findest lass sie dir ausgeben und gib sie direkt bei z.B phpMyAdmin ein um zu sehen, wass an deiner "WHERE" Abfrage falsch ist.


    jpGraph funktioniert bei einer einfachen Abfrage ohne den WHERE-Teil.

    Die Abfrage kann ich leider schlecht testen, weil in der WHERE-Abfrage die Benutzerauswahl übergeben wird, die auf der Oberfläche stattfindet.

    Ich weiß nicht ob das hilft, aber vom Ablauf läuft das so.

    1. Zunächst werden alle Datensätze angezeigt.
    2. ich wähle aus einer Select-Box das gewünschte Jahre aus.
    3. es werden nur die Daten für das Jahr geladen.
    4. aus den Daten für das Jahr wird der Graph erstellt.

    Vielleicht kommen wir mit der Jahrauswahl weiter und können das in die WHERE-Abfrage einfügen...das macht keinen Unterschied, ob ich alle zwölf Datensätze anklicke oder automatisch alles aus dem Jahr übernommen wird.
  • Billie schrieb:

    Die Abfrage kann ich leider schlecht testen, weil in der WHERE-Abfrage die Benutzerauswahl übergeben wird, die auf der Oberfläche stattfindet.


    Das mag sein, aber der "WHERE-Teil" wird aus variablen zusammengesetzt und echo kann diese ausgeben.
    Wo ist dann das Problem?


    Quellcode

    1. ... WHERE abc= '...

    Wenn es abc in deiner Tabelle nicht gibt, dann kommt unknown coloum.


    Bei dir scheint es so ein Problem zu geben:

    Quellcode

    1. $array['abc'] = 'abc';

    Quellcode

    1. ... WHERE $aray= '...

    Dann kommt natürlich unknown coulum ARRAY