Ciao, ho creato un carrello con le sessioni:
questa( $_SESSION['cart']) contiene un array per ogni prodotto inserito nel carrello, contenente a sua volta codice, quantità e categoria. Per spiegarmi meglio, vi inserisco un pezzo del codice di estrazione degli elementi:
<? $i=0;
$prodotti=count ($_SESSION['cart']);
//display CART LIST
$visualizza ="Articoli nel carrello
";
$prezzototcart=0;
if ($prodotti== 0) { $visualizza="Carrello vuoto <img src=\"http://localhost/live2/Immagini/gifs/hr.gif\">"; }
require_once('../../Connections/Conn_articoli.php');
while ($i!=$prodotti) //per ogni riga della tabella cart
{ // esegue una query d'estrazione al db articoli
$arr=$_SESSION['cart'][$i];
$codice=$arr['cod'];
$quantita=$arr['qta'];
$tabella=$arr['categoria'];
$visualizza.= "$codice X $quantita in $tabella etc...";
$i=$i+1;
etc...
} etc...
?>
Quando però rimuovo un item dal carrello
( cioè così:
// ricezione variabili POST [indice]
$c=$_POST['indice'];
//rimozione totale
unset ($_SESSION['cart'][$c]);
header ("location: http://localhost/live2/sezioni/cart/show.php");
} )
poi nell' estrazione degli elementi mi da un problema di offset sull'indice che ho appena cancellato; immagino dipenda dal fatto che quell'indice non esiste più ma cmq lo script cerca di estrarlo. Infatti se cancello l'ultimo item non ho problemi perchè si ferma prima
( $i== count($_SESSION['cart']))
Ed ora la tanto attesa domanda:
Come faccio ad eliminare un item e riaggiornare la sessione in modo che tutti gli indici successivi a quello eliminato scattino indietro di uno?
Esiste un modo semplice o lo devo fare tramite dei cicli? Pensavo magari nella pagina di estrazione di controllare l'esistenza dell'indice ( else{ $i=+1;} ), ma credo mi dia problemi lo stesso...
grazie ciao