Hola, estoy implementando un carrito de compras para mi sitio, entonces pense hacerlo con una variable de session que me vaya guardando la info de lo que se vaya agregando al carrito y manejarlo con una clase. La operatoria seria la siguiente.
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'];
}
}
}
Espero que se entienda y me puedan ayudar. Ya probe tambien al finalizar el ciclo for volver a cargar la info en la variable de session, pero sigue haciendo lo mismo. Probe con una pagina especial que genere el objeto y que muestre de tener el primer elemento, y luego agregar un producto, la primera vez esta bien que no tenga nada y solo muestre el que se agrega, la 2da me muestra el producto que se agrego 2 veces porque lo vuelve a agregar, y la 3ra ya esta corrompida la variable
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>';
}