Hola estoy utilizando un carrito de compra modificado por mi que hasta ahora me ha funcionado muy bien salvo un tema que no consigo resolver, resulta que es una tienda online y al añadir hacer clik en un artículo desde la tienda debe de sino existe el artículo en cuestión en el array que recoje las Ids de los artículos SUMAR solo 1 , aveces suma 1 y otras 2 y no encuentro explicación.
Despúes de cada compra "desregistro" la variable-array de sesión "Carrito" borrando todo su interior (supongo), voy a pegar un trozo de código porque ya no se por donde cojer esto.
Este es el código del archivo que llama a la clase carrito para isertar la cantidad.
Código:
Archivo meter_artículo.php
$_SESSION["ocarrito"]->introduce_producto($_GET["id"], $_GET["nombre"], $_GET["precio"],$_GET["img"],$_GET["ref"]
,$_GET['qty']);
Archivo Classe carrito
function introduce_producto($id_art,$nombre_prod,$precio_prod,$img,$ref,$qty ){
$exist=false;
//Comrpobamos que la ID del articulo se encuentre ya en el carrito
if (@in_array ($id_art ,$this->array_id_art) )
{
foreach ( $this->array_id_art as $pos => $value )
{
if ( $id_art == $value)
{
//Actualiza la cantidad de unidades de un artículo determinado y llama a la función que actualiza el precio //total del artículo
//actualizamos las cantidades de los productos sumándoles 1 solamente
$qty=$this->array_qty[$pos] + 1 ;
$this->array_qty[$pos]=$qty; //Esto creo que sobra pero tampoco da error
$this->update_cart ($pos,$qty);
$exist=true;
}
}//fin del foreach
} //fin de in_array
//Esto se ejecuta cuando no pertenece al array la ID de ese artículo , por eso no entiendo lo que falla , ya que ademas de igualarlo a 1
//le suma el 1 de atrás ¿porque?
if (!$exist)
{
$this->array_qty[$this->num_productos]=1;
$this->array_id_art[$this->num_productos]=$id_art;
$this->array_name[$this->num_productos]=$nombre_prod;
$this->array_price[$this->num_productos]=$precio_prod;
$this->array_img[$this->num_productos]=$img;
$this->array_price_total[$this->num_productos]=$this->array_price[$this->num_productos];
//guardamos el nombre de la imagen de cada producto en array
//$this->array_ref_prod[$this->num_productos]=$ref;
$this->num_productos++;
}
}
Desregistrar array de sesión
Y esto lo hago despúes de cada compra , una vez se le da a Conformar compra.
unset ($_SESSION["ocarrito"] );
session_destroy();
Ya digo el problema es que me inserta aveces 2 unidades y otras 1 ,cuando tiene que ser siempre 1 , cuando el artículo no existe claro ya que en este caso tiene que sumar 1. Parece como si guardara en algunas posiciones array_qty[$pos] la cantidad 2 y no entiendo porque narices lo hace, se supone que al Desregistrar el array se borra todo ¿no?.
Un saludo y gracias de antemano por la ayuda que siempr brindáis .
He creado para rematar la faena un método que al terminar la compra borra tanto las cantidades del array_qty como del array_Id , es decir donde estan las id de los artículos y sus cantidades, este método no debería de hacer falta , ya que se supone que al hacer unset y session_destroy estoy borrando TODA la sesión.
este es el método , y aún así cuando le da la gana mete 2 unidades en vez de 1
function borrar_qty () {
for ($i=0; $i<count($this->array_qty) ;$i++ )
{
//Borra todas las cantidades de la memoria
$this->array_qty[$i]=0; //Esto para dajarlas todas a 0
$this->array_id_art[$i]=0; //borramos los Ids de los artículos
}
}