1. Se debe crear una variable correspondiente a la clase del carrito. Al crearse, automaticamente esta clase inspecciona en la variable por ejemplo $_SESSION['micarrito'] por los productos que hay en ella, y los guarda en la estructura de la clase.
2. Al agregar o quitar un producto se agrega a esta estructura y actualiza tambien la variable de session
Para implementar esto utilizo arreglos que guardo en la variable de session. Pero mi problema esta en que en mi servidor de prueba local, me funciona bien, hace todo lo qeu debe hacer y como lo debe hacer, pero en el servidor de la pagina no... En un principio pense que era por la diferencia de version del php, utilizo el wamp para montar mi servidor local, por lo que me baje la misma version que tiene el servidor (4.4.6) y me sigue haciendo lo mismo. Paso a detallar el error.
al agregar un producto al carrito, me refresca la pagina, al volverla a cargar, envio alguna variable que hace detectar que debe agregar un producto y lo agrega, me muestra el cartel de que se agrego correctamente y que tengo un producto y si voy a la pagina que me muestra el detalle del carrito, me lo muestra perfectamente.
Ahora, ya sea si refresco la pagina en la cual agrego el producto al carrito o refresco la pagina del carrito, es como que se corrompe la informacion que esta en la variable de session. siendo que ya la cargo bien 1 vez (al agregar refresca la pagina pero la varialbe esta vacia todavia, guarda la info y por ello me muestra que ya hay un producto, al ir a la pagina de detalle, me muestra bien el produto). Esto me da a pensar que es cuando se carga la variable de session en la clase, funciona "bien" pero corrompe lo que hay en la variable y esto hace que en la 2da vez que cargo la clase, se me corrompa la info. Muestro la funcion que utilizo para cargar la info la cual no modifica la variable de session solo la lee y e ahi el problema, no puedo detectar donde esta modificando la variable.
Código PHP:
function cargarCarrito(){
$this->productos=array();
$this->total=0;
if(isset($_SESSION['micarrito']) && count($_SESSION['micarrito'])>0){
// echo count($_SESSION['carrito']);
for($aux=reset($_SESSION['micarrito']);$aux;$aux=next($_SESSION['micarrito'])){
$this->productos[$aux['id']]['id']=$aux['id'];
$this->productos[$aux['id']]['tipo']=$aux['tipo'];
$this->productos[$aux['id']]['descripcion']=$aux['descripcion'];
$this->productos[$aux['id']]['cantidad']=$aux['cantidad'];
$this->productos[$aux['id']]['precio']=$aux['precio'];
$this->productos[$aux['id']]['descuento']=$aux['descuento'];
$this->productos[$aux['id']]['link']=$aux['link'];
$this->productos[$aux['id']]['subtotal']=$aux['cantidad']*($aux['precio']-$aux['descuento']);
$this->total+=$this->productos[$aux['id']]['subtotal'];
}
}
}
Código PHP:
require_once('admin/classes/carrito.php');
$carrito=new carrito();
$aux=$carrito->primero();
if($aux){
echo 'agrego bien: '.$aux['id'].'<br>';
}else{
echo 'No hay nada en el carrito<br>';
}
$carrito->agregarProducto('sarasa');
$aux=$carrito->primero();
if($aux){
echo 'agrego bien: '.$aux['id'].'<br>';
}else{
echo 'No hay nada en el carrito<br>';
}