Foros del Web » Programando para Internet » PHP »

carrito en session

Estas en el tema de carrito en session en el foro de PHP en Foros del Web. Hola gente estoy haciendo un carrito de compras y se me dio por hacerlo muy sencillo pero me paso algo inesperado: la idea es que ...
  #1 (permalink)  
Antiguo 15/10/2012, 07:07
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
carrito en session

Hola gente estoy haciendo un carrito de compras y se me dio por hacerlo muy sencillo pero me paso algo inesperado:
la idea es que en un catalogo de productos cuando el usuario hace click en comprar le paso el id del producto por get
<a href="index.php?section=mycart&producto_id=<?php echo $id; '>" >add to cart</a>
y lo que quiero hacer es en una variable de session guardar todos esos producto_id para procesarlos al final pero no me deja!

Código PHP:
Ver original
  1. //lleno el carrito
  2.  
  3. $_SESSION['productos'][] = $_GET["producto_id"];
  4.  
  5. //process
  6. foreach($_SESSION['productos'][] as $key => $value){
  7.     echo "$key => $value <br />";
  8. }

y no me funciona dice que no se puede convertir a string la variable sesion ¿?¿?¿
no logro entender el problema

gracias
  #2 (permalink)  
Antiguo 15/10/2012, 07:14
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: carrito en session

¿abriste la sesión con session_start()?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 15/10/2012, 07:19
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: carrito en session

Cita:
Iniciado por maycolalvarez Ver Mensaje
¿abriste la sesión con session_start()?
olvide mencionarlo, pero si ya viene de antes, en todo caso el primer error seria que la sesion no se inicio. gracias
  #4 (permalink)  
Antiguo 15/10/2012, 07:24
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: carrito en session

puede ser que te marque error la primera vez porque aún no le has dicho que es de tipo array, lo que recomiendo es usar isset para verificar si la variable fue establecida, de lo contrario aplicarle un array explícitamente, así al serializar el módulo session de PHP sabe que es un array :

Código PHP:
Ver original
  1. //suponiendo que session_start() YA fue llamado ;-)
  2. if (! isset($_SESSION['productos'])){
  3.     $_SESSION['productos'] = array(); //con ésto se establece como array.
  4. }

me imagino que puedes colocar éste fragmento en tu archivo de includes donde inicias sesión, ya que es algo básico que no necesitas llamar en todos lados y puede centralizarse
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 15/10/2012, 07:47
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: carrito en session

yo habia hecho esto, seguro me sobraron los parentesis

//suponiendo que session_start() YA fue llamado
if (! isset($_SESSION['productos'])){
$_SESSION['productos'][] = array(); //con ésto se establece como array.
}
  #6 (permalink)  
Antiguo 15/10/2012, 08:37
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: carrito en session

no, no hace falta el par extra de paréntesis, porque se supone que estableces productos como un array para que acepte:

$_SESSION['productos'][] = $_GET["producto_id"];
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 15/10/2012, 09:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: carrito en session

Yo no tuve problemas con hacerlo así
Código PHP:
Ver original
  1. <?php
  2. $arr = array(1,2,3,4,5,6,7);
  3. foreach($arr as $v){
  4.     $_SESSION['prod'][] = $v;
  5. }
  6. print_r($_SESSION);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 15/10/2012, 09:41
sgr
 
Fecha de Ingreso: abril-2003
Ubicación: Buenos Aires
Mensajes: 77
Antigüedad: 21 años
Puntos: 11
Respuesta: carrito en session

Proba poner
foreach($_SESSION['productos'] as $key => $value)

Sin los corchetes vacios.
__________________
Informática Integral
  #9 (permalink)  
Antiguo 15/10/2012, 09:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: carrito en session

Oohhhh ya veo, no observe bien el código que expusiste, el error es bien simple, es que en el foreach no detecta lo que significa []. En ese caso ya debes usar lo que te indica sgr y luego otro foreach para recorrer el siguiente array.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 15/10/2012, 12:41
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: carrito en session

Cita:
Iniciado por abimaelrc Ver Mensaje
Oohhhh ya veo, no observe bien el código que expusiste, el error es bien simple, es que en el foreach no detecta lo que significa []. En ese caso ya debes usar lo que te indica sgr y luego otro foreach para recorrer el siguiente array.
claro es que por mas que haga el var_dump de SESSION no me los mostraba como array sino como un string, es muy raro.
pero bueno en un rato les muestro como me quedo solucionado (espero)
  #11 (permalink)  
Antiguo 15/10/2012, 12:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: carrito en session

Pero no es eso, esto está mal

Código PHP:
Ver original
  1. foreach($_SESSION['foo'][]....)

Debe ser
Código PHP:
Ver original
  1. foreach($_SESSION['foo'] as $key => $value){
  2.     foreach($value as $k => $v){
  3.  
  4.     }
  5. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 15/10/2012, 13:24
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: carrito en session

perfecto quedo asi funcionando:
Código PHP:
Ver original
  1. <?php
  2.     //lleno el carrito
  3.     session_start();
  4.     $_GET["producto_id"] = 1;
  5.     if(!isset ($_SESSION['productos']))
  6.         $_SESSION['productos'] = array();
  7.    
  8.     $_GET["producto_id"] = 1;
  9.     $_SESSION['productos'][] = $_GET["producto_id"];
  10.     $_GET["producto_id"] = 10;
  11.     $_SESSION['productos'][] = $_GET["producto_id"];
  12.      
  13.     //process
  14.     foreach($_SESSION['productos'] as $key => $value){
  15.         echo "$key => $value <br />";
  16.     }
  17. ?>

nunca tengo problemas con arraicitos y la Sesion pero hoy me jodió!
  #13 (permalink)  
Antiguo 15/10/2012, 22:49
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: carrito en session

El problema es claro, cuando tu agregas corchetes sin nada especifico dentro de ellos (de los corchetes) le indicas a PHP que se definirá un nuevo item dentro del array, mas no que estas accediendo al array, no es problema de PHP, es problema de conocimiento o "despiste", para que se entienda mas facil...

Código PHP:
Ver original
  1. //Definiendo nuevos items con indice auto incrementable, 0,1,2,3, etc...
  2. $array = array();
  3. $array[] = 'prueba 1';
  4. $array[] = 'prueba 2';
  5. $array[] = 'prueba 3';
  6.  
  7. //al final seria lo mismo a
  8. $array = array('prueba 1','prueba 2','prueba 3');
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #14 (permalink)  
Antiguo 16/10/2012, 20:32
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: carrito en session

me quedo el "despiste"

gracias

Etiquetas: carrito, session, variables, usuarios
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:12.