Foros del Web » Programando para Internet » PHP »

Problema con carritos para usuarios no registrados en tienda virtual

Estas en el tema de Problema con carritos para usuarios no registrados en tienda virtual en el foro de PHP en Foros del Web. Hola, tengo una duda. He creado una pagina web en php, una especie de tienda virtual en la cual para comprar articulos era obligatorio registrarse. ...
  #1 (permalink)  
Antiguo 10/05/2011, 11:26
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Problema con carritos para usuarios no registrados en tienda virtual

Hola, tengo una duda.

He creado una pagina web en php, una especie de tienda virtual en la cual para comprar articulos era obligatorio registrarse.

Entonces al efectuar el login del usuario, si era correcto, creaba una nueva instancia "carrito" en donde almacenaba los productos que dicho usuario iba añadiendo para comprar, (si el usuario hacia logout, los articulos desaparecian del carrito quedando de ese modo disponibles para otros compradores), es decir, que cada usuario registrado tenia su propio carrito.


Me han pedido que permita la compra de articulos sin necesidad de que el usuario este registrado, y aqui entonces es cuando viene mi duda.....

Como puedo hacer para que por ejemplo si acceden 2 usuarios no registrados a la web, cada uno tenga su carrito independiente???? Tendria que usar manejo de cookies y sesiones o algo asi??? Supongo que tenga que usar variables de sesion de algun modo, pero como??

Y alguna idea de en que momento podria generar la instancia "carrito"??? (habia pensado en crearlo en la pagina principal en el momento de acceder a la web, que comprobase si existia alguna instancia carrito y en caso de que no fuese asi la crease, pero eso me crearia un problema si por ejemplo un usuario compra algo y luego otro se pone en el mismo ordenador, verdad???)

Un saludo y gracias por adelantado
  #2 (permalink)  
Antiguo 10/05/2011, 11:39
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

Hola!,
Bueno es casi lo mísmo que usar sesiones.

Por ejemplo:
Al principioo de tu página inicias la sesion con session_start(), ahora creas una sesión llamada carrito: $_SESSION["carrito"]="", y allí vas almacenando los datos así:
Código PHP:
Ver original
  1. $_SESSION["carrito"]=$_SESSION["carrito"].$nuevo_dato;
.

Y pués para saber que no está en la mísma PC, creas una sesion dónde guardas el nombre del usuario registrado y sólo haces algo así:
Código PHP:
Ver original
  1. $_SESSION["registrado"]=$nombre_registrado;
  2. if(isset($_SESSION["registrado"])){
  3.  echo "ESTÁS REGISTRADO";
  4. }
  5. else{
  6.   echo "NO ESTÁS REGISTRADO";
  7. }
Saludos
  #3 (permalink)  
Antiguo 10/05/2011, 11:46
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

gracias por la respuesta angelfcm, pero creo que no es lo que pido lo que tu me dijiste....


Basicamente lo que quiero es una pagina de venta de articulos (que ya tengo creada) en la cual cualquier usuario que acceda a mi web pueda comprar algo, sin necesidad de que este registrado en la pagina web (puede estarlo o no, lo que tenia hecho hasta ahora es que solo te permitia comprar si estabas registrado).


Entonces el problema le encuentro en el tema del carrito de la compra, como almacenar una variable de sesion para cada usuario "anonimo" (para los registrados lo tengo hecho y se como hacer que tengan su carrito independiente, pero no asi para los no registrados), como puedo obtener algo que identifique a cada usuario que accede a la pagina desde diferentes ordenadores, no se si me explique ahora bien, espero que si.

Un saludo y gracias por la ayuda.
  #4 (permalink)  
Antiguo 10/05/2011, 13:47
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

Tienes que usar sesiones.

Para cada usuario que accede a la página, el servidor le asigna un identificador de sesión único, así sabe de que usuario se trata en cada momento.
No estoy 100% seguro, pero creo que es así.
  #5 (permalink)  
Antiguo 12/05/2011, 04:10
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

Cita:
Iniciado por Nexus10 Ver Mensaje
Tienes que usar sesiones.

Para cada usuario que accede a la página, el servidor le asigna un identificador de sesión único, así sabe de que usuario se trata en cada momento.
No estoy 100% seguro, pero creo que es así.

Muchas gracias Nexus10, y alguien podria decirme como obtengo dicho identificador de usuario????


Y como podria solventar el problema que comente, es decir, cuando un usuario añade un producto al carrito, este se marca como reservado para que no pueda ser escogido por otro usuario, entonces me gustaria saber algun metodo para que al cerrar el navegador, dicho articulo quedase libre.... hay algun modo de detectar eso en php???


