Aaaah, ok... pensándolo bien, ¿cómo actualizas el carro? Me podrías describir el proceso completo. Lo que yo sospecho:
1.- El usuario clickea un producto.
2.- El usuario es dirigido a la página del carro.
3.- Antes de mostrar el contenido, la información del carro es actualizada.
4.- Se muestra la información.
5.- Aquí es donde esperas que el carro se refresque y redirija. Yo lo haría dependiendo del botón que se presione (con jQuery sería fácil de hacer - lee más abajo).
Consejo
Deberías utilizar AJAX para actualizar el contenido y recargar la página. Suponiendo que tu HTML sea así (MUY simplificado xD):
<html>
<head>
<script src="jquery.js"></script>
<script>
jQuery(document).ready(function($) {
$('.add-to-cart').click(function(e) {
e.preventDefault();
var itemId = $(this).attr('id').replace('producto-', '');
$.ajax({
url: $('productos').attr('action'),
type: $('productos').attr('method'),
data: { 'id': itemId },
success: function(respuesta) {
if(respuesta != undefined && respuesta != null) {
// respuesta debe contener el total de la compra y el total de elementos en el carro
// respuesta.total, respuesta.itemCount
// Deberías comprobar que respuesta.itemCount y respuesta.total sean != undefined
// De lo contrario javascript mostrará errores e impedirá un correcto funcionamiento (if(respuesta.itemCount != undefined), por ejemplo).
$('.cart-item-count').html(respuesta.itemCount);
$('.cart-purchase-total').html(respuesta.total);
} else {
alert('Respuesta indefinida por parte del servidor');
}
}
});
});
});
</script>
<body>
<header>
<p>Tu carro tiene <span class="cart-item-count">N</span> elementos</p>
<p>El total de tu compra es: $<span class="cart-purchase-total">N</span></p>
</header>
<div id="contenido">
<p>Tienes <span class="cart-item-count"></span> elementos en el carro</span></p>
<p>Total <span class="cart-purchase-total"></span></p>
</div>
<form id="productos" action="archivo.php" method="post">
<div class="producto"><button id="producto-0" class="add-to-cart"></button></div>
<div class="producto"><button id="producto-1" class="add-to-cart"></button></div>
<div class="producto"><button id="producto-2" class="add-to-cart"></button></div>
</form>
</body>
</html>
archivo.php<?php
$debug = '';
$response = '{';
$total = 0;
$item_count = 0;
if( isset( $_POST['id'] ) && is_numeric( $_POST['id'] ) ) {
$item_id = $_POST['id'];
// Obtienes la información del producto y la ingresas en el carro de compras
// Si la inserción falla o no, igualmente debes extraer el total y la cantidad de items:
$result = mysql_query( "SELECT total_carro, cantidad_elementos_carro FROM carro_compras WHERE id_usuario = N" ); // no te recomiendo utilizar mysql_*. En su lugar, utilizar mysqli_query. N es el id del usuario dueño del carro.
if( $result != null ) {
$arr = mysql_fetch_assoc( $result );
$item_count = $arr['cantidad_elementos_carro'];
$total = $arr['total_carro'];
// Esto se llama JSON: Javascript Object Notation (comienza con el primer {, más arriba).
$response .= '"total": ' . $total . ', "itemCount": ' . $item_count . ',';
} else {
$debug = 'No se pudo actualizar el contenido del carro!';
}
} else {
$debug = 'El id ingresado no es válido. Tipo: ' . gettype( $_POST['id'] );
}
$response .= '"debug": $debug }';
echo $response;
?>
De esta forma el carro siempre estará actualizado y no necesitarías la $_SESSION. Obviamente esto es más complejo de lo que acabo de mostrar, pero es más seguro (menos propenso a errores a futuro y código reutilizable).