Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cookies en PHP o Base de datos MySQL?

Estas en el tema de Cookies en PHP o Base de datos MySQL? en el foro de PHP en Foros del Web. Hola a todos. Mi consulta es más general que puntual. Tengo un sitio web donde el usuario coloca datos como su peso, su altura, y ...
  #1 (permalink)  
Antiguo 19/07/2013, 13:21
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Cookies en PHP o Base de datos MySQL?

Hola a todos. Mi consulta es más general que puntual. Tengo un sitio web donde el usuario coloca datos como su peso, su altura, y selecciona las comidas que come y yo le calculo las calorías que va consumiendo, por día (no pido ni nombre de usuario ni password). Todos estos datos pueden borrarse cuando el día haya terminado sin problemas (no me interesa recoger los datos del usuario todos los días, solo ese día y calcular las calorias consumidas ese dia)
El tema es que si el usuario se va del sitio (cierra la pestaña) o algo tan simple como recargar la página,todos estos datos se pierden.
Mi pregunta sería primero como yo podría hacer para que cuando el usuario vuelva al sitio, se restauren automáticamente todas las variables y que pueda seguir agregando alimentos y el proceso de calcular calorias consumidas continue y no se reinicie.
Me preocupa un poco que si el usuario no tiene activada la opcion de aceptar cookies, no podré almacenar estos datos.
Por otro lado, realizar un registro de usuario me parece un poco complicado, ya que tendría que almacenar todas las variables del usuario y luego el usuario al registrarse, tendría que volcar todos las variables a la pagina, aunque sería una opción, ya que al final del día automáticamente borraría todos los datos almacenados.

Y por ultimo, la parte más complicada de todas, es que el sitio tiene una parte de php y otra en js, por lo que debería recoger las variables js, convertirlas a php y luego recien producir la cookie o upload a SQL, lo cual se realizaría con el siguiente script:
Cita:
<script>
var variablejs = "contenido de la variable javascript" ;
</script>
<?php
$variablephp = "<script> document.write(variablejs) </script>";
echo "variablephp = $variablephp";
?>
En síntesis: ¿Qué es lo que más me convendría hacer? PD: Solo es una pagina, no necesito enviar datos a otras páginas php.
  #2 (permalink)  
Antiguo 19/07/2013, 14:51
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

Alguna ayudita?
  #3 (permalink)  
Antiguo 19/07/2013, 14:57
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

Lo que necesitarias es persistencia en DB + sessiones + Cookies ¿ por que ?

Quieres guardar los alimentos que consume... ? podria ser en cookies pero tienes un limite de tamaño y si el usuario podria borrarlas en una limpieza. Necesitas una DB! ahora.. con HTML5 puedes almacenar datos pero estamos en las mismas... una limpieza local y chau! => MySQL u otro motor del lado del servidor es necesario.

Quieres que el usuario no tenga que loguearse cada vez que cierra el navegador => COOKIES

En RESUMEN:

1) En la DB tienes el registro de cada usuario (si son usuarios registrables con login) y ese registro por usuario tiene su id_usuario que a su vez lo colocas como variable de session.

2) Entonces, con SESSIONS te guardas el ID del usuario que esta navegando en ese momento tu sistema y ADEMAS todos los alimentos que el va agregando a su dieta.

3) Con COOKIES almacenas en su navegador informacion como que el correo (o usuario) y la contraseña para el logueo... asi logras logueo automatico y te evitas el problema de que cierre el navegador y se pierda al session pues en realidad la vuelves a crear a partir de esa cookie.

Todo debe coexistir en el sistema... aunque DB y SESSIONES en el servidor y COOKIES en el Navegador...........

PREGUNTAS:

- Que pasaria sino usaras base datos ? mmm... no podrias guardar nada de forma persistente (permanente)

- Que pasaria si no usas SESSIONS ? pues cada vez que quieras guardar algo en la DB necesitarias que el usuario se autentique.

- Que pasaria sino usas COOKIES ? es lo menos critico pero al cerrar el navegador le tocaria volver a ingresar usuario y password
__________________
Salu2!

