Comincio dalla fine.
Ho una funzione che si preoccupa di recuperare il totale del carrello. In essa è contenuto un campo di testo nascosto. Ecco perchè recupero col $_POST l'importo nell'ultima pagina.
La variabile di sessione carrello non viene inclusa in nessuna pagina, poichè il carrello viene utilizzato richiamando le seguenti funzioni:
Codice PHP:
function usaCarrello() {
$carrello = $_SESSION['carrello'];
if (!$carrello) {
return '[b]Il carrello è vuoto[/b]
';
}else{
$prodotti = @explode(',',$carrello);
return '<a href="carrello.php" title="Visualizza il dettaglio del carrello">'.
@count($prodotti). ' prodotti</a>
';
}
}
function mostraCarrello() {
global $db;
$carrello = $_SESSION['carrello'];
$somma = 0;
if ($carrello) {
$prodotti = @explode(',',$carrello);
$acquisti = array();
foreach ($prodotti as $prodotto) {
$acquisti[$prodotto] = (@isset($acquisti[$prodotto])) ? $acquisti[$prodotto] + 1 : 1;
}
$result[] = '<form action="carrello.php?action=aggiorna" method="post" id="cart">'; $result[] = '<table id="tabella_carrello">';
$result[] = '<tr>';
$result[] = '<td class="td_header_carrello">Nome</td>';
$result[] = '<td class="td_header_carrello">Modello</td>';
$result[] = '<td class="td_header_carrello">Quantità</td>';
$result[] = '<td class="td_header_carrello">Prezzo</td>';
$result[] = '<td class="td_header_carrello">Aggiungi/Togli</td>';
$result[] = '<td class="td_header_carrello">Subtotale</td>';
$result[] = '<td ></td>';
$result[] = '<td></td>';
$result[] = '</tr>';
foreach ($acquisti as $id=>$quanti) {
$sql = "SELECT * FROM prodotti WHERE id = '$id'";
$res = $db->query($sql);
$f = $res->fetch();
@extract($f);
$quantita = $f['quantita'];
$modello = $f['modello'];
$result[] = '<tr>';
$result[] = '<td class="td_entry_carrello">'.$nome.'</td>';
$result[] = '<td class="td_entry_carrello">'.$modello.'</td>';
$result[] = '<td class="td_entry_carrello">'.$quantita.'</td>';
$result[] = '<td class="td_entry_carrello">€'.$prezzo.'</td>';
$result[] = '<td class="td_entry_carrello"><input type="text" name="quantita'.$id.'" value="'.$quanti.'" size="1"></td>';
$result[] = '<td class="td_entry_carrello">€'.($prezzo * $quanti).'</td>'; $result[] = '<td align="center" class="td_entry_carrello"><input type="image" name="button" id="button" src="img/carrello_img/aggiorna_quantita.png" title="Aggiorna il carrello"/></td>';
$result[] = '<td align="center" class="td_entry_carrello">
[url="carrello.php?action=cancella&id='.$id.'"][img]img/carrello_img/elimina_prodotto.png[/img][/url]
</td>';
$result[] = '</tr>'; $somma += $prezzo * $quanti;
}
$result[] = '</table></br>';
$iva = $somma * 21 / 100;
$totale = $somma + $iva;
$result[] = '<table id="tabella_conti">';
$result[] = '<tr>';
$result[] = '<td class="td_header_conti">Subtotale</td>';
$result[] = '<td class="td_entry_conti">€'.$somma.'</td>';
$result[] = '</tr>';
$result[] = '<tr>';
$result[] = '<td class="td_header_conti">Iva</td>';
$result[] = '<td class="td_entry_conti">€'.$iva.'</td>';
$result[] = '</tr>';
$result[] = '<tr>';
$result[] = '<td class="td_header_conti">Totale</td>';
$result[] = '<td class="td_entry_conti">€'.$totale.'</td>';
$result[] = '</tr>';
$result[] = '</table>';
$result[] = '</form>';
}else{
$result[] = 'Il carrello è vuoto.
'; }
return @join('',$result);
}
function mostraImporto() {
global $db;
$carrello = $_SESSION['carrello'];
$somma = 0;
if ($carrello) {
$prodotti = @explode(',',$carrello);
$acquisti = array();
foreach ($prodotti as $prodotto) {
$acquisti[$prodotto] = (@isset($acquisti[$prodotto])) ? $acquisti[$prodotto] + 1 : 1; } foreach ($acquisti as $id=>$quanti) {
$sql = "SELECT * FROM prodotti WHERE id = '$id'";
$res = $db->query($sql);
$f = $res->fetch();
@extract($f);
$quantita = $f['quantita'];
$modello = $f['modello'];
$result[] = $prezzo;
$result[] = $id.$quanti;
$result[] = $prezzo * $quanti;
$somma += $prezzo * $quanti;
}
$iva = $somma * 21 / 100;
$totale = $somma + $iva;
echo '<input type="hidden" name="importo" size="8" value="'.$totale.'"/>';
}
}
Anche a me piacciono le cose pulite ed ordinate, però m'interessa di più arrivare al risultato.
Purtroppo non sono un programmatore e tutto ciò che riesco a fare è prendere script e cercare di piegarli alle mie esigenze.
Se ti dovesse risultare difficile comprendere il codice che ti mando, a causa della confusione, qui c'è tutto il carrello:
Carrello
Grazie,
Marco