Habia pensado en una de estas opciones, pero no se si podriais proporcionarme una mejor:

OPCION 1:
Poner un contador o algo asi, que el producto solo pueda estar reservado durante 20 minutos por ejemplo.

OPCION 2:
Cuando se cierre la pagina o el navegador, hacer que salte una ventana emergente advirtiendo que tiene productos en el carrito que en caso de salir se perderan, de modo que si aceptan, se cierre la pagina y los productos pasen otra vez a estar disponibles.

Última edición por MARTIN_LAW; 12/05/2011 a las 04:21
  #6 (permalink)  
Antiguo 12/05/2011, 05:16
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

El identificador de sesión se obtiene con session_id().

Yo creo que para tu caso lo mejor sería usar cookies. Yo no he trabajado nunca con cookies así que no te puedo decir exactamente si es eso lo que necesitas, pero me da a mi que sí. Usando la variable $_SESSION yo creo que también lo puedes hacer, utilizando session_id() para mirar si el producto está disponible o no según exista el identificador o no.

Esto que tú quieres hacer es muy común en una aplicación web así que alguien lo tiene que saber. Busca en la web que seguro que lo encuentras.

Un saludo.
  #7 (permalink)  
Antiguo 12/05/2011, 05:16
 
Fecha de Ingreso: marzo-2003
Ubicación: Gandia, Valencia, España
Mensajes: 55
Antigüedad: 21 años
Puntos: 3
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

No crees que sería mucho más sencillo utilizar alguno de los CMS ya existentes? Prestashop, OSCommerce ya vienen con todo hecho, instalar y correr. Además tienen muchas más funcionalidades que seguro que te serán de utilidad.
__________________
Sueño luego existo
  #8 (permalink)  
Antiguo 12/05/2011, 05:39
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

Gracias a ambos por las respuestas.

Sobre lo de usar un carrito ya hecho, no puede ser, ya que debe ser elaboracion propia todo ello, y de hecho ya lo tengo hecho, lo unico que me falla es eso.

Como dije en el primer post, me funciona perfectamente para usuarios registrados, pero me han pedido que lo amplie para que los usuarios no registrados tambien puedan comprar en la pagina, y creo que lo de obtener el identificado no me hace falta, ya que con el uso de variables de sesion ya lo tengo solventado, ya que por ejemplo abro una sesion en mozilla, añado productos al carro y si abro otra en otro navegador diferente (simulando ser otro usuario), me sale el carrito vacio, y los objetos que el otro usuario añadio a su carrito no salen disponibles.


Hasta ahi todo correcto, lo que no se como hacer es lo que dije para que cuando los usuarios no registrados abandonen la pagina, su carrito se vacie, y que el campo "reservado" de los productos que tenian en el carro pase a ser 0 de nuevo (es decir que indique que no esta reservado y de ese modo le salga en la busqueda a los otros usuarios).


Por eso plantee esas 2 posibles soluciones, a ver si me aconsejabais el uso de alguna tercera solucion, y que posibles fallos podria tener haciendolo como digo.


Un saludo y gracias de nuevo.
  #9 (permalink)  
Antiguo 12/05/2011, 10:14
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

Resumiendo, lo que necesito es saber si existe alguna funcion o algo que al detectar que el navegador web se cierra me ejecute parte de un codigo.

EDITADO: Me he dado cuenta que lo necesito tanto para gente registrada como para la que no esta registrada

Última edición por MARTIN_LAW; 12/05/2011 a las 11:30
  #10 (permalink)  
Antiguo 12/05/2011, 19:41
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Problema con carritos para usuarios no registrados en tienda virtual

Viendo la necesidad de opciones para registrados y no registrados, mejor deberías de omitir la parte del loggin y usar puras sesiones.

Y para saber si el usuario cerro la ventana, no conosco una función que detecte cuándo el navegador se cierre.

Pero puedes crear una columna en tu base de datos dónde te índique si está o no activo tal usuario. Para ello creas una tarea programada que ejecute un archivo de php que haga una consulta para todos los usuarios y actualize los estados de cada uno (conectado, desconectado) cada 5 mins por ejemplo.

Atención: para poder seguir ayudandote, agradéce mis mensajes(karma) o envíame un MP para encontrar tus mensajes rápido.

Etiquetas: registrados, usuarios, virtual, tiendas
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

SíEste tema le ha gustado a 1 personas




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