Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema con carrito

Estas en el tema de Problema con carrito en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas gente, estoy utilizando esta clase para hacer mi carro de compras pero tengo un problema.... esta clase agregar productos aunque ya hayan sido seleccionadas ...
  #1 (permalink)  
Antiguo 11/01/2008, 09:07
 
Fecha de Ingreso: octubre-2007
Mensajes: 4
Antigüedad: 16 años, 6 meses
Puntos: 0
Problema con carrito

Buenas gente, estoy utilizando esta clase para hacer mi carro de compras pero tengo un problema.... esta clase agregar productos aunque ya hayan sido seleccionadas previamente es decir puedo introducir al carro el mismo producto 2 o mas veces, lo que quisiera es que alguien me ayude a agregarle algo a function introduce_producto() para que solo ingrese los productos siempre y cuando no esten en el carro



<?
class carrito {
//atributos de la clase
var $num_productos;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;

//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
//inicializa el numero de productos a 0
function carrito () {
$this->num_productos=0;
}

//Introduce un producto en el carrito. Recibe los datos del producto
//Se encarga de introducir los datos en los arrays del objeto carrito
//luego aumenta en 1 el numero de productos
function introduce_producto($id_prod,$nombre_prod,$precio_p rod){
//foreach($this->array_nombre_prod != $nombre_prod){
$this->array_id_prod[$this->num_productos]=$id_prod;
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
$this->array_precio_prod[$this->num_productos]=$precio_prod;
$this->num_productos++;//}
}

//Muestra el contenido del carrito de la compra
//ademas pone los enlaces para eliminar un producto del carrito
function imprime_carrito(){
$suma = 0;
echo '<table border=1 cellpadding="3">
<tr>
<td><b>Nombre producto</b></td>
<td><b>Precio</b></td>
<td>&nbsp;</td>
</tr>';
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
echo '<tr>';
echo "<td>" . $this->array_nombre_prod[$i] . "</td>";
echo "<td>" . $this->array_precio_prod[$i] . "</td>";
echo "<td><a href='eliminar_producto.php?linea=$i'>
<img src='images/trash.gif'></td>";
echo '</tr>';
$suma += $this->array_precio_prod[$i];
}
}
//muestro el total
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
echo "</table>";
}

//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
//no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
function elimina_producto($linea){
$this->array_id_prod[$linea]=0;
}
}
//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}
?>
  #2 (permalink)  
Antiguo 11/01/2008, 09:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Problema con carrito

Tema trasladado a PHP Orientado a Objetos.

Por favor publica en los foros correctos.

Para hacer lo que pides debes de modificar tu método introduce_carrito para que antes de insertar compruebes si existe o no en el carrito.

Saludos.
  #3 (permalink)  
Antiguo 11/01/2008, 09:24
 
Fecha de Ingreso: octubre-2007
Mensajes: 4
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Problema con carrito

Cita:
Iniciado por GatorV Ver Mensaje
Tema trasladado a PHP Orientado a Objetos.

Por favor publica en los foros correctos.

Para hacer lo que pides debes de modificar tu método introduce_carrito para que antes de insertar compruebes si existe o no en el carrito.

Saludos.


Eso ya lo se pero he intentado varios metodos pero ninguno me funciona por eso quisiera que me indiquen que codigo debo poner.
Ah, y perdon por publicarlo en otro sitio no sabia que era un tema de orientacion a objetos
  #4 (permalink)  
Antiguo 11/01/2008, 11:54
Avatar de vanetino  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima, Peru
Mensajes: 22
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Problema con carrito

Hola Tony007 lo quie prodrias hacer es lo siguiente :

Para empezar create un metodo que valide si tu producto existe :

function introduce_producto($id_prod,$nombre_prod,$precio_p rod){

if(producto_existe($id_prod)){

//actualizas cantidad

}else{

//sino introduces como nuevo

}

}



veo que tus variables de tu clase que usas como array estan mal estructurados

algo mejor seria utilizar un solo una variable

var $contenido = array();

en vez de

var $num_productos;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;

luego lo usas asi:

$this->contentenido['id_producto'] = $id_prod;
$this->contentenido[$id_prod] ['cantidad'] = $cantidad; //esto en vez de $this->num_productos


de esta manera identificas cada producto de mejor manera



saludos

Última edición por vanetino; 11/01/2008 a las 13:09
  #5 (permalink)  
Antiguo 11/01/2008, 11:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Problema con carrito

Porque no intentas hacerlo? Ya te he dicho que necesitas usar un if, junta con la función isset para comprobar si ya existe en el array.

Saludos.
  #6 (permalink)  
Antiguo 14/01/2008, 06:09
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
Re: Problema con carrito

Bueno, no he leido todo el tocho pero voy a sugerir algo que talvez lo sepas o no o sea o no el problema

Si tienes el objeto en sesion tienes que serializarlo cada vez que hagas un cambio en los valores del objeto. Esto me pasó en un caso similar a lo que sería el carrito, un objeto en sesion que los valores van cambiando.

Espero te sea de ayuda.

Un saludo.
__________________
www.pensandoenred.com
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 22:24.