Última edición por Italico76; 19/07/2013 a las 15:17
  #4 (permalink)  
Antiguo 19/07/2013, 15:36
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

Muchas gracias Italico, tu respuesta es muy clara, por lo que veo es necesario un poco de todo para una navegación confiable (principalmente base de datos y sesiones). Pero más específico, el problema que tengo es que un único usuario selecciona varios alimentos por día y va sobreescribiendo el valor de las variables, no se bien como sería si un usuario seleccionara 20 alimentos, tendría que usar 20 variables?
En cierta forma sería algo similar a lo de un carrito de compra de internet, por ej., un usuario selecciona varios libros a comprar (en mi sitio, un usuario selecciona varias comidas que ha consumido durante el día) ¿Tendría que usar matrices?
Gracias.
  #5 (permalink)  
Antiguo 19/07/2013, 15:40
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

Es que para eso creas ARRAYs ... o sea dentro de las variables de SESSION una puede ser un ARRAY de alimentos con sus cantidades .. en realidad seria un ARRAY de registros donde cada registro es a su vez un array ... en la practica la estructura es un array bi-dimensional pero desde el punto de vista de base de datos...es un ARRAY DE REGISTROS

En cada "registro en memoria" te guardas en un boolean si ese registro es NUEVO o NO... pues asi sabras si INSERTAR / MODIFICAR

---
Y lo que ME FALTO.........

- Puedo usar solo HTML5 + WebSQL y persisto mis datos... y listo ... no necesito nada mas ? NOPE porque lo que almacenes localmente no lo podras acceder desde el servidor .. y por tanto si solo almacenas localmente no usaras como lenguaje PHP pues estaremos hablando de una aplicacion para celulares / tablets.

Entonces... para que cuernos me sirve almacenar localmente desde HTML5 ? RTA: pues o estas haciendo una aplicacion para celulares (y estas preguntando en el foro equivocado) o bien... quieres guardar TAMBIEN localmente para que el usuario pueda acceder a los datos mientras que esta desconectado pero solo visualizarlos y mediante JavaScript re-envias esos datos al server cuando el usuario vuelve a conectarse
__________________
Salu2!
  #6 (permalink)  
Antiguo 19/07/2013, 15:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

No es una aplicación para celulares. Mi inquietud es que si el usuario selecciona de mi sitio un alimento que consumió a las 10 hs. y cierra la ventana /pestaña y luego quiere ingresar de nuevo a mi sitio porque a las 14 hs. consumió otros alimentos y quiere anotarlos, necesariamente debo recuperar las calorias que llevaba consumidas y los alimentos anteriores para que lleve la cuenta de su consumo diario de alimentos y calorias.
De nada le serviría al usuario que empezara a contar las calorias de nuevo sin considerar que anteriormente consumió alimentos.
Y la duración de la cookie debería ser exactamente de 24 hs (de 0 a 0) ¿Entiendes? Porque no me expreso muy bien que digamos.
  #7 (permalink)  
Antiguo 19/07/2013, 16:02
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

Cita:
Iniciado por omdsetenta Ver Mensaje
No es una aplicación para celulares. Mi inquietud es que si el usuario selecciona de mi sitio un alimento que consumió a las 10 hs. y cierra la ventana /pestaña y luego quiere ingresar de nuevo a mi sitio porque a las 14 hs. consumió otros alimentos y quiere anotarlos, necesariamente debo recuperar las calorias que llevaba consumidas y los alimentos anteriores para que lleve la cuenta de su consumo diario de alimentos y calorias.
De nada le serviría al usuario que empezara a contar las calorias de nuevo sin considerar que anteriormente consumió alimentos.
Y la duración de la cookie debería ser exactamente de 24 hs (de 0 a 0) ¿Entiendes? Porque no me expreso muy bien que digamos.
Lo que pasa es que la duracion de la COOKIE si es de 24 horas...es para que deba loguearse cada 24 horas ? es eso lo que quieres ? creeria que no mi amigo.

