Bueno.. la verdad es que es bastante engorroso el leer así..
De todas formas te presento un planteamiento personal, y ya luego tu sacas tus propias conclusiones:
Código PHP:
// Partiendo desde 0.. lo que pretendes es añadir un articulo/producto al carro..
// En el momento que añades algo, inicialmente ha de partir como mínimo en una unidad..
//** CONCEPTO PARA AGREGAR UN PRODUCTO AL CARRO
if($nuevo) // Nuevo puede ser un $_GET['producto_id'] o un $_POST['producto_id'], por ejemplo
{
// En primer lugar, comprovaremos si existe la session del carro
if(!isset($_SESSION['carrito'])) // No existe(el carro está vacio)
{
// Hemos de declarar los elementos con los que vamos a trabajar
$_SESSION['carrito'] = array(); // Donde almacenaremos todos los productos
$_SESSION['articulos'] = 0; // El total numérico de los productos
}
// Ahora, el producto que hemos pasado através de la variable '$nuevo'..¿Existe dentro del carro?
if(isset($_SESSION['carrito'][$nuevo])) // el producto ya estaba dentro del carro
{
// Posiblemente el usuario haya clickado varias veces encima del botón 'añadir al carro', por ejemplo.. tienes dos opciones:
$_SESSION['carrito'][$nuevo]; // Lo ignoras y dejas tal cual..
$_SESSION['carrito'][$nuevo]++; // Incrementas en 1 el número de unidades del producto
}
else // El producto no estaba dentro del carro
{
$_SESSION['carrito'][$nuevo] = 1; // le damos un valor inicial al total de las unidades del producto
}
}
//** CONCEPTO PARA MODIFICAR EL NUMERO DE UNIDADES DE UN PRODUCTO
if(isset($_POST['modificar'])) // En este caso hacemos uso de un formulario, donde utilizaremos los valores 'name' de los campos 'input' para trabajar
{
foreach ($_SESSION['carrito'] as $articulo_id => $qty) // Desglosamos el carrito en tantos productos como lo componen
{
if($_POST[$articulo_id]=='0') // Si el usuario ha pasado un 0 como unidad numerica, borraremos el producto
{
unset($_SESSION['carrito'][$articulo_id]);
}
else
{
$_SESSION['carrito'][$articulo_id] = $_POST[$articulo_id];
}
}
}
>
Espero haber podido aclarar alguna
duda o concepto al respecto(El código está improvisado, de manera que no se si existe algún tipo de error de sintaxy)..
Nota: Soy nuevo en el foro, aunque seguidor de muchos años, pido perdón por los errores que pueda cometer con el editor de textos!!