Històric de compres
Històric de compres
L'administrador o responsable del catàleg té la possibilitat de visualitzar un històric de compres que recull
- La data de la compra
- El total de la compra
- Detalls dels productes comprats
A més a més, disposa de la possibilitat d'esborrar l'històric sempre que es desitji
Connexió a la BD
En aquest cas no requerim cap sessió, ja que únicament es mostren les dades de la BD
El que si necessitem és una connexió d'escriptura a la BD, ja que es defineix la funcionalitat de poder esborrar l'històric, no només mostrar-lo.
require_once "../connexioBD/connexioRW.php";
Recuperació de l'històric
Mostra de l'històric
Agrupació de resultats per compra
Els resultats retornats per la consulta són els detalls de les compres i no les compres en sí. És possible que tinguem 9 resultats però realment son 3 compres, és per això que hem d'agrupar aquests 9 resultats en compres.
L'objectiu és tenir una array amb totes les compres que dins seu tingui com a vectors la data de compra, el total i una altra array que sigui els detalls de la compra. Es pot consultar l'Exemple de model de dades de l'array $compres per entendre millor l'estructura de dades de l'array.
Primer, definirem l'array $compres, que serà l'array que contindrà totes les compres i els seus detalls
// Agrupem resultats per compra. Cada fila no és una compra, és un producte d'una compra $compres = array(); // Definim un array per desar les compres i dins tots els productes
Seguidament, per cada compra (cada registre) realitzarem el següent
- Recuperem la ID de compra del producte
- (Opcional) En cas que aquesta ID no existeixi dins de l'array $compres
- Afegim a l'array $compres un vector que té el valor de la ID de compra, el qual serà una altra array
- Dins de l'array de la ID de compra afegirem
- La data de compra
- El total de la compra
- Una altra array "productes" que servirà per emmagatzemar els detalls dels productes comprats
- Finalment, dins de l'array "productes" inserim les dades la compra (el registre, la fila retornada per SQL, que contempla els detalls del producte
foreach ($resultats as $fila) { // Cada fila és un producte. Per cada producte
$id = $fila['compra_id']; // Recuperem la ID de la compra a la que correspon
if (!isset($compres[$id])) { // Si la compra no existeix a l'array, la creem
$compres[$id] = array(
'data' => $fila['data_compra'], // Desem la data de la compra
'total' => $fila['total_compra'], // El total de la compra
'productes' => array() // Una array on hi haurà tots els productes i els seus detalls
);
}
$compres[$id]['productes'][] = $fila; // Afegim a la compra, dins de productes, els detalls (la fila) del producte
}
Mostra de les compres
Finalment, per cada compra a $compres, mostrarem un "bloc" on:
- Es mostrarà la ID de compra
- Es mostrarà la data i el total de la compra
- Es mostrarà una taula on, a partir de l'array "productes" s'obtindrà tots els seus valors, que son els detalls de cada producte
// Mostrem cada compra amb les seves dades generals i el detall de productes
foreach ($compres as $id_compra => $dades): // Per cada compra (on hi és desat la data, el total, i els detalls de cada producte)
?>
<h2>Compra #<?php echo (int)$id_compra; ?></h2> <!-- Títol per identificar la compra -->
<center>
<p>
<strong>Data:</strong> <?php echo htmlspecialchars($dades['data']); ?><br> <!-- Mostrem la data -->
<strong>Total compra:</strong> <?php echo number_format($dades['total'], 2); ?> € <!-- Mostrem el total -->
</p>
</center>
<table> <!-- Creem una taula per mostrar els detalls dels productes. Una fila per cada producte -->
<thead>
<tr>
<th>Producte</th>
<th>Categoria</th>
<th>Preu unitari</th>
<th>Quantitat</th>
<th>Total producte</th>
</tr>
</thead>
<tbody>
<?php foreach ($dades['productes'] as $p): ?> <!-- Per cada producte dins la compra -->
<tr>
<td><?php echo htmlspecialchars($p['nom_producte']); ?></td> <!-- Mostrem el nom del producte -->
<td><?php echo htmlspecialchars($p['categoria']); ?></td> <!-- La categoria -->
<td><?php echo number_format($p['preu_unitari'], 2); ?> €</td> <!-- El preu unitari -->
<td><?php echo (int)$p['quantitat']; ?></td> <!-- La quantitat -->
<td><?php echo number_format($p['total_producte'], 2); ?> €</td> <!-- El total (amb descompte inclòs) -->
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endforeach; ?>
Un exemple d'una compra seria la següent

Eliminació de l'històric
A la pàgina es troba un botó per esborrar l'històric de compres
<form method="POST" action="">
<button name="borrarCompres" type="submit">
<?php echo "Esborrar registre de compres" ?> <!-- Botó per esborrar històric de compres -->
</button>
</form>
Exemple de model de dades de l'array $compres
$compres = array(
101 => array( // Compra 1
'data' => '2025-01-10 18:32:00',
'total' => 45.90,
'productes' => array( // Detalls dels productes
array( // Detalls Producte 1
'compra_id' => 101,
'data_compra' => '2025-01-10 18:32:00',
'total_compra' => 45.90,
'producte_id' => 1,
'nom_producte' => 'Teclat mecànic',
'quantitat' => 1,
'preu_unitari' => 29.90
),
array( // Detalls Producte 2
'compra_id' => 101,
'data_compra' => '2025-01-10 18:32:00',
'total_compra' => 45.90,
'producte_id' => 2,
'nom_producte' => 'Ratolí òptic',
'quantitat' => 1,
'preu_unitari' => 16.00
)
)
),
102 => array( // Compra 2
'data' => '2025-01-12 09:15:00',
'total' => 120.00,
'productes' => array( // Detalls dels productes
array( // Producte 1
'compra_id' => 102,
'data_compra' => '2025-01-12 09:15:00',
'total_compra' => 120.00,
'producte_id' => 3,
'nom_producte' => 'Auriculars sense fil',
'quantitat' => 2,
'preu_unitari' => 60.00
)
)
)
);