Lo que tu necesitas es una "logica" que tenga en cuenta eso en PHP y no tiene nada que ver con la duracion de las cookies. Te aclaro no digo que tu no tengas logica se dice asi ... o sea un algoritmo pues.

En concreto.. tu almacenas los alimentos en la DB junto con la FECHA de alimentacion... o sea tu diseño de base de datos seria asi:

TABLA USUARIOS
TABLA ALIMENTOS
TABLA CONSUMIDOS

En TABLA USUARIOS tienes Nombre, Correo, Password ... etc

En TABLA ALIMENTOS tienes los alimentos posibles con su informacion nutricional y en en especial Nombre del alimento, calorias por cada 100 gramos o racion

En TABLA CONSUMIDOS.. te guardas el ID_USUARIO y los ID_ALIMENTOS asi como la CANTIDAD consumida (en unidades compatibles con la de la informacion nutricional de la tabla ALIMENTOS) y la FECHA de consumision
__________________
Salu2!
  #8 (permalink)  
Antiguo 19/07/2013, 16:19
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

La Tabla Alimentos ya la tengo hecha: son mas de 1000 productos, con sus calorias cada 100 gramos.
La Tabla usuarios la hice pero no me anime a seguir y la borre
La Tabla Consumidos no la entiendo, porque 1 único ID_usuario se corresponde a varios alimentos consumidos y cada uno de ellos tiene un aporte de calorías y una cantidad determinada. Ahí no se como los podría relacionar. Si lograra hacer las tablas y relacionarlas a php, no me interesaría que el usuario se logueara 20 veces al día (al menos por ahora). Al final del día (a las 0 hs.) vaciaría la tabla de "alimentos consumidos" mientras que las otras las dejaría como están.

Supongamos vos mismo:

Usuario: Italico_76

Alimento: Manzanas
Cantidad: 100
Calorías: 100

Alimento: Pizza
Cantidad: 200
Calorías: 340

Alimento: Coca-Cola
Cantidad: 500
Calorias: 220

Como ves, un solo usuario se relaciona con varios alimentos, cantidades y calorias. Este es mi problema, como asignaría 3 alimentos (con sus calorias y cantidades; podrían ser 20 alimentos en un solo día) a un único usuario en una tabla o dos. Incluso al final del día le doy la opción de imprimir lo que consumió (porque va a ser borrado) o lo convierto en archivo y se lo mando por e-mail, etc. siempre es posible imaginar que hacer con la información.
Es decir, el problema sería relacionar un único usuario a varios alimentos consumidos
  #9 (permalink)  
Antiguo 19/07/2013, 16:52
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

Cita:
Iniciado por omdsetenta Ver Mensaje
Como ves, un solo usuario se relaciona con varios alimentos, cantidades y calorias. Este es mi problema, como asignaría 3 alimentos (con sus calorias y cantidades; podrían ser 20 alimentos en un solo día) a un único usuario en una tabla o dos. Incluso al final del día le doy la opción de imprimir lo que consumió (porque va a ser borrado) o lo convierto en archivo y se lo mando por e-mail, etc. siempre es posible imaginar que hacer con la información.
Es decir, el problema sería relacionar un único usuario a varios alimentos consumidos
Por eso son 3 TABLAS y no 2... la tabla "CONSUMIDOS" es lo que se llama en base de datos "tabla puente" pues es una RELACION MUCHOS A MUCHOS

Cita:
Iniciado por Italico76 Ver Mensaje
En TABLA CONSUMIDOS.. te guardas el ID_USUARIO y los ID_ALIMENTOS asi como la CANTIDAD consumida (en unidades compatibles con la de la informacion nutricional de la tabla ALIMENTOS) y la FECHA de consumision
TABLA: CONSUMIDOS

id_consumidos [AUTOINC] [INDICE]
id_usuario [INT]
id_alimentos [INT]
fecha_consumision [DATE]
cantidad_consumida [INT]
__________________
Salu2!
  #10 (permalink)  
Antiguo 19/07/2013, 17:05
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

A ver si entiendo: En la primer fila me pone el nombre de usuario, alimento consumido, calorias, etc y en la segunda fila me pone el mismo nombre de usuario, alimento consumido 2, calorias 2, etc.? Porque no creo que la columna "nombre de usuario" quede vacía mientras voy llenando con alimentos
  #11 (permalink)  
Antiguo 19/07/2013, 17:12
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

REGISTRO cualquiera de : ALIMENTOS

id_alimentos [INT] [AUTOINC] [INDICE] = 25
nombre [VARCHAR(40)] = carne
calorias [INT] = 550


REGISTRO cualquiera de : USUARIOS

id_usuario [INT] [AUTOINC] [INDICE] = 8
username = italico76
nombre = Pablo Bozzolo
edad = 30
sexo = 'H'


REGISTRO cualquiera de : CONSUMIDOS

id_consumidos [INT] [AUTOINC] [INDICE]
id_usuario = 8
id_alimentos = 25
fecha_consumision = 2013-07-19
cantidad_consumida = 4 (o sea 400 gramos)


Nota que los registros de la tabla puente CONSUMIDOS relacionan a los registros de USUARIOS con ALIMENTOS
__________________
Salu2!
  #12 (permalink)  
Antiguo 19/07/2013, 17:18
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

Bien, excelente explicación. En tabla "consumidos" no es necesario la fecha, ya que al final del día la vaciaría automáticamente. Es interesante (y lógico) colocar solo los id_usuario e id_alimentos sin mencionarlos.
Perdón que lo diga, ahí me pones solo la primer fila:

Cita:
id_consumidos [INT] [AUTOINC] [INDICE]
id_usuario = 8
id_alimentos = 25
fecha_consumision = 2013-07-19
cantidad_consumida = 4 (o sea 400 gramos)
Y si el mismo id_usuario consume otros alimentos? La segunda fila sería algo así?

Cita:
id_consumidos [INT] [AUTOINC] [INDICE]
id_usuario = 8
id_alimentos = 27
fecha_consumision = 2013-07-19
cantidad_consumida = 6 (o sea 400 gramos)
  #13 (permalink)  
Antiguo 19/07/2013, 17:21
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

Exacto... y otro registro en CONSUMIDOS podria ser:

id_consumidos [INT] [AUTOINC] [INDICE]
id_usuario = 8
id_alimentos = 1 (pan)
cantidad_consumida = 2 (o sea 200 gramos)


Ahora.. ten en cuenta que si borras todo cada dia... y un usuario introdujo la informacion 11:59:59 hora de tu servidor y tu limpias todo 12:00 pues... no vera nada

Otra cosa... te perderas de poder hacer historiales y analisis sobre esos datos
__________________
Salu2!
  #14 (permalink)  
Antiguo 19/07/2013, 17:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Cookies en PHP o Base de datos MySQL?

Tienes razón, podría guardar los datos y hacer en el futuro un "almanaque" de cantidades consumidas diarias para hacer estadísticas semanales, mensuales, etc. Lo que yo tengo, no miedo, sino terror, es de equivocarme en las fechas. Tendre que crear una columna de fecha en la tabla CONSUMIDOS y luego, si el usuario lo requiere, pueda hacer una consulta entre 2 fechas para ver cuanto consumió (no estilo google analitics, no me da el conocimiento para eso), una estadística simple. O cuanto es el consumo promedio por mes, etc.
Muy bien, muchísimas gracias, se me aclaró el rumbo, primero trabajaré en MySQL, luego en php y cuando esté todo listo, veré si hago algo en sessions o cookies, pero primero MySQL-php. Muchas gracias de nuevo, espero que esto le sirva a otros usuarios también.
  #15 (permalink)  
Antiguo 19/07/2013, 17:35
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Cookies en PHP o Base de datos MySQL?

EXACTO! lo primero es tener claro el MODELO o sea la el diseño de tablas... pues esta mas cerca del QUE (pues describe a los datos) que del COMO (script que maneja todo)
__________________
Salu2!

Etiquetas: cookies, registro, sql, variable, variables
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 13:28.