Beste leden,
Ik ben aan de hand van een Grafiek (3D) die hier gepost was een uitgebreidere te maken die met een database samenwerkt.
Het volgende script heb ik reeds:
<?PHP
// Config includen voor database connectie!!
$dbh = "localhost";
$dbu = "xxx";
$ddb = "xxx";
$dww = "xxx";
mysql_connect("".$dbh."", "".$dbu."", "".$dww.""); // Mysql verbinding maken, zo niet een foutmelding
mysql_select_db("".$ddb.""); // Selecteren van de tabel in de database, is het fout komt er een melding
// Dagen deze maand
$days_tm = date("t");
// Datum deze dag 01 t/m 31
$day_td = date("d");
$i = 1;
// Ophalen gegevens uit de database en verwerken in de grafiek
$sql_001 = mysql_query("SELECT gewicht,UNIX_TIMESTAMP(datum) AS datum FROM consult WHERE klid=15") or die(mysql_error());
while($test = mysql_fetch_assoc($sql_001))
{
$gegevens[] = $test['gewicht'];
$datum[] = date("d-m-y", $test['datum']);
$legenda[] = $i;
$i++;
}
$kleuren = "#FF0000"; // Dit was een array met div. kleurcodes, ik heb er 1 kleur van gemaakt waar de grafiek in gemaakt wordt
//$legenda = array('Type A', 'Type B', 'Type C');
$img_hoogte = 200; // Hoogte van het plaatje
$breedte = 20; // Breedte van de kolom
// Berekend de breedte van het plaatje excl. de legenda breedte
function kolom_hoogte($deel, $max, $img_hoogte, $breedte)
{
return ($deel/$max)*($img_hoogte-(0.5*$breedte));
}
// Voor het 3d effect (half cosinus 30)
function schuin_x($breedte)
{
return $breedte*0.43;
}
// Voor het 3d effect (half sinus 30)
function schuin_y($breedte)
{
return $breedte*0.25;
}
// Zet de HTML kleur om in een rbg waarde.
function hex2rbg($color, $image)
{
$string = str_replace('//','',$color);
return imagecolorallocate($image, hexdec(substr($string,0,2)), hexdec(substr($string,2,2)), hexdec(substr($string,4,2)));
}
// Berekend het maximum aantal tekens per array waarde en geeft de lengte van de langste terug.
function maxarraylength($input)
{
foreach($input as $v)
{
$output[] = strlen($v);
}
return max($output);
}
header("content-type: image/png");
// grootte van het plaatje basseren op het aantal kolomen:
$kolomen = count($gegevens);
$width = ($kolomen*$breedte*2)+(0.5*$breedte);
$image = imagecreate($width+(maxarraylength($legenda)*7)+25, ($img_hoogte+1));
// Achtergrond:
$bg = imagecolorallocate($image, 255, 255, 255);
// KOLUMS
for($i=0;$i<$kolomen;$i++)
{
// vars:
$begin = ($i*$breedte)+($i*$breedte)+(0.5*$breedte);
$hoogte = kolom_hoogte($gegevens[$i], max($gegevens), $img_hoogte, $breedte);
$kleur = hex2rbg($kleuren, $image); // [$i] achter @kleuren weggehaald om de grafiek alle statuten dezelfde kleur te geven
$black = imagecolorallocate($image, 0, 0, 0);
// kolom:
imagefilledrectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $kleur); // Vlak
imagerectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $black); // Omlijning
// Tekst toevoegen aan de Grafiek(Dit is nieuw in de grafiek!)
$im = imagecreate(20, 110);
$background_color = imagecolorallocate($im, 255, 255, 255);
$text_color = imagecolorallocate($im, 233, 14, 91);
//imagestring($im, 1, 5, 5, "".$datum[$i]."", $text_color);
//imagegif($im);
// 3d effect:
$punten = array(
$begin,// X
($img_hoogte-$hoogte),// Y
($begin+schuin_x($breedte)),// X
($img_hoogte-$hoogte-schuin_y($breedte)),// Y
($begin+$breedte+schuin_x($breedte)),// X
($img_hoogte-$hoogte-schuin_y($breedte)),// Y
($begin+$breedte+schuin_x($breedte)),// X
($img_hoogte-schuin_y($breedte)),// Y
($begin+$breedte),// X
$img_hoogte,// Y
($begin+$breedte),// X
($img_hoogte-$hoogte)// Y
);
imagefilledpolygon($image, $punten, 6, $kleur); // Vlak
imagepolygon($image, $punten, 6, $black); // Omlijning
imageline($image, $punten[10], $punten[11], $punten[4], $punten[5], $black); // Tussen lijn
// Legenda:
$top = (15*$i)+(15*$i)+(0.5*$breedte);
$left = ($kolomen*$breedte)+($kolomen*$breedte)+(0.5*$breedte);
imagefilledrectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $kleur); // Vlak
imagecharup($im, 1, $top*0.5, $left+15, $datum[$i], $kleur);
imagerectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $black); // Omlijning
imagestring($image, 3, $left+20, $top*0.5, $legenda[$i], $black); // Text
}
// // KOLUMS
imagepng($image);
imagedestroy($image);
?>
De bedoeling is dat in de grafiek op http://www.aviestar-hosting.nl/ag.php in elke verticale balk de datum in komt te staan en eronder het gewicht.
Hoe kan ik dit regelen, ik heb al iets geprobeert als op regel: 128
Staat er nog in maar geeft geen effect, wie kan mij hierin even ondersteunen?
Alvast reuze bedankt!
1.692 views