grafiek opmaken per maand van het jaar
Pagina: « vorige 1 2 3 volgende »
Hoe ziet je lus eruit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$x = 1;
do {
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = ".$x." AND YEAR(datin) = YEAR(CURRENT_DATE)";
$result = $con->query($sqlb);
$data = $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal voor maand '.$x.' : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';
$x++;
} while ($x <= 12);
do {
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = ".$x." AND YEAR(datin) = YEAR(CURRENT_DATE)";
$result = $con->query($sqlb);
$data = $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal voor maand '.$x.' : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';
$x++;
} while ($x <= 12);
Waarom je keuze voor een do while?
En waarom op deze merkwaardige manier waarbij je opnieuw een query uitvoert per iteratie?
Is dit gewoon gokken, of rücksichtslos maar erop los proberen zonder te weten wat je doet? :-P
Wat is er mis met een normale while? Zie ook: https://www.w3schools.com/php/php_mysql_select.asp
Maar dan moet je dus i.p.v. text printen een nieuwe array samenstellen.
En waarom op deze merkwaardige manier waarbij je opnieuw een query uitvoert per iteratie?
Is dit gewoon gokken, of rücksichtslos maar erop los proberen zonder te weten wat je doet? :-P
Wat is er mis met een normale while? Zie ook: https://www.w3schools.com/php/php_mysql_select.asp
Maar dan moet je dus i.p.v. text printen een nieuwe array samenstellen.
Gewijzigd op 30/10/2023 19:01:50 door - Ariën -
Alvast bedankt voor alles, maar op deze manier ben ik niet verder geholpen.
Toch nogmaals mijn dank voor uw tijd.
Toch nogmaals mijn dank voor uw tijd.
Wat lukt er dan niet aan? Ik heb in dit topic al een stappenplan en een linkje naar W3Schools gegeven.
Waar loop je nog op vast? 90 Procent heb je al. Enkel de whileloop en de array.
Waar loop je nog op vast? 90 Procent heb je al. Enkel de whileloop en de array.
Gewijzigd op 30/10/2023 19:58:43 door - Ariën -
Ik heb momenteel een goede array waar mijn getallen in zitten .
Als ik dit in de java ingeef zoals u mij dit zei krijg ik een wit scherm.
$tot = de volledige array
ziehier de volledige code
Als ik dit in de java ingeef zoals u mij dit zei krijg ik een wit scherm.
$tot = de volledige array
ziehier de volledige code
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
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
<html>
<head>
<title>Staafdiagram voorbeeld met Chart.js</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="myBarChart" width="400" height="400"></canvas>
<script>
// Je gegevens voor het staafdiagram
<?php
// query even ophakken in leesbare regels
$x = 1;
$tot=array();
do {
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = ".$x." AND YEAR(datin) = YEAR(CURRENT_DATE)";
$result = $con->query($sqlb);
$data = $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal voor maand '.$x.' : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';
array_push($tot,$data['total']);
$x++;
} while ($x <= 12);
?>
var data = {
labels: ["januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
datasets: [{
label: "Cachen per maand",
data: [<?php echo $tot;?> ], // Hier voeg je je eigen data toe.
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
],
borderWidth: 1
}]
};
var options = {
scales: {
y: {
beginAtZero: true
}
}
};
// Maak een staafdiagram
var ctx = document.getElementById('myBarChart').getContext('2d');
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
</script>
</body>
</html>
<head>
<title>Staafdiagram voorbeeld met Chart.js</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="myBarChart" width="400" height="400"></canvas>
<script>
// Je gegevens voor het staafdiagram
<?php
// query even ophakken in leesbare regels
$x = 1;
$tot=array();
do {
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = ".$x." AND YEAR(datin) = YEAR(CURRENT_DATE)";
$result = $con->query($sqlb);
$data = $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal voor maand '.$x.' : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';
array_push($tot,$data['total']);
$x++;
} while ($x <= 12);
?>
var data = {
labels: ["januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
datasets: [{
label: "Cachen per maand",
data: [<?php echo $tot;?> ], // Hier voeg je je eigen data toe.
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
],
borderWidth: 1
}]
};
var options = {
scales: {
y: {
beginAtZero: true
}
}
};
// Maak een staafdiagram
var ctx = document.getElementById('myBarChart').getContext('2d');
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
</script>
</body>
</html>
Die do-while loop kan weggooien. Dat is echt nonsens wat je daar doet.
Check even op die link van W3Schools hoe ze dat doen.
Check even op die link van W3Schools hoe ze dat doen.
Aantal voor maand 1 : 545
Aantal voor maand 2 : 6491
Aantal voor maand 3 : 13340
Aantal voor maand 4 : 1986
Aantal voor maand 5 : 1635
Aantal voor maand 6 : 1226
Aantal voor maand 7 : 1161
Aantal voor maand 8 : 521
Aantal voor maand 9 : 5265
Aantal voor maand 10 : 1435
Aantal voor maand 11 : 0
Aantal voor maand 12 : 0
Array ( [0] => 545 [1] => 6491 [2] => 13340 [3] => 1986 [4] => 1635 [5] => 1226 [6] => 1161 [7] => 521 [8] => 5265 [9] => 1435 [10] => 0 [11] => 0 )
Aantal voor maand 2 : 6491
Aantal voor maand 3 : 13340
Aantal voor maand 4 : 1986
Aantal voor maand 5 : 1635
Aantal voor maand 6 : 1226
Aantal voor maand 7 : 1161
Aantal voor maand 8 : 521
Aantal voor maand 9 : 5265
Aantal voor maand 10 : 1435
Aantal voor maand 11 : 0
Aantal voor maand 12 : 0
Array ( [0] => 545 [1] => 6491 [2] => 13340 [3] => 1986 [4] => 1635 [5] => 1226 [6] => 1161 [7] => 521 [8] => 5265 [9] => 1435 [10] => 0 [11] => 0 )
Kijk, een die array die we onderaan zien, daar hebben we wat aan! :-)
Die kan je in implode() gebruiken.
Die kan je in implode() gebruiken.
Dit is momenteel niet mijn vraag, ik heb een array maar deze werkt blijkbaar niet in chart.js ???
Waarom zou het niet werken?
In data van jscharts staat een komma-gescheiden reeks met cijfers. Het maakt voor chart.js niet uit of deze handmatig zijn ingevuld of via een PHP-script gegenereerd worden.
Als het niet werkt, dan doe je blijkbaar iets fout?
In data van jscharts staat een komma-gescheiden reeks met cijfers. Het maakt voor chart.js niet uit of deze handmatig zijn ingevuld of via een PHP-script gegenereerd worden.
Als het niet werkt, dan doe je blijkbaar iets fout?
Ik krijg enkel dit te zien zonder staaf grafiek
545,6491,13340,1986,1635,1226,1161,521,5265,1461,0,0
545,6491,13340,1986,1635,1226,1161,521,5265,1461,0,0
Hoe ziet je volledige code er dan uit?
hier is de volledige code :
er zitten nog echo's tussen voor kontrole
Maar ik krijg geen grafiek
er zitten nog echo's tussen voor kontrole
Maar ik krijg geen grafiek
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
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
<?php
// query even ophakken in leesbare regels
$x = 1;
$tot=array();
do {
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = ".$x." AND YEAR(datin) = YEAR(CURRENT_DATE)";
$result = $con->query($sqlb);
$data = $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal voor maand '.$x.' : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';
$values= implode(", ",$tot);
$x++;
} while ($x <= 12);
echo $values ;
?>
<html>
<head>
<title>Staafdiagram voorbeeld met Chart.js</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="myBarChart" width="1000" height="400"></canvas>
<script>
// Je gegevens voor het staafdiagram
var data = {
labels: ["januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
datasets: [{
label: "Cachen per maand",
data: [<?php echo $values;?> ], // Hier voeg je je eigen data toe.
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
],
borderWidth: 1
}]
};
var options = {
scales: {
y: {
beginAtZero: true
}
}
};
// Maak een staafdiagram
var ctx = document.getElementById('myBarChart').getContext('2d');
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
</script>
</body>
</html>
// query even ophakken in leesbare regels
$x = 1;
$tot=array();
do {
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = ".$x." AND YEAR(datin) = YEAR(CURRENT_DATE)";
$result = $con->query($sqlb);
$data = $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal voor maand '.$x.' : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';
$values= implode(", ",$tot);
$x++;
} while ($x <= 12);
echo $values ;
?>
<html>
<head>
<title>Staafdiagram voorbeeld met Chart.js</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="myBarChart" width="1000" height="400"></canvas>
<script>
// Je gegevens voor het staafdiagram
var data = {
labels: ["januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
datasets: [{
label: "Cachen per maand",
data: [<?php echo $values;?> ], // Hier voeg je je eigen data toe.
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
],
borderWidth: 1
}]
};
var options = {
scales: {
y: {
beginAtZero: true
}
}
};
// Maak een staafdiagram
var ctx = document.getElementById('myBarChart').getContext('2d');
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
</script>
</body>
</html>
Luisteren of lezen is lastig, blijkbaar?
- Ariën - op 30/10/2023 20:07:17:
Die do-while loop kan weggooien. Dat is echt nonsens wat je daar doet.
Check even op die link van W3Schools hoe ze dat doen.
Check even op die link van W3Schools hoe ze dat doen.
Gewijzigd op 30/10/2023 20:30:18 door - Ariën -
Ik wil eerst de oplossing voor de grafiek en daarna zal ik verder de aanpassing doen
ja, zie mijn eerdere posts. En bekijk ook even je output in je HTML-source.
Dat schept ook vaak verduidelijking in plaats van dat je enkel tegen een site aankijkt.
Dat schept ook vaak verduidelijking in plaats van dat je enkel tegen een site aankijkt.
Ik denk dat je de data zoveel mogelijk in de database kunt voorbereiden:
Nadat de gegevens zijn opgehaald uit de database met
Kan je de gegevens van elke rij ophalen met:
Je kunt in plaats van tekst ook HTML uitvoer maken in de foreach-lus:
Ik heb bovenstaande droog getypt en niet uitgeprobeerd, mocht je tegen een fout aanlopen dan willen we je hier graag verder helpen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WITH dataset AS ( -- hier vraag je de data op met je query
SELECT
MONTH(datin) AS maand,
COUNT(*) AS totaal
FROM database
WHERE YEAR(datin) = YEAR(CURRENT_DATE)
GROUP BY maand
)
SELECT -- hier maak je er een grafiek van
YEAR(CURRENT_DATE) AS jaar,
maand,
totaal,
ROUND((totaal / MAX(totaal) OVER ()) * 100, 2) AS procent,
REPEAT("#", (totaal / MAX(totaal) OVER ()) * 40) AS staaf
FROM dataset
ORDER BY maand;
SELECT
MONTH(datin) AS maand,
COUNT(*) AS totaal
FROM database
WHERE YEAR(datin) = YEAR(CURRENT_DATE)
GROUP BY maand
)
SELECT -- hier maak je er een grafiek van
YEAR(CURRENT_DATE) AS jaar,
maand,
totaal,
ROUND((totaal / MAX(totaal) OVER ()) * 100, 2) AS procent,
REPEAT("#", (totaal / MAX(totaal) OVER ()) * 40) AS staaf
FROM dataset
ORDER BY maand;
Nadat de gegevens zijn opgehaald uit de database met
Kan je de gegevens van elke rij ophalen met:
Code (php)
1
2
3
4
2
3
4
foreach($data as $rij) {
// hier doe je iets met de gegevens uit de rij, bv:
print $rij['procent'] . ' ' . $rij['staaf'] . PHP_EOL; // nog geen HTML
}
// hier doe je iets met de gegevens uit de rij, bv:
print $rij['procent'] . ' ' . $rij['staaf'] . PHP_EOL; // nog geen HTML
}
Je kunt in plaats van tekst ook HTML uitvoer maken in de foreach-lus:
Code (php)
1
print '<span style='display:block;height:1em;width:' . $rij['procent'] . '%;background:black'></span><br>';
Ik heb bovenstaande droog getypt en niet uitgeprobeerd, mocht je tegen een fout aanlopen dan willen we je hier graag verder helpen.
Ook dat is een mogelijkheid. Enige nadeel is dat de queries wat complexer te lezen zijn.




