Het rapport afdrukken
En dan nu de PHP code. Ik hoop dat de commentaren duidelijk genoeg zijn.
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
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
<?
// Ik heb een class util waar alle database acties afgehandeld worden.
// De naamgeving spreekt verder voor zich.
$result = $util->query("SELECT * FROM test ORDER BY test_merk, test_type");
// Definiƫren van de gegevens array.
$data = array();
// Bij het vullen de array wordt al rekening gehouden met de structuur van het rapport.
// In dit geval is er maar een subtotaal, maar als je nog een onderverdeling hebt, dan voeg je er een laag aan toe.
// Dus bijvoorbeeld: $data[$rij["test_merk"]][$rij["test_type"]][$rij["test_id"]] = $rij;
while ($rij = $result->fetch_assoc()) {
$data[$rij["test_merk"]][$rij["test_id"]] = $rij;
}
// Reset het totaal en druk de kop af.
$totaal = 0;
echo "<table border=\"1\">";
echo "<tr><th>Merk/Type</th><th>Aantal</th></tr>";
// Begin met de merken. In $val staat dus nu dit gedeelte: [$rij["test_id"]] = $rij;
foreach ($data as $merk => $val) {
// Het subtotaal moet bij elk merk worden gereset.
$subtotaal = 0;
// Hoewel het merk in dit geval in $merk staat, zul je in de praktijk vaak de
// gegevens uit de rij willen halen.
// Je weet de index van $val niet, dus met current() haal je de eerste rij op uit val.
$rij = current($val);
// Druk de kop met het merk af.
echo "<tr><th colspan=\"2\">{$rij["test_merk"]}</th></tr>";
// Nu worden de details doorgelopen.
foreach ($val as $test_id => $rij) {
// Druk de detail regel af en tel het aantal bij het subtotaal.
echo "<tr><td>{$rij["test_type"]}</td><td>{$rij["test_aantal"]}</td></tr>";
$subtotaal += $rij["test_aantal"];
}
// Werk het totaal bij en druk het subtotaal af.
$totaal += $subtotaal;
echo "<tr><th>Subtotaal</th><th>$subtotaal</th></tr>";
}
// Tot slot wordt het totaal afgedrukt en de table afgesloten.
echo "<tr><th>Totaal</th><th>$totaal</th></tr>";
echo "</table>";
?>
// Ik heb een class util waar alle database acties afgehandeld worden.
// De naamgeving spreekt verder voor zich.
$result = $util->query("SELECT * FROM test ORDER BY test_merk, test_type");
// Definiƫren van de gegevens array.
$data = array();
// Bij het vullen de array wordt al rekening gehouden met de structuur van het rapport.
// In dit geval is er maar een subtotaal, maar als je nog een onderverdeling hebt, dan voeg je er een laag aan toe.
// Dus bijvoorbeeld: $data[$rij["test_merk"]][$rij["test_type"]][$rij["test_id"]] = $rij;
while ($rij = $result->fetch_assoc()) {
$data[$rij["test_merk"]][$rij["test_id"]] = $rij;
}
// Reset het totaal en druk de kop af.
$totaal = 0;
echo "<table border=\"1\">";
echo "<tr><th>Merk/Type</th><th>Aantal</th></tr>";
// Begin met de merken. In $val staat dus nu dit gedeelte: [$rij["test_id"]] = $rij;
foreach ($data as $merk => $val) {
// Het subtotaal moet bij elk merk worden gereset.
$subtotaal = 0;
// Hoewel het merk in dit geval in $merk staat, zul je in de praktijk vaak de
// gegevens uit de rij willen halen.
// Je weet de index van $val niet, dus met current() haal je de eerste rij op uit val.
$rij = current($val);
// Druk de kop met het merk af.
echo "<tr><th colspan=\"2\">{$rij["test_merk"]}</th></tr>";
// Nu worden de details doorgelopen.
foreach ($val as $test_id => $rij) {
// Druk de detail regel af en tel het aantal bij het subtotaal.
echo "<tr><td>{$rij["test_type"]}</td><td>{$rij["test_aantal"]}</td></tr>";
$subtotaal += $rij["test_aantal"];
}
// Werk het totaal bij en druk het subtotaal af.
$totaal += $subtotaal;
echo "<tr><th>Subtotaal</th><th>$subtotaal</th></tr>";
}
// Tot slot wordt het totaal afgedrukt en de table afgesloten.
echo "<tr><th>Totaal</th><th>$totaal</th></tr>";
echo "</table>";
?>
Resultaat: