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.

$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
Heb je mijn post gelezen van 17:06:13?
oke, bedankt ga dit proberen

[size=xsmall]Toevoeging op 30/10/2023 17:50:01:[/size]

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

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

[size=xsmall]Toevoeging op 30/10/2023 18:04:16:[/size]

Dit is de code en krijg een wit scherm.


<?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>
Je moet in PHP wel een while/foreach loop gebruiken om alle maanden te doorlopen.
kan je mij daarbij helpen AUB.
Begin anders even bij debuggen, zodat je weet wat voor, en met welke data je te maken hebt.

<?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>";
?>
dit is het resultaat

Array
(
[maand] => 1
[total] => 545
)
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.
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
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.
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

Reageren