Foros del Web » Programando para Internet » PHP »

Guardar productos del carrito de compras

Estas en el tema de Guardar productos del carrito de compras en el foro de PHP en Foros del Web. Hola a todos: Tengo el siguiente código para guardar los datos del carrito de compras: foreach ($cart as $sku => $qty) { $query = mysql_query("insert ...
  #1 (permalink)  
Antiguo 30/01/2009, 10:15
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Busqueda Guardar productos del carrito de compras

Hola a todos:

Tengo el siguiente código para guardar los datos del carrito de compras:

foreach ($cart as $sku => $qty) {
$query = mysql_query("insert into productos values
('$id_orden', '".$producto["sku"]."', '".$producto["precio"]."', '$qty')");
$result = mysql_query($query);
if(!$result)
return false;
}

Esto hace la función de guardarlo pero el problema es que solo me guarda los datos de un producto.

Mi pregunta es:

¿Cómo puedo guardar todos los productos del carrito?

Gracias.
  #2 (permalink)  
Antiguo 30/01/2009, 10:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

Pues creo el problema es que llamas 2 veces a mysql_query, en la segunda vuelta te va a dar false, esto es porque le estas pasando un boolean y no un string por lo que se sale del foreach al encontrar la condicion.

Saludos
  #3 (permalink)  
Antiguo 30/01/2009, 10:31
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

La puse así:

foreach ($cart as $sku => $qty) {
$query = mysql_query("insert into productos values
('$id_orden', '".$producto["sku"]."', '".$producto["precio"]."', '$qty')");
}

pero me hace lo mismo, solo agarra un producto. Será que tengo que hacer algún otro ciclo?
  #4 (permalink)  
Antiguo 30/01/2009, 10:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

Haz un var_dump($cart) al inicio es probable que solo tengas 1 item en tu array.

Saludos
  #5 (permalink)  
Antiguo 30/01/2009, 10:47
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

ya el var_dum me habia señalado los dos productos. Ya verifiqué que los trae pero solo guarda uno. Que podrá ser????
  #6 (permalink)  
Antiguo 30/01/2009, 10:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

Prueba agregar el die para ver si hay un error:
Código php:
Ver original
  1. foreach ($cart as $sku => $qty) {
  2.        $query = mysql_query("insert into productos values ('$id_orden', '".$producto["sku"]."', '".$producto["precio"]."', '$qty')") or die(mysql_error());
  3. }

Saludos
  #7 (permalink)  
Antiguo 30/01/2009, 11:10
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

Hola:

Me arroja lo siguiente:

Duplicate entry '80-Fashion_Necklace' for key 1

No entiendo?¿?¿
  #8 (permalink)  
Antiguo 30/01/2009, 11:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

El error te indica que tienes un campo duplicado en tu tabla, seguramente tienes un indice del tipo UNIQUE por lo que no vas a poder insertar productos duplicados.

Saludos
  #9 (permalink)  
Antiguo 30/01/2009, 11:22
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

si ese era el error, gracias. Pero ahora me guarda dos veces el mismo producto. Te muestro, esto es lo que arroja el var_dump:

array(2) { ["Straw_Handbag"]=> int(1) ["Fashion_Necklace"]=> int(1) }

y me guarda esto en la BD:

81 Fashion_Necklace 50.00 1
81 Fashion_Necklace 50.00 1

es decir solo me quarda el último producto 2 veces.

Por qué?
  #10 (permalink)  
Antiguo 30/01/2009, 11:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

Mmm creo el problema esta en tu query, intenta esto:
Código php:
Ver original
  1. foreach ($cart as $sku => $qty) {
  2.        $sQuery = "insert into productos values ('$id_orden', '".$producto["sku"]."', '".$producto["precio"]."', '$qty')";
  3.       echo $sQuery;
  4.       // mysql_query( $sQuery ) or die( mysql_error() );
  5. }

Es probable que a la hora de insertar $producto["sku"] te de el mismo producto, de donde obtienes esa variable?

Saludos
  #11 (permalink)  
Antiguo 30/01/2009, 11:39
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
el resultado que me da el echo $sQuery es 11

Al dar var_dum al array producto tengo esto:

array(38) { [0]=> string(1) "7" ["id_producto"]=> string(1) "7" [1]=> string(19) "2008-11-18 13:10:25" ["fecha"]=> string(19) "2008-11-18 13:10:25" [2]=> string(7) "C159665" ["id_tienda"]=> string(7) "C159665" [3]=> string(4) "Yupi" ["nombre_tienda"]=> string(4) "Yupi" [4]=> string(10) "Accesorios" ["conti"]=> string(10) "Accesorios" [5]=> string(9) "Bisuteria" ["pais"]=> string(9) "Bisuteria" [6]=> string(8) "Collares" ["catid"]=> string(8) "Collares" [7]=> string(13) "Collar Deluxe" ["title"]=> string(13) "Collar Deluxe" [8]=> string(1) "1" ["ctdad"]=> string(1) "1" [9]=> string(5) "Mujer" ["tallon"]=> string(5) "Mujer" [10]=> string(9) "Conjuntos" ["tallita"]=> string(9) "Conjuntos" [11]=> string(0) "" ["talla"]=> string(0) "" [12]=> string(0) "" ["ancho"]=> string(0) "" [13]=> string(0) "" ["alto"]=> string(0) "" [14]=> string(0) "" ["largo"]=> string(0) "" [15]=> string(4) "1.00" ["peso"]=> string(4) "1.00" [16]=> string(5) "50.00" ["price"]=> string(5) "50.00" [17]=> string(22) "Precioso Collar Deluxe" ["description"]=> string(22) "Precioso Collar Deluxe" [18]=> string(16) "Fashion_Necklace" ["sku"]=> string(16) "Fashion_Necklace" }

???

lo que me extraña es que todos son string

antes de pasar no son string, porqué despues son string?

Última edición por GatorV; 30/01/2009 a las 13:40
  #12 (permalink)  
Antiguo 30/01/2009, 13:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

11?? Te debería dar el Query SQL armado...

Por otro lado no se si te haz fijado pero $producto['sku'] siempre te da Fashion_Necklace, por lo que es lo que siempre te va a insertar.

Saludos
  #13 (permalink)  
Antiguo 30/01/2009, 13:45
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

o sea que me trae solo los datos de un producto?
  #14 (permalink)  
Antiguo 30/01/2009, 13:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

Así es, necesitas yo creo en este caso antes de hacer el INSERT realizar un SELECT y traer los datos del SKU en cuestión y luego insertarlos ya en el carrito.

Saludos
  #15 (permalink)  
Antiguo 30/01/2009, 13:59
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

estoy bastante confundida. Lo que pasa es que ya en el punto de insertar en la tabla productos es cuando la persona va a pagar la orden, es decir que ya debería traer todos los datos del carrito. No entiendo que hacer para guardar estos datos y no que guarde solo uno. Este es el código del carrito (me dijiste el otro día que no usara session_is_registered pero si lo hago de la otra manera no me funciona):

<?
include ('funciones.php');
session_start();

if($new)
{
//nuevo artículo seleccionado
if(!session_is_registered("cart"))
{
$cart = array();
session_register("cart");
$items = 0;
session_register("items");
$total_precio = "0.00";
session_register("total_precio");
}
if($cart[$new])
$cart[$new]++;
else
$cart[$new] = 1;
$total_price = calcular_precio($cart);
$items = calcular_items($cart);
}
if($save)
{
foreach ($cart as $sku => $qty)
{
if($$sku=="0")
unset($cart[$sku]);
else
$cart[$sku] = $$sku;
}
$total_precio = calcular_precio($cart);
$items = calcular_items($cart);
}

if($cart&&array_count_values($cart))
display_cart($cart);
else
{
echo "<p>No hay artículos en tu carro";
echo "<hr>";
}
$target = "index.php";
// si hemos añadido un artículo al carro, continuar comprando en esa categoría
?>
<br>
<table width="450" border="0" align="right">
<tr>
<td><? mostrar_boton("chequeo.php", "go-to-checkout", "Go To Checkout"); ?>
<div align="right"></div>
<div align="right"></div>
<div align="center"></div>
<div align="center"></div></td>
</tr>
<tr>
<td><? mostrar_boton($target, "continue-shopping", "Continue Shopping");
$path = $PHP_SELF;
$path = str_replace("mostrar_carro.php", "", $path);
?>
<div align="right"></div>
<div align="right"></div>
<div align="center"></div>
<div align="center"></div></td>
</tr>
</table>

lo que quisiera saber es donde estoy guardando los valores de $sku y como guardo los que me faltan.

Gracias
  #16 (permalink)  
Antiguo 30/01/2009, 15:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

En esta parte:
if($$sku=="0")
unset($cart[$sku]);
else
$cart[$sku] = $$sku;
}

Es donde guardas el $sku, y como te comento a la hora de guardarlo debes de insertar el producto correcto ya que tu array de $productos solo tiene un sku, y para poder insertarlos diferentes tienes que hacer un SELECT primero a tu base de datos, obtener el precio y nombre del producto (en base al SKU) y posteriormente hacer la insercion en el carrito.

Saludos
  #17 (permalink)  
Antiguo 30/01/2009, 16:11
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

lo que pasa es que no puedo hacer un select antes porque yo nunca guardo estos datos sino al final cuando llego al código de insertar los items pues si la persona al final no realiza la compra para que los voya a guardar. El problema que tengo es que me conserve los datos de los distintos productos hasta el punto en donde los inserto en la tabla productos (que es la tabla donde estan todos los items del carrito).

Ahora mi pregunta es como me traigo todos esos datos asi como pude traerme los de un solo producto???

Gracias
  #18 (permalink)  
Antiguo 30/01/2009, 16:52
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Guardar productos del carrito de compras

Hola, porque no haces un procedimiento almacenado para crear una tabla temporal (en memoria) que te guarde todos los elementos del carrito, luego si el usuario hace la orden los datos pasan a la tabla de la bd y si no quiere eliminas la tabla

saludos
  #19 (permalink)  
Antiguo 30/01/2009, 17:00
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar productos del carrito de compras

hola cesarpunk, es una buena idea pero no lo se hacer. Quería resolverlo conservando los datos con la sesion pero no me guarda todos los productos sino uno. Gracias.
  #20 (permalink)  
Antiguo 30/01/2009, 18:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Guardar productos del carrito de compras

Yo me refiero a que hagas un SELECT nadamas del nombre del producto y el precio que es lo equivalente a $producto['sku'] y $producto['precio'] esos datos los debes de tener en una BDD:
Código php:
Ver original
  1. foreach ($cart as $sku => $qty) {
  2.        $sProductQuery = "SELECT producto, precio FROM tienda WHERE sku='$sku' LIMIT 1";
  3.        list( $producto, $precio ) = mysql_fetch_array( mysql_query( $sProductQuery ) );
  4.        $sQuery = "insert into productos values ('$id_orden', '$producto', '$precio', '$qty')";
  5.       echo $sQuery;
  6.       // mysql_query( $sQuery ) or die( mysql_error() );
  7. }

Saludos
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 03:44.