Foros del Web » Programando para Internet » PHP »

ayuda carrito por favor

Estas en el tema de ayuda carrito por favor en el foro de PHP en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 04/04/2008, 04:35
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
ayuda carrito por favor

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
}


}

Última edición por Dundee; 04/04/2008 a las 09:48
  #2 (permalink)  
Antiguo 04/04/2008, 06:45
Avatar de Pablokey  
Fecha de Ingreso: abril-2008
Mensajes: 32
Antigüedad: 16 años, 1 mes
Puntos: 1
Re: ayuda carrito por favor

$this->array_qty[$pos]=$qty;
$this->update_cart ($pos,$qty);
$exist=true;
  #3 (permalink)  
Antiguo 04/04/2008, 06:50
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Re: ayuda carrito por favor

Cita:
Iniciado por Pablokey Ver Mensaje
$this->array_qty[$pos]=$qty;
$this->update_cart ($pos,$qty);
$exist=true;

Bueno gracias por la ayuda de verdad ,pero la verdad no se que quieres decir con eso ya que eso ya lo tengo exactamente puesto en mi código para actualizar las cantidades del carrito , el código lo he pegado en mi post, además tengo puesto EXACTAMENTE lo mismo que me respondes ,y tampoco es eso lo que preguntaba pero bueno de todos modos gracias por intentar ayudarme.
Un saludo
  #4 (permalink)  
Antiguo 04/04/2008, 09:43
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Re: ayuda carrito por favor

Curioso , solo me pasa con mozilla ,con explorer SIEMPRE añade de 1 en 1 ¿alguien sabe como puede pasar esto?.



Gracias de antemano y saludos.

Última edición por Dundee; 05/04/2008 a las 06:23
  #5 (permalink)  
Antiguo 06/04/2008, 10:30
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 18 años
Puntos: 18
Re: ayuda carrito por favor

Mira, el PHP se ejecuta igual en cualquier navegador, ya que lo interpreta el servidor, no el navegador, así que el error debe de ser de HTML o de Javascript.

También puede pasar que tengas algún error en el código PHP (la verdad, no lo he revisado) y que la primera vez que añades producto (con IE) se añade bien, y las siguientes (con FF), las añada mal.

Revisa eso y postea el HTML / Javascript que usas para determinar el número de productos a añadir.
  #6 (permalink)  
Antiguo 06/04/2008, 10:51
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Re: ayuda carrito por favor

Cita:
Iniciado por sumolari Ver Mensaje
Mira, el PHP se ejecuta igual en cualquier navegador, ya que lo interpreta el servidor, no el navegador, así que el error debe de ser de HTML o de Javascript.

También puede pasar que tengas algún error en el código PHP (la verdad, no lo he revisado) y que la primera vez que añades producto (con IE) se añade bien, y las siguientes (con FF), las añada mal.

Revisa eso y postea el HTML / Javascript que usas para determinar el número de productos a añadir.
Bueno no se ya no se me ocurre nada , el código html no creo que tenga mucho que ver con la función que añade artículos al carrito ,el problema tiene que estar aqui pero no lo encuntro. Repito con Explorer funciona PERFECTAMENTE con firefox NO , se como supongo la mayoría que frecuentamos estos foros que el php se ejecuta en el servidor no en el navegador pero aún así no entiendo como puede añadirse 1 artículo en explorer y en mozilla (cuando le da la gana) 2 o 1 según.
Este es el código que creo puede ser el causante. Por cierto las multiplicaciones y demás las hace correctamente , es decir si añade 2 y vale 5 pone 10 si añade 1 solo 5 , lo digo para que se vea que el tema lógico funciona perfectamente , por lo que lo que se almacena en la propiedad $this->array_qty[$this->num_productos] es la cantidad correcta según sea 1 artículo o 2.
Código:
function introduce_producto($id_art,$nombre_prod,$precio_prod,$img,$ref,$qty  ){

//inicioamos la variable exists a false
		$exist=false;
	if (@in_array($id_art,$this->array_id_art) )

	//Buscamos la posición el la que sa haya el artículo para sumarle 1
		foreach ( $this->array_id_art as  $pos => $value )
		{
			if ( $id_art  == $value && $exist==false)
				{
				
				
		//Actualiza la cantidad de unidades de un artículo determinado y llama a la función que actualiza el precio        //total del artículo
		 
		   			$qty=$this->array_qty[$pos] + 1; //Esto para cuando se de un clic desde la tienda 
		   									
		//actualizamos las cantidades de los productos sumándoles 1 solamente
				 $this->array_qty[$pos]=$qty;
				 $this->update_cart ($pos,$qty);
				 $exist=true;
					
		 
		 		}
		 
		 }//fin del foreach
		
		if ($exist==false)
		{
			$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++;
		}
	
	}
Salu_2 y gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:14.