grafiek opmaken per maand van het jaar

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Berta Pappens

Berta Pappens

30/10/2023 16:28:13
Quote Anchor link
Hallo,

Heeft er iemand een script om een grafiek op te maken van gegevens per maand van het jaar.
Ik heb dit al als voorbeeld , maar kan geen grafiek maken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
$sqlb="SELECT COUNT(*) as total FROM database WHERE MONTH(datin) = MONTH(CURRENT_DATE) AND YEAR(datin) = YEAR(CURRENT_DATE)";

$result = $con->query($sqlb);
$data =  $result->fetch_assoc();
echo '<center>';
echo '<font color ="black">Aantal ingaves deze maand : ' ;
echo'<font color ="red">'.$data['total'];
echo '<br>';


Dank bij voorbaat
 
PHP hulp

PHP hulp

27/04/2024 11:12:18
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 16:39:31
Quote Anchor link
Je hebt tot nu toe al een mooie query. Maar hoe zie jij je grafiek voor je? Met GDlib als afbeelding? Of met HTML5?
En wat voor grafiek wil je? Cirkeldiagram? Lijndiagram? Staafdiagram?

En heb je al iets gevonden om de grafieken mee samen te stellen?
Ikzelf ben wel fan van Chart.js.

Een codevoorbeeldje kan je hier vinden:
https://jsfiddle.net/eoLy415h/
Gewijzigd op 30/10/2023 16:44:33 door - Ariën -
 
Berta Pappens

Berta Pappens

30/10/2023 16:44:22
Quote Anchor link
Voor mij is een staafdiagram ideaal per maand
Nee ik heb nog niks gevonden, daarom min vraag hier aan de professionals.

Hoe zou ik chart.js kunnen gebruikenmet mijn query

Dank bij voorbaat
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 16:46:58
Quote Anchor link
Ik heb net een codevoorbeeld toegevoegd aan mijn post hierboven.
Dat maakt al een stuk duidelijker hoe je een staafdiagram kan maken.

Een AJAX-request zou nog netter zijn zodat je de code makkelijk kan herbruiken voor meerdere soorten data.
Gewijzigd op 30/10/2023 16:49:09 door - Ariën -
 
Berta Pappens

Berta Pappens

30/10/2023 16:55:35
Quote Anchor link
Ariën ,

al heel hartelijk bedankt om dit te willen doen, ik ga dit bekijken hoe ik dit moet aanpakken om iedere maand het totaal daarin te krijgen.

Mocht je nog meer tips hebben , dan zijn ze zeker welkom.

bedankt


Toevoeging op 30/10/2023 17:05:39:

Weet je ook hoe ik mijn query kan aanpassen zodat ik mijn aantal per maand heb AUB.
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 17:06:13
Quote Anchor link
Als het één soort data is, dan kan je gewoon alle data met een foreach in een nieuwe-array zetten en die met implode vormen tot bijv.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// haal hier je data op, verwerk het met foreach tot een nieuwe array $data[].

$values= implode(",",$data);
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
/* Hier de rest van de JS-chart code*/

 data: [<?php echo $values;?> ],

/* Hier de rest van de JS-chart code*/


Maar persoonlijk zou ik een AJAX-request netter vinden.
 
Berta Pappens

Berta Pappens

30/10/2023 17:08:52
Quote Anchor link
Het is enkel de data van dit jaar, en het totaal per maand.
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 17:10:11
Quote Anchor link
Berta Pappens op 30/10/2023 16:55:35:
Weet je ook hoe ik mijn query kan aanpassen zodat ik mijn aantal per maand heb AUB.


Zoiets moet wel werken. Je groepeert op maand onder voorwaarde dat je een bepaald jaar pakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT
    MONTH(datin) AS maand,
    COUNT(*) AS total
FROM
    tabel
WHERE
    YEAR(datin) = 2023
GROUP BY
    maand
ORDER BY
    maand;
Gewijzigd op 30/10/2023 17:15:09 door - Ariën -
 
Berta Pappens

Berta Pappens

30/10/2023 17:15:33
Quote Anchor link
ik heb een query voor deze maand , kan ik geen loop van 1 tot 12 gebruiken met deze query.
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 17:18:31
Quote Anchor link
Wat lukt er niet aan? Ik krijg op mijn testdatabase netjes een 12 rijen met records met het maandnummer en het aantal items.
 
Berta Pappens

Berta Pappens

30/10/2023 17:33:49
Quote Anchor link
Ja inderdaad bij mij ook maar weet niet hoe ik dit moet aanbrengen naar de chart.js toe.

Dank u
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 17:38:06
Quote Anchor link
Heb je mijn post gelezen van 17:06:13?
 
Berta Pappens

Berta Pappens

30/10/2023 17:41:06
Quote Anchor link
oke, bedankt ga dit proberen

Toevoeging op 30/10/2023 17:50:01:

u schreef om 17:06 $values= implode(",",$data);

moet dat niet zijn $values= implode(",",$data['total']);

Toevoeging op 30/10/2023 18:04:16:

Dit is de code en krijg een wit scherm.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

  
$sqlc
="SELECT MONTH(datin) AS maand,COUNT(*) AS total FROM database WHERE YEAR(datin) = YEAR(CURRENT_DATE) GROUP BY maand ORDER BY maand;";
$result = $con->query($sqlc);
$data =  $result->fetch_assoc();
$values= implode(",",$data);
?>





<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
        
        
        var data = {
            labels: ["januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
            datasets: [{
                label: "ingaves 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  -
Beheerder

- Ariën -

30/10/2023 18:07:46
Quote Anchor link
Je moet in PHP wel een while/foreach loop gebruiken om alle maanden te doorlopen.
 
Berta Pappens

Berta Pappens

30/10/2023 18:09:35
Quote Anchor link
kan je mij daarbij helpen AUB.
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 18:13:57
Quote Anchor link
Begin anders even bij debuggen, zodat je weet wat voor, en met welke data je te maken hebt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// query even ophakken in leesbare regels
$sqlc="
SELECT MONTH(datin) AS maand,
COUNT(*) AS total
FROM database
WHERE YEAR(datin) = YEAR(CURRENT_DATE)
GROUP BY maand
ORDER BY maand;
"
;
$result = $con->query($sqlc);
$data =  $result->fetch_assoc();

// Kijk naar de inhoud van $data
echo "<pre>".print_r($data,true)."</pre>";
?>
 
Berta Pappens

Berta Pappens

30/10/2023 18:18:12
Quote Anchor link
dit is het resultaat

Array
(
[maand] => 1
[total] => 545
)
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 18:23:25
Quote Anchor link
Dan kan je dus concluderen je dat je een while-loop moet gebruiken om alle records af te lopen.
Dat is onderdeel van de basis-kennis PHP+SQL. ;-)

Dan maak je een array aan met de naam $aantallen = [];
In die whileloop maak je array-elementen aan met daarin alle aantallen per maand.
Gewijzigd op 30/10/2023 18:24:57 door - Ariën -
 
Berta Pappens

Berta Pappens

30/10/2023 18:24:48
Quote Anchor link
dit zou het moeten zijn

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
 
- Ariën  -
Beheerder

- Ariën -

30/10/2023 18:26:10
Quote Anchor link
Ik zie alleen output, maar de aantallen die je met je code zal krijgen zou prima moeten zijn, mits je die in een nieuwe array verwerkt. Dan kan je met implode deze in een kommagescheiden string plaatsen.

Kortom:
Je maakt eerst een array voor de aantallen.
Je voert een whileloop uit
In de whileloop zorg je ervoor dat elk doorlopen aantal een item in de array krijgt.
Na afloop gebruik je implode om alles kommagescheiden te kunnen gebruiken.
Gewijzigd op 30/10/2023 18:28:17 door - Ariën -
 
Berta Pappens

Berta Pappens

30/10/2023 18:40:28
Quote Anchor link
de hierboven vermelde output komt uit $data['total'] die in een lus draait.

Hoe krijg ik $data['total'] in een array
$values= implode(",",$data); dat lukt niet
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.