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);
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 -
Toch nogmaals mijn dank voor uw tijd.
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 -
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>
Check even op die link van W3Schools hoe ze dat doen.
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 )
Die kan je in implode() gebruiken.
Dit is momenteel niet mijn vraag, ik heb een array maar deze werkt blijkbaar niet in chart.js ???
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?
545,6491,13340,1986,1635,1226,1161,521,5265,1461,0,0
Hoe ziet je volledige code er dan uit?
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>
- 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
Dat schept ook vaak verduidelijking in plaats van dat je enkel tegen een site aankijkt.
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.