PHP Probleme mit Libchart

KamehamehaX10

Banned
Registriert
Mai 2012
Beiträge
575
Ich habe mich jetzt aus Langeweile mal erstmalig an eine PHP-Kleinigkeit gesetzt. Komme eigentlich aus dem Bereich der Anwendungsentwicklung und habe mir ein bisschen was zusammengebastelt, weil ich einige Daten, die von einem Sourcemod-Plugin in eine Datenbank geschrieben werden, gerne über den Browser aufbereitet abrufen möchte.

Code:
<html><head><title><?php echo "Playtime chart";?></title></head>
<body>
<?php
//Includes
include "include/libchart.php";

//Create connection /var/run/mysqld/mysqld.sock
$con = mysqli_connect("localhost","bla","dsjfhsd","foo");

//Check connection
if (mysqli_connect_errno($con))
{
	echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
	if($result = mysqli_query($con, "SELECT Playtime FROM Playtimes"))
	{
		$playtimeBars = array("<100", "<200", "<300", "<400", "<500",
							  "<600", "<700", "<800", "<900", "<1000",
							  "<1100", "<1200", "<1300", "<1400", "<1500",
							  "<1600", "<1700", "<1800", "<1900", "<2000",
							  "<2100", "<2200", "<2300", "<2400", "<2500",
							  "2500<=");
		$playtimeValues = array(0, 0, 0, 0, 0,
								0, 0, 0, 0, 0,
								0, 0, 0, 0, 0,
								0, 0, 0, 0, 0,
								0);
		$chart = new VerticalBarChart(1200, 600);
		while($row = mysqli_fetch_array($result))
		{
			$playtime = $row['Playtime'];
			$index = floor($playtime / 100);
			if($index > 25)
			{
				$index = 25;
			}
			$playtimeValues[$index]++;
		}
		$dataSet = new XYDataSet();
		for ($i = 0; $i <= 25; $i++)
		{
			$dataSet->addPoint(new Point($playtimeBars[$i], $playtimeValues[$i]));
			echo $playtimeBars[$i] . ": " . $playtimeValues[$i];
		} 
		$chart->setDataSet($dataSet);
		$result = mysqli_query($con, "SELECT avg(Playtime), stddev(Playtime), count(Playtime) from Playtimes");
		if($row = mysqli_fetch_array($result))
		{
			$chart->setTitle("Total entries: " . $row[2] . " Average playtime: " . $row[0] . " Standard deviation: " . $row[1]);
			$chart->render("generated/chart.png");
			echo "Rendered chart!";
			echo "Total entries: " . $row[2] . " Average playtime: " . $row[0] . " Standard deviation: " . $row[1];
		}
		else
		{
			echo "Error querying database: " . mysqli_error($con);
		}
	}
	else
	{
		echo "Error querying database: " . mysqli_error($con);
	}
}
mysqli_close($con);
?>
<div>
	<img src="generated/chart.png" alt="Chart"/>
</div>
</body>
</html>

Das Ergebnis sieht momentan leider so aus:

Die Textausgaben sind beabsichtigt (verzweifeltes Debugging).
Verzweifelt, weil ich nicht weiß, was da falsch sein soll. Erstens wird das komplett überschossen, dann gibt es bei beiden Achsen keine Captions, keinen Titel, gar nichts.
Laut Sample (http://naku.dohcrew.com/libchart/pages/samplecode/) sollte das doch sehr geschmeidig gehen. Fehler im Apache Log gibt es keine, und die Debugausgaben sind auch alle korrekt. oO

Bin für jede Hilfe dankbar!
Kamehameha_by_rad66203.gif
 
Zuletzt bearbeitet:
bei der Definition von $playtimeValues fehlt eine Zeile mit Nullen.
Du hast nur das Array nur 21 Werte breit erstellt und greifst auf den 26. Wert zu.
 
Hatte ich grade auch gesehen, wenn du das Error Rporting einschaltest kommt auch:
Notice: Undefined offset...

Allerdings kann ich deine Darstellung nicht reproduzieren.

test.png

Mit den Werten, die auf deiner Seite ausgegeben werden sieht das bei mir so aus (auch ohne die fehlende Zeile Nullen).
Hab deine Datenbank nicht und im Array sinds nur Nullen.

So ist das bei mir in Xampp:

Code:
<!DOCTYPE html>
<html>

<head>
    <title>TEST</title>

</head>

<body>
<p>test</p>

<?php

include "/libchart/classes/libchart.php";

$playtimeBars = array("<100", "<200", "<300", "<400", "<500",
"<600", "<700", "<800", "<900", "<1000",
"<1100", "<1200", "<1300", "<1400", "<1500",
"<1600", "<1700", "<1800", "<1900", "<2000",
"<2100", "<2200", "<2300", "<2400", "<2500",
"2500<=");

$playtimeValues = array(77, 20, 16, 12, 6,
7, 7, 5, 8, 3,
3, 3, 3, 2, 1,
1, 1, 4, 0, 0,
0, 0, 0, 0, 8,
0);
$chart = new VerticalBarChart(1200, 600);

$dataSet = new XYDataSet();

for ($i = 0; $i <= 25; $i++) {
	$dataSet->addPoint(new Point($playtimeBars[$i], $playtimeValues[$i]));
}
$chart->setDataSet($dataSet);


$chart->setTitle("Test");
$chart->render("generated/test.png");

?>

<div>
<img src="generated/test.png" alt="Chart" />
</div>
</body>

</html>

Falls nicht schon die fehlenden Werte der Schlüssel sind kannst du ja vtl. das mal testen und dann wieder Schrittweise weitergehen.
 
Zuletzt bearbeitet:
Also die Nullen habe ich jetzt schonmal hinzugefügt, Ergebnis siehe oben.
Dass aber keine Captions zu sehen sind, verstehe ich nicht. Evtl. liegt es an dem playtimeBars-Array und man muss das irgendwie parsen/casten/dem Interpreter klarmachen, dass das ein String sein soll?
Ich weiß es nicht, weil PHP, öhm naja, "Ducktype" um es mal gelinde zu sagen.

EDIT:
Code:
[Wed Jul 24 16:16:02 2013] [warn] [client 87.150.162.167] mod_fcgid: stderr: ext.php on line 90
[Wed Jul 24 16:16:02 2013] [warn] [client 87.150.162.167] mod_fcgid: stderr: PHP Warning:  imageftbbox(): Could not find/open font in /var/www/stice/htdocs/house/include/view/text/Text.php on line 67
[Wed Jul 24 16:16:02 2013] [warn] [client 87.150.162.167] mod_fcgid: stderr: PHP Warning:  imagettftext(): Could not find/open font in /var/www/stice/htdocs/house/include/view/text/Text.php on line 90

Gehe mal davon aus, dass eine Font nachinstalliert werden muss. Habe aber momentan keinen direkten Zugriff auf den Server, also warten...

EDIT: Problem gelöst, es mussten Fonts nachgeladen werden.
 
Zuletzt bearbeitet:
Zurück
Oben