staafdiagram
weet iemand een eenvoudig script voor een staafdiagram dat werkt met gegevens uit een database?
hier wat aan.
Misschien heb je php is dus niet de juiste aanpak? javascript zegt me niet zoveel, ziet er ingewikkeld uit
Ingewikkeld is het zeker, maar ik zou kijken of er beetje iets kant en klaars tussen zit..
ja, maar de waarden van de verschillende staven in het diagram verandert steeds, dus de lengtes moeten bij aanroepen ook een steeds andere lengte geven
javascript te verdiepen. Er zijn online tuts genoeg. Het hoort er ook gewoon bij. Zonder javascript blijf je nergens tegenwoordig. (Besef dat PHP enkel iets kan doen voordat een pagina van de server naar de browser verstuurd wordt. Daarna kan PHP niets meer doen en heb je javascript nodig omdat die in de browser draait als de pagina al te zien is in de browser).
Indien je dit gaat doen kijk dan vervolgens eens naar AJAX en tevens naar HTML5 canvas.
Dan wordt het tijd om je eens in Indien je dit gaat doen kijk dan vervolgens eens naar AJAX en tevens naar HTML5 canvas.
Gewijzigd op 10/08/2015 17:39:33 door Frank Nietbelangrijk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
session_name('toernooien');
session_start();
header("Content-Type: image/png");
if (isset($_SESSION['trn_id'])){
$font=$_SERVER['DOCUMENT_ROOT'] . '/Fonts/ARIAL.TTF';
//echo $font;
$toernooi = $_SESSION['trn_id'];
$breedte=800;
$hoogte=600;
$marge=50;
include_once ('../php/define.php');
include_once ('../php/functions.php');
include_once ('functies.php');
include_once ('clsSpelers.php');
include_once ('clsToernooi.php');
$con = opendatabasei();
$sql='SELECT p_winst, p_remise, p_verlies, p_geefforfait, p_krijgforfait, p_afgebroken, p_uitgesteld, p_onbekend, s_winst, s_remise, s_verlies, s_geefforfait, s_krijgforfait, s_afgebroken, s_uitgesteld, s_onbekend FROM trn_toernooien WHERE id=' . $_SESSION['trn_id'];
$result=mysqli_query($con, $sql);
if ($result){
list($p_w, $p_r, $p_v, $p_gf, $p_kf, $p_a, $p_u, $p_o, $s_w, $s_r, $s_v, $s_gf, $s_kf, $s_a, $s_u, $s_o)= mysqli_fetch_row($result);
}else{
fout('De punten konden niet opgehaald worden.');
msg(mysqli_error($con));
}
$maxpunten=0;
$allSpelers=GetPlayers($con);
foreach($allSpelers as $onePlayer){
if($maxpunten<$onePlayer->punten()){
$maxpunten = $onePlayer->punten();
}
}
$maxpunten=ceil ($maxpunten/5)*5;
uasort ($allSpelers, 'compstand_punten');
foreach($allSpelers as $onePlayer){
if(fIsPlayerABye($allSpelers[$onePlayer->id]->naam)){
unset($allSpelers[$onePlayer->id]);
}
}
$im = @imagecreate($breedte, $hoogte) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 01, 01, 01);
$color_black = imagecolorallocate($im, 0, 0, 0);
$color_white = imagecolorallocate($im, 255, 255, 255);
$color_blue = imagecolorallocate($im, 0, 0, 255);
$color_yellow = imagecolorallocate($im, 255, 255, 0);
$color_green = imagecolorallocate($im, 0, 255, 0);
$color_red = imagecolorallocate($im, 255, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
$line_color1 = imagecolorallocate($im, 0, 0, 255);
$line_color2 = imagecolorallocate($im, 0, 255, 0);
$col_ellipse = imagecolorallocate($im, 255, 0, 0);
imagecolortransparent($im, $background_color);
//bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
$aantalspelers=count($allSpelers);
if($aantalspelers>0){
$barbreedte=($breedte-(2*$marge))/$aantalspelers;
if($maxpunten==0){
$maxpunten=1;
}
$punthoogte=($hoogte-$marge-$marge)/$maxpunten;
for ($n=0;$n<=$maxpunten;$n=$n+5){
imagestring($im, 2, $marge/2, $hoogte-$marge-$punthoogte*$n , $n, $color_black);
}
$x2=$marge+$barbreedte;
$x1=$marge;
$hoogte1punt=($hoogte-(2*$marge))/$maxpunten;
$start=$hoogte-$marge;
foreach($allSpelers as $onePlayer){
//gewonnentotaal remise verlorentotaal
$punten=$onePlayer->punten();
$y1 = $start - ($punten * $hoogte1punt);
$ySchijding[]=$y1;
imagefilledrectangle($im, $x1, $y1, $x2, $start, $color_green);
imagestring($im, 5, $x1+$barbreedte*.4, $y1-20 , $punten, $color_black);
$punten -= ($onePlayer->gewonnen()*$onePlayer->pw)+($onePlayer->forfaitgewonnen()*$onePlayer->pkf);
$y1 = $start - ($punten * $hoogte1punt);
imagefilledrectangle($im, $x1, $y1, $x2, $start, $color_yellow);
$punten=$onePlayer->verloren() * $onePlayer->pv + $onePlayer->forfaitverloren() * $onePlayer->pgf;
$y1 = $start - ($punten * $hoogte1punt);
imagefilledrectangle($im, $x1, $y1, $x2, $start, $color_red);
//print rotated naam
imagettftext ($im , 16 , 90 , $x1+($barbreedte/2) , 540, $color_black , $font , $onePlayer->naam );
//bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
$x1=$x2;
$x2 += $barbreedte;
}
//schijdingslijnen
$x2=$marge+$barbreedte;
$x1=$marge;
foreach ($ySchijding as $y){
imageline ($im, $x2, $y , $x2 , 550 , $color_blue );
$x1=$x2;
$x2 += $barbreedte;
}
//bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
imageline($im,50,50,50,550,$color_black);
imageline($im,50,550,750,550,$color_black);
}else{
imagestring($im, 5, 5, 5 , 'Geen spelers', $color_black);
}
}else{
$im = @imagecreate(200, 20) or die("Cannot Initialize new GD image stream");
imagecolortransparent($im, imagecolorallocate($im, 01, 01, 01));
imagestring($im, 5, 5, 5 , 'Geen toernooi actief!', imagecolorallocate($im, 0, 0, 0));
}
imagepng($im);
imagedestroy($im);
?>
session_name('toernooien');
session_start();
header("Content-Type: image/png");
if (isset($_SESSION['trn_id'])){
$font=$_SERVER['DOCUMENT_ROOT'] . '/Fonts/ARIAL.TTF';
//echo $font;
$toernooi = $_SESSION['trn_id'];
$breedte=800;
$hoogte=600;
$marge=50;
include_once ('../php/define.php');
include_once ('../php/functions.php');
include_once ('functies.php');
include_once ('clsSpelers.php');
include_once ('clsToernooi.php');
$con = opendatabasei();
$sql='SELECT p_winst, p_remise, p_verlies, p_geefforfait, p_krijgforfait, p_afgebroken, p_uitgesteld, p_onbekend, s_winst, s_remise, s_verlies, s_geefforfait, s_krijgforfait, s_afgebroken, s_uitgesteld, s_onbekend FROM trn_toernooien WHERE id=' . $_SESSION['trn_id'];
$result=mysqli_query($con, $sql);
if ($result){
list($p_w, $p_r, $p_v, $p_gf, $p_kf, $p_a, $p_u, $p_o, $s_w, $s_r, $s_v, $s_gf, $s_kf, $s_a, $s_u, $s_o)= mysqli_fetch_row($result);
}else{
fout('De punten konden niet opgehaald worden.');
msg(mysqli_error($con));
}
$maxpunten=0;
$allSpelers=GetPlayers($con);
foreach($allSpelers as $onePlayer){
if($maxpunten<$onePlayer->punten()){
$maxpunten = $onePlayer->punten();
}
}
$maxpunten=ceil ($maxpunten/5)*5;
uasort ($allSpelers, 'compstand_punten');
foreach($allSpelers as $onePlayer){
if(fIsPlayerABye($allSpelers[$onePlayer->id]->naam)){
unset($allSpelers[$onePlayer->id]);
}
}
$im = @imagecreate($breedte, $hoogte) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 01, 01, 01);
$color_black = imagecolorallocate($im, 0, 0, 0);
$color_white = imagecolorallocate($im, 255, 255, 255);
$color_blue = imagecolorallocate($im, 0, 0, 255);
$color_yellow = imagecolorallocate($im, 255, 255, 0);
$color_green = imagecolorallocate($im, 0, 255, 0);
$color_red = imagecolorallocate($im, 255, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
$line_color1 = imagecolorallocate($im, 0, 0, 255);
$line_color2 = imagecolorallocate($im, 0, 255, 0);
$col_ellipse = imagecolorallocate($im, 255, 0, 0);
imagecolortransparent($im, $background_color);
//bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
$aantalspelers=count($allSpelers);
if($aantalspelers>0){
$barbreedte=($breedte-(2*$marge))/$aantalspelers;
if($maxpunten==0){
$maxpunten=1;
}
$punthoogte=($hoogte-$marge-$marge)/$maxpunten;
for ($n=0;$n<=$maxpunten;$n=$n+5){
imagestring($im, 2, $marge/2, $hoogte-$marge-$punthoogte*$n , $n, $color_black);
}
$x2=$marge+$barbreedte;
$x1=$marge;
$hoogte1punt=($hoogte-(2*$marge))/$maxpunten;
$start=$hoogte-$marge;
foreach($allSpelers as $onePlayer){
//gewonnentotaal remise verlorentotaal
$punten=$onePlayer->punten();
$y1 = $start - ($punten * $hoogte1punt);
$ySchijding[]=$y1;
imagefilledrectangle($im, $x1, $y1, $x2, $start, $color_green);
imagestring($im, 5, $x1+$barbreedte*.4, $y1-20 , $punten, $color_black);
$punten -= ($onePlayer->gewonnen()*$onePlayer->pw)+($onePlayer->forfaitgewonnen()*$onePlayer->pkf);
$y1 = $start - ($punten * $hoogte1punt);
imagefilledrectangle($im, $x1, $y1, $x2, $start, $color_yellow);
$punten=$onePlayer->verloren() * $onePlayer->pv + $onePlayer->forfaitverloren() * $onePlayer->pgf;
$y1 = $start - ($punten * $hoogte1punt);
imagefilledrectangle($im, $x1, $y1, $x2, $start, $color_red);
//print rotated naam
imagettftext ($im , 16 , 90 , $x1+($barbreedte/2) , 540, $color_black , $font , $onePlayer->naam );
//bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
$x1=$x2;
$x2 += $barbreedte;
}
//schijdingslijnen
$x2=$marge+$barbreedte;
$x1=$marge;
foreach ($ySchijding as $y){
imageline ($im, $x2, $y , $x2 , 550 , $color_blue );
$x1=$x2;
$x2 += $barbreedte;
}
//bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
imageline($im,50,50,50,550,$color_black);
imageline($im,50,550,750,550,$color_black);
}else{
imagestring($im, 5, 5, 5 , 'Geen spelers', $color_black);
}
}else{
$im = @imagecreate(200, 20) or die("Cannot Initialize new GD image stream");
imagecolortransparent($im, imagecolorallocate($im, 01, 01, 01));
imagestring($im, 5, 5, 5 , 'Geen toernooi actief!', imagecolorallocate($im, 0, 0, 0));
}
imagepng($im);
imagedestroy($im);
?>
Quote:
ja, maar de waarden van de verschillende staven in het diagram verandert steeds, dus de lengtes moeten bij aanroepen ook een steeds andere lengte geven
Dit zal geen probleem zijn, je geeft de images een height setting mee die je aanpast naar de resultaten.