PHPlot darstellen

balexan

Grünschnabel
Hallo,
Ich habe diesen phplot code geschrieben

PHP:
<?php

// here we include the PHPlot code
require_once ('phplot/phplot.php'); 
include('db_connect.inc.php');

$data = array();   

$sql = "SELECT * FROM `test becker` WHERE id = 2 ORDER BY zeitstempel DESC LIMIT 10" ;

$x   = 'zeitstempel'

while($row = mysql_fetch_assoc($sql,$db))
{
 $data [] = array('', $x, $row['spg']); 
}  

$plot = new PHPlot(800, 600);
$plot->SetImageBorderType('none');
$plot->SetPlotType('lines');
$plot->SetDataType('data-data');
$plot->SetDataValues($data);

//Specify plotting area details
$plot->SetTitle('Wochenasicht LKW');
$plot->SetYTitle('Spannung');
$plot->SetXTitle('Zeit');
$plot->SetLegend(array('Spannungs verlauf'));
$plot->SetDataColors(array('red'));

//Define the axis
$plot->SetPlotAreaWorld(NULL, NULL, NULL, NULL);

//Disable image output
$plot->SetPrintImage(false);

//Draw the graph
$plot->DrawGraph();

?>

und will das wenn ich die Datei (siehe unten) auf der Website aufruf das obere Diagramm mit angezeigt wird.
Wie mach ich das?
Ist der phplot zugriff Code überhaupt richtig?

Danke.

PHP:
<?php

//echo "Inhalt der Datei: WochenasichtLKW.inc.php";
include('db_connect.inc.php');

//SQL-Befehl vorbereiten   
$sql = "SELECT * FROM `test becker` WHERE id = 2 ORDER BY zeitstempel DESC LIMIT 10" ;
$erg = mysql_query ($sql,$db) or die ("Fehlermeldung=". mysql_error());
$anz = mysql_num_rows($erg);

echo "<table>";
echo "<thead>";
echo "<tr><th>id</th><th>zeitstempel</th><th>variante</th><th>spg</th><th>verbindung</th><th>komentar</tr>";
echo "</thead";
echo "<tbody>";

for ($i=0; $i<$anz; $i=$i+1)
{
  $a=mysql_result($erg, $i, "id");
  $b=mysql_result($erg, $i, "zeitstempel");
  $c=mysql_result($erg, $i, "variante");
  $d=mysql_result($erg, $i, "spg");
  $e=mysql_result($erg, $i, "verbindung");
  $f=mysql_result($erg, $i, "komentar");

  echo"<tr><td>$a</td><td>$b</td><td>$c</td><td>$d</td><td>$e</td><td>$f</tr>";
}

echo "</tbody>";
echo "</table>";  
?>
 
Zuletzt bearbeitet von einem Moderator:
Die Chance das dir geholfen wird, erhöht sich ungemein wenn du dein PHP-Code in ein [ php ]$foo = "bar";[ /php ] packst :)
 
Ich habe kurzerhand den ganzen Beitrag auf Vordermann gebracht (Notepad++ Suchen & Ersetzen / reguläre Ausdrücke :))!

Nun, unter der Annahme, dass $plot->DrawGraph() ein Bild inkl. richtigen HTTP-Headern ausgibt, könntest du die ersten Datei einfach mittels <img> referenzieren:
HTML:
<img src="erste-datei-mit-plot-code.php" />

Du solltest allerdings das Bild irgendwie cachen, ansonsten generierst du es immer wieder erneut!

Weitere Anmerkungen:
1) Die mysql-Erweiterung ist veraltet. Informier dich darüber im Internet. Nutze mysqli oder PDO. In beiden Fällen aber Prepared Statements für Benutzereingaben! Diese Erweiterung ist mittlerweile schon so lange veraltet, dass ich nicht verstehen kann, wo Leute die Benutzung solchen Codes aufgabeln. Quasi auf jeder vernünftigen PHP-Dokumentationsseite ist eine große, unübersehbare Warnung vermerkt.

2) In Zeile 14 deiner zweiten Datei fehlt eine schließende spitze Klammer
3) Du den Variablennamen a bis f sag ich mal nichts. Das hätte wesentlich eleganter mit einem Array gelöst werden können.
 
Hi, Danke für die Antwort.
habe mich in 2 Monaten von 0 aus über Yotube und Foren eingelernt, Alles irgntwie zusammengebastellt, darum ist alles unprofessionell.
Habe das programm zum laufen gebracht.
Das Ganze PHP einfach in HTML verpackt und mit <img src="graph_id2.php"> ausgegeben.
Das phplot musste auch noch bissle umbauen, aber jetzt habe weinigsten ein Diagramm.
Leider ohne X achsen Datten???
Also spg Datten habe ich, nur Zeitstempel Datten gehen nicht.
Habe auch nichts in phplot Bibliotek gefunden.
Warum ? Was ist Falsch? Ist das überhaupt möglich?
PHP:
 $data = array();
while($row = mysql_fetch_array($erg))
{  $data [] = array('', $row['zeitstempel'], $row['spg']);  }


Wenn ich es so schreib dann gehts, aber wie gesagt ohne 'zeitstempel ' Datten
PHP:
$data = array();
$x   = 0;
while($row = mysql_fetch_array($erg))
{  $data [] = array('', $x, $row['spg']);
    $x++;  }


Was meinst Du mit Variablennamen a bis f anders schreiben. Wie?

Danke.
 
Also spg Datten habe ich, nur Zeitstempel Datten gehen nicht.
Bitte konkretisiere! Was heißt "nicht gehen"? Kannst du vielleicht die Bilder beider Diagramme hochladen?

Was meinst Du mit Variablennamen a bis f anders schreiben. Wie?
Solche Variablennamen sind nicht aussagekräftig. Gewöhn dir gleich an, sinnvolle Variablennamen zu vergeben. In deinem Fall könnten sie z. B. den Spaltennamen entsprechen.

Laut http://www.phplot.com/phplotdocs/SetXLabelType.html werden die X-Werte "as-is" dargestellt, d. h. unverändert, somit dürften Datumswerte eigentlich auch in Ordnung gehen.
 
mit dem code
PHP:
$data = array();
$x   = 0;
while($row = mysql_fetch_array($erg))
{  $data [] = array('', $x, $row['spg']);
    $x++;  }
50182-3bb5157cc76b847a73a97b6d514f2f22.jpg



mit Klammer am anfang keine X Datten und alles in einer Reihe rechts.
PHP:
$data = array();
while($row = mysql_fetch_array($erg))
{  $data [] = array('', $row['zeitstempel'], $row['spg']);  }


50183-5d48f052aba051f2c8b40bddf1e11ccd.jpg



mit KLammer in der mitte alles in einer Reihe Links
PHP:
$data [] = array($row['zeitstempel'], '',$row['spg']);
50184-4fafc82f2330e54f543976da8cc05f1a.jpg



und ohne klammer keine Y Datten und keine Linie
PHP:
$data [] = array($row['zeitstempel'],$row['spg']);
50187-9ee603dce0aac4368da308583d630a2a.jpg


weiss nicht was ich noch ausprobieren soll/kann.
oder ganz anders eingeben??
 
Warum nimmst du für das Plotten PHP? Ich würde immer Javascript dafür nehmen - die Graphen sind nämlich besser bedienbar (Interaktivität) und meistens einfacher benutz und erstellbar als das ganze PHP Zeugs. (Wenn du mal mit Bildern und PHP gearbeitet hast, weißt du was dahintersteckt.)

Als Alternative: http://www.chartjs.org/docs/#line-chart
Oder von Google: https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart
Dein PHP Array bekommst du in ein JS valides Array mit http://de2.php.net/manual/de/function.json-encode.php
 
Sorry, mir ist die Fragestellung zu konfus präsentiert. Ich habe keine Lust, zu versuchen, das nachzuvollziehen, obwohl man das auch viel einfacher fragen könnte.

Du kannst dir zum Beispiel für eine Präsentation des Problems den kompletten DB-Code sparen und Testdaten, die das Problem hervorrufen, einfach als Array direkt im Code definieren. Von uns hat die DB halt keiner, was es für uns nur total umständlich macht, den Code gegebenenfalls mal zu testen, um ihn zu reparieren.

Die Frage in gut könnte grob so aussehen:

Hi.

Ich nutze PHPlot (Download hier: http://sourceforge.net/projects/phplot/), um ein Diagramm zu generieren. Bei diesem Code…

PHP:
<?php

require_once __DIR__ . '/phplot/phplot.php';

$data = array(...);

$plot = new PHPlot(800, 600);
$plot->SetImageBorderType('none');
$plot->SetPlotType('lines');
$plot->SetDataType('data-data');
$plot->SetDataValues($data);
 
//Specify plotting area details
$plot->SetTitle('Wochenasicht LKW');
$plot->SetYTitle('Spannung');
$plot->SetXTitle('Zeit');
$plot->SetLegend(array('Spannungs verlauf'));
$plot->SetDataColors(array('red'));
 
//Define the axis
$plot->SetPlotAreaWorld(NULL, NULL, NULL, NULL);
 
//Disable image output
$plot->SetPrintImage(false);
 
//Draw the graph
$plot->DrawGraph();

…gibt es aber Darstellungsfehler bei der Beschriftung der X-Achse.

[Bild]

Hat jemand eine Idee, woran das liegt?

Danke!

Das Schöne ist zudem: Wenn du dir die Mühe machst, ein wirklich gutes Beispiel für Helfer im Forum zu erstellen, dann findest du oft dabei schon selbst die Fehlerursache.
 
Zurück