Un modo:
Codice PHP:
if(mysql_num_rows($post_sql) > 0){
$subtot = false;
while($post_obj = $data->estrai($post_sql)){
$cliente = stripslashes($post_obj->Cliente);
$ordine = stripslashes($post_obj->Ordine);
if ($cliente <> $oldcliente) {
if (!($subtot===false) { // non è il primo cliente
// QUI STAMPI $subtot per il cliente "precedente"
echo "Totale : ".$subtot;
$subtot = 0; // inizializzo per il successivo;
};
echo "Cliente : ".$cliente;
} else {
echo "";
};
echo "Ordine: ".$ordine;
$subtot += ...; // qui devi fare la somma
$oldcliente = $cliente;
};
echo "Totale : ".$subtot;
} else {
echo "non ci sono valori";
};
In pratica mentre stampi gli ordini fai il totale, che poi stampi al ciclo successivo. L'ultimo deve essere stampato fuori dal ciclo, ovviamente.
Un'altra soluzione (preferibile) è memorizzare i dati nel ciclo e poi stamparli con un nuovo ciclo:
Codice PHP:
$dati = array();
if(mysql_num_rows($post_sql) > 0){
while($post_obj = $data->estrai($post_sql)){
$cliente = stripslashes($post_obj->Cliente);
$ordine = stripslashes($post_obj->Ordine);
if (!isset($dati[$cliente])) $dati[$cliente] = array('ordini' => array(), 'totale' => 0);
};
$dati[$cliente]['ordini'][]=$ordine;
$dati[$cliente]['totale'] += ...; // aggiorna totale;
};
foreach ($dati as $cliente=>$info) {
print "Cliente: ".$cliente;
foreach ($info['ordini'] as $ordine) {
print "Ordine: ".$ordine;
};
print "Totale: ".$info['totale'];
};
} else {
echo "non ci sono valori";
};
..da ri-verificare :) e i totali puoi anche calcolarli nel 2o ciclo...