Hieronder zal ik toelichten wat ik bedoel met het onderwerp.
Momenteel heb ik een index.php pagina en een medicinereports.php pagina.
Vanuit index.php heb ik een link gemaakt naar medicinereports.php d.m.v een ID. Op de medicinereports controleer ik het ID en daarna voer ik een query uit. Vervolgens wordt de data opgehaald. Tot zover gaat het prima, maar de data wil ik weergeven in een bestaande tabel en enkel een record wordt weergeven in een bestaande tabel.
De volgende code gebruik ik hiervoor:
<?php
if (ISSET($_GET['id']) && (filter_var($_GET['id'], FILTER_VALIDATE_INT))) {
require_once(MYSQL);
//define query
$querymar = "SELECT sum(quantity) AS quantity, medicinename from medicines where MONTH(medicineregistration) = 3 AND YEAR(medicineregistration) = YEAR(NOW()) AND userid= '{$_SESSION['user_id']}' GROUP BY medicinename";
$resultmar = mysqli_query($dbc,$querymar);
if(mysqli_num_rows($resultmar) > 0){
//output data of each row
while ($row = mysqli_fetch_assoc($resultmar)){
$totalmar = $row["medicinename"]. " " . $row["quantity"] . "<br />";
}
}
}
?>
En daarom vind ik het knap dat het conceptueel werkte.
Jouw commentaar snap ik wel hoor, maar de code zelf niet helemaal..
1. //maak een array van medicijndata op key $month bestaande uit medicine => quantity
$medicineDateMonths[$month][$medicine] = $quantity;
Waarom maak je hier een array aan en deze constructie zegt me eigenlijk helemaal niets...Ik snap wat een array is en het doet, maar bovenstaande code snap ik niet helemaal...
//12 maandnamen noemen voor bovenkant tabel, door gebruik te maken van locale settings, kun je de taal ook aanpassen.
$dateObj = DateTime::createFromFormat('!m', $m);
echo '<th>' . $dateObj->format('F') . '</th>';
Dit is OOP en hier heb ik geen kaas van gegeten. Is het zo dat de maandnamen uit de DB gehaald worden. Bedoel je hiermee met gebruik te maken van locale settings?
//Nogmaals 12 keer loopen voor elke maand
for($m=1;$m<13;$m++) {
echo '<td>';
Nu ga je dus voor de tweede loopen. waarom eigenlijk en waarom is het nodig?
//Voor elk medicijn voor maandnummer $m zetten we het in de tabel in de juiste td :)
foreach($medicineDateMonths[$m] as $medicine => $quantity) {
echo '<p>' . $medicine . ' : ' . $quantity . '</p>';
}
} else {
//Geen data gevonden voor maandnummer $m
echo 'No data';
}
echo '</td>';
Best raar dat je het resultaat tot nu toe niet heb gezien, maar ook nooit gevraagd ;-): http://hawarco.co/includes/applicatie6.PNG
Zoals je ziet is het duidelijk, maar ik zou graag elk medicijn met bijbehorend quantity in een eigen regel zetten ipv dat alle data nu in een TD zet. Ik heb reeds gekeken naar een td binnen een td, maar dat zag er niet uit. Ik heb gekeken naar een tabel binnen een td, maar dat wordt niet aangeraden helaas..
En daarom vind ik het knap dat het conceptueel werkte.
Jouw commentaar snap ik wel hoor, maar de code zelf niet helemaal..
1. //maak een array van medicijndata op key $month bestaande uit medicine => quantity
$medicineDateMonths[$month][$medicine] = $quantity;
Waarom maak je hier een array aan en deze constructie zegt me eigenlijk helemaal niets...Ik snap wat een array is en het doet, maar bovenstaande code snap ik niet helemaal... Dit is een 2dimensionaal array, een array in array.
We maken een array, met als 'key' de maandnaam.
Hierin zit een array, met als 'key' de medicijnnaam en als 'value' de quantity
//12 maandnamen noemen voor bovenkant tabel, door gebruik te maken van locale settings, kun je de taal ook aanpassen.
$dateObj = DateTime::createFromFormat('!m', $m);
echo '<th>' . $dateObj->format('F') . '</th>';
Dit is OOP en hier heb ik geen kaas van gegeten. Is het zo dat de maandnamen uit de DB gehaald worden. Bedoel je hiermee met gebruik te maken van locale settings?
DateTime is een standaard class in PHP, de $m komt uit de loop, en createFromFormat maakt een datum aan met het maandnummer $m.
format('F') laat de maandnaam zien.
Als je het volgende bovenaan je code zet:
setlocale(LC_ALL, 'nl_NL');
Word de maandnaam, en als je dagnamen gebruik oid dan is het in het Nederlands
//Nogmaals 12 keer loopen voor elke maand
for($m=1;$m<13;$m++) {
echo '<td>';
Nu ga je dus voor de tweede loopen. waarom eigenlijk en waarom is het nodig? Daarnet hebben we data in een array gestopt om het nu makkelijker te kunnen verwerken.
Ook weer 12 keer, omdat de 'key' van de array maandnummers zijn.
Daarna pakken we alle medicijnen => quantity, uit deze maandnummer.
Je kan meerdere medicijnen in een maandnummer hebben, dus loopen we door deze array heen.
Zie opbouw van de array
//Voor elk medicijn voor maandnummer $m zetten we het in de tabel in de juiste td :)
foreach($medicineDateMonths[$m] as $medicine => $quantity) {
echo '<p>' . $medicine . ' : ' . $quantity . '</p>';
}
} else {
//Geen data gevonden voor maandnummer $m
echo 'No data';
}
echo '</td>';
Best raar dat je het resultaat tot nu toe niet heb gezien, maar ook nooit gevraagd ;-): http://hawarco.co/includes/applicatie6.PNG
Zoals je ziet is het duidelijk, maar ik zou graag elk medicijn met bijbehorend quantity in een eigen regel zetten ipv dat alle data nu in een TD zet. Ik heb reeds gekeken naar een td binnen een td, maar dat zag er niet uit. Ik heb gekeken naar een tabel binnen een td, maar dat wordt niet aangeraden helaas.. Eigenlijk wil je dus een X en Y as hebben:
X : Medicijn naam
Y : Maandnaam
en de velden het aantal ? Dat is wel net iets andersom.
Dan moet de 'key' medicijnnaam zijn, waarin de array zit: maandnummer => quantity
Ik heb hierboven in dikgedrukt even je vragen beantwoord, hopelijk duidelijk genoeg.
Bedankt voor je uitleg.
Ik heb idd print_r uitgevoerd en het ziet eruit dat elk gevonden medicijn uit het resultaat een eigen array heeft/krijgt, toch?
Wat ik nu krijg als resultaat ben ik blij, maar ik wil elke medicijn met bijbehorende quantity in een eigen td zetten.
Dus als voorbeeld zal ik het hieronder proberen te tekenen
-------------
januari
-------------
medicijnnaam | quantity
------------------------
medicijnnaam | 10
------------------------
medicijnnaam 2 | 15
------------------------
etc | etc