Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿Cómo insertar filas en un array de session?

Estas en el tema de ¿Cómo insertar filas en un array de session? en el foro de PHP en Foros del Web. Buenos días a todos! Estoy intentando hacer una especie de carrito de la compra con sesiones. Le paso el id del producto mediante post y ...
  #1 (permalink)  
Antiguo 22/01/2014, 07:48
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
¿Cómo insertar filas en un array de session?

Buenos días a todos!

Estoy intentando hacer una especie de carrito de la compra con sesiones. Le paso el id del producto mediante post y realizo una consulta a la base de datos estrayendo el precio y el nombre.
Me funciona con el primer producto, pero se sobreescriben cuando trato de añadir alguno más. Tengo el código, de pruebas, así de básico:
Código PHP:
Ver original
  1. include 'conecta.php';
  2.  
  3. print_r($_POST);
  4.  
  5. if(!empty($_POST['idpie'])){$idpie = $_POST['idpie'];}
  6.  
  7. $carrito = "carrito";
  8. $contador = 0;
  9. $sql = mysql_query("SELECT idpie,nompie,pvp FROM pieza
  10.     WHERE idpie = '$idpie' ") or die(mysql_error());
  11. $row = mysql_fetch_array($sql);
  12.  
  13. $nompie = $row['nompie'];
  14. $precio = $row['pvp'];
  15.  
  16.  
  17.  
  18. if(isset($_SESSION['carrito'])){
  19.     $carrito = $_SESSION['carrito'];
  20.     $contador++;
  21. $_SESSION['carrito'][$contador]['nompie'] = $nompie;
  22. $_SESSION['carrito'][$contador]['precio'] = $precio;
  23. array_push($_SESSION['carrito'][$contador]['nompie'], $nompie);
  24. array_push($_SESSION['carrito'][$contador]['precio'], $precio);
  25. }
  26.  
  27. var_dump($_SESSION);

En las filas de array_push me da un error y además no conozco bien el procedimiento, si alguien me puede ayudar con esto de forma sencilla y clara se lo agradecería mucho.
Muchas gracias.
  #2 (permalink)  
Antiguo 22/01/2014, 07:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿Cómo insertar filas en un array de session?

array_push — Inserta uno o más elementos al final de un array


Código PHP:
Ver original
  1. $nuevoProducto=array();
  2. $nuevoProducto['nompie'] = $nompie;
  3. $nuevoProducto['precio'] = $precio;
  4. if(!isset($_SESSION['carrito'])){
  5.     $_SESSION['carrito']=array();
  6. }
  7. array_push($_SESSION['carrito'], $nuevoProducto);

Un array multidimensional no es más que un array unidimensional cuyos elementos son arrays...




Luego si el carrito tiene dos datos encada uno de sus elementos debes tratarlo como un array cuyos elementos son arrays con dos elementos.

Así primero creamos el $producto cons us dos datos y lo insertamos al final del carrito con array_push....

Si quitas el id de la consulta

Código PHP:
Ver original
  1. $sql = mysql_query("SELECT nompie,pvp FROM pieza
  2.    WHERE idpie = '$idpie' ") or die(mysql_error());

Luego podrías usar $row directamente.... solo que te cambiaría el nombre de los campos del carrito....o conservar el id y tenerlo en el carrito ....

Código PHP:
Ver original
  1. array_push($_SESSION['carrito'], $row);


Como tienes prevista la posibilidad de comprar mas de una unidad de un producto?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 22/01/2014 a las 08:07
  #3 (permalink)  
Antiguo 22/01/2014, 17:25
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: ¿Cómo insertar filas en un array de session?

Genial!!
Muchas gracias amigo quimfv!! hasta ahora no lograba entenderlo y no me salía por mucho que me estrujara el cerebro , pero con tu explicación me salió a la primera. Eres un auténtico maestro.

En cuanto a añadir más de un producto, por ahora tengo dos métodos: el primero es que paso los parámetros por post en un input cantidad. Pero tengo otro con solo un botón, en ese caso no se como hacerlo, pues no le paso la cantidad... hacer una búsqueda dentro del array???

Si me echas otra mano porque no se me ocurre otra cosa...
  #4 (permalink)  
Antiguo 23/01/2014, 04:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿Cómo insertar filas en un array de session?

Código PHP:
Ver original
  1. $nuevoProducto=array();
  2. $nuevoProducto['nompie'] = $nompie;
  3. $nuevoProducto['precio'] = $precio;
  4. $nuevoProducto['cantidad'] = 1;
  5. if(!isset($_SESSION['carrito'])){
  6.     $_SESSION['carrito']=array();
  7. }
  8. array_push($_SESSION['carrito'], $nuevoProducto);

Suficiente?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 23/01/2014, 07:26
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: ¿Cómo insertar filas en un array de session?

Muchas gracias quimfv, perdona por haber tardado en responder.

Eso no soluciona el tema de insertar un producto con id existente. No se si sería cuestión de buscar dentro del array y si existe el id añadir 1 a la cantidad.

O por otro lado, lo dejo con un input de cantidad... aunque igual es una solución un poco más cutre, no se...

De todas formas gracias a tu ayuda por lo menos tengo solucionado la parte del array que era la que no me salía.

Muchas gracias de nuevo
  #6 (permalink)  
Antiguo 26/01/2014, 13:36
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: ¿Cómo insertar filas en un array de session?

Hola, acabo de hacer esto, para que el carrito de la compra incremente la cantidad del mismo producto, mirándolo por $idpie y funciona añadiendo la cantidad, pero sale mal cuando es un nuevo producto.
Código PHP:
Ver original
  1. include 'conecta.php';
  2.  
  3. if(!empty($_POST['idpie'])){$idpie = $_POST['idpie'];}
  4.  
  5. $sql = mysql_query("SELECT nompie,pvp
  6.                     FROM pieza
  7.                     WHERE idpie = '$idpie' ")or die(mysql_error());
  8.  
  9. $row = mysql_fetch_array($sql);
  10.  
  11. if(!isset($_POST['cantidad'])){ $cantidad = 1;}else{$cantidad = $_POST['cantidad'];}
  12.  
  13. // Asignar valores de la fila sql a variables
  14. $nompie = $row['nompie'];
  15. $precio = $row['pvp'];
  16. $coste = $precio * $cantidad;
  17.  
  18. //Creamos la matriz asignandoselo a la variable
  19. $carrito = array();
  20.  
  21. // Añadimos las columnas de la matriz array
  22.         $carrito['idpie'] = $idpie;
  23.         $carrito['nompie'] = $nompie;
  24.         $carrito['precio'] = $precio;
  25.         $carrito['cantidad'] = $cantidad;
  26.         $carrito['coste'] = $coste;
  27.  
  28. // Comprobaciones
  29. if(!isset($_SESSION['carrito']))
  30. {
  31.     $_SESSION['carrito'] = $carrito;
  32.    
  33. }
  34. elseif(isset($_SESSION['carrito']))
  35. {
  36.     $carrito = $_SESSION['carrito'];
  37.    
  38.     //foreach ($carrito as $key => $pieza)
  39.     //{
  40.         if(in_array($idpie, $carrito))
  41.         {
  42.             $cant = $carrito['cantidad'];
  43.             echo "Cant: ".$cant;
  44.             echo "<br>";
  45.             $cant++;
  46.             $carrito['cantidad'] = $cant;
  47.             $carrito['coste'] = $cant * $carrito['precio'];
  48.             echo "<br>";
  49.             echo "IdPie: ".$carrito['idpie'];
  50.             $_SESSION['carrito'] = $carrito;
  51.         }
  52.         else
  53.         {
  54.             array_push($_SESSION['carrito'], $carrito);
  55.  
  56.         }
  57.     //}
  58. }

Aquí el volcado de var_dump();
Código PHP:
Ver original
  1. IdPie: 28VOLCADO DE LA VARIABLE ARRAY CARRITO
  2.  
  3. array (size=5)
  4.   'idpie' => string '28' (length=2)
  5.   'nompie' => string 'Muelle Helecoidal' (length=17)
  6.   'precio' => string '41.00' (length=5)
  7.   'cantidad' => int 2
  8.   'coste' => float 82
  9.  
  10. VOLCADO DE LA SESSION CARRITO
  11.  
  12. array (size=5)
  13.   'idpie' => string '28' (length=2)
  14.   'nompie' => string 'Muelle Helecoidal' (length=17)
  15.   'precio' => string '41.00' (length=5)
  16.   'cantidad' => int 2
  17.   'coste' => float 82

Con un nuevo producto:
Código HTML:
Ver original
  1. VOLCADO DE LA SESSION CARRITO
  2.  
  3. array (size=6)
  4.   'idpie' => string '28' (length=2)
  5.   'nompie' => string 'Muelle Helecoidal' (length=17)
  6.   'precio' => string '41.00' (length=5)
  7.   'cantidad' => int 2
  8.   'coste' => float 82
  9.   0 =>
  10.     array (size=5)
  11.       'idpie' => string '28' (length=2)
  12.       'nompie' => string 'Muelle Helecoidal' (length=17)
  13.       'precio' => string '41.00' (length=5)
  14.       'cantidad' => int 2
  15.       'coste' => float 82

Etiquetas: $_session, matriz, multidimensional
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 05:14.