Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Carga de datos múltiples en ventana pop up

Estas en el tema de Carga de datos múltiples en ventana pop up en el foro de PHP en Foros del Web. Buen día a todos y feliz día de las madres a quienes lo estén festejando. Estoy dando mis primerísimos pasos en PHP / MySQL y ...
  #1 (permalink)  
Antiguo 12/05/2013, 09:35
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Carga de datos múltiples en ventana pop up

Buen día a todos y feliz día de las madres a quienes lo estén festejando.

Estoy dando mis primerísimos pasos en PHP / MySQL y como es lógico encuentro la mar de dificultades, aunque siempre ustedes han sido material referencial y de gran ayuda!

La consulta es concreta y allí va: se trata de una página web para una encuesta, compleja en cuanto a cantidad de tablas y relaciones, en la que en muchos momentos hay decisiones en cuanto a número de registros a generar / guardar.

Por ejemplo, la cantidad de personas que habitan en un hogar, y la descripción en detalle de cada una de las personas para dicho hogar. O sea, si hay 5 personas en un hogar determinado, se deberán generar cinco registros, uno por persona para dicho hogar, en la tabla de personas con el mismo ID de hogar y un ID de persona para cada uno.

Mi primera aproximación fue hacer un div contenedor con una cantidad limitada de divs interna con la información de cada persona. Así, si el encuestador elige por ejemplo 3, se mostrarían (estando previamente ocultos) 3 divs similares uno al lado del otro con los campos a ser completados. ¿Se entiende hasta aquí?

Los problemas de esto son múltiples: primero los nombres de los campos contenedores de datos deberán ser diferentes por fuerza, lo que hace compleja la carga en la tabla. Segundo, la cantidad de personas se ve limitada por hardcode, lo que hace además poco flexible para mantenimiento cualquier cosa, no solo este proyecto. Tercero... ni se me ocurre, pero debe haber muchísimas más cosas.

Entonces me dije: ¿por qué no usar una ventana pop up para cargar los datos de las personas? Esto me daría un único nombre de contenedor para cada dato a cargar, y evito de paso tener que usar un hardcode, así podría haber en teoría infinitas personas en un hogar, y objetivo cumplido.

El tema es que me encuentro con mi falta de conocimientos: vi y creo haber entendido cómo se abre una ventana con muchos ejemplos, pero no he visto cómo hacer para que se haga N veces, tantas como el encuestador en este caso haya invocado, y que en todas se mantenga el mismo ID de hogar (supongo que con algun campo oculto se puede hacer eso). En otras palabras, si el encuestador escribe 5 y presiona el botón de cargar o como se le llame, se debería abrir una ventana pop up para la carga de la primera persona, indicando que se trata de la primera persona y no permitiendo que se abandone hasta que se haya completado la carga de los datos obligatorios y se hayan grabado en la tabla respectiva, y cuando esto suceda deberia abrirse la misma ventana pero indicando que se trata de la persona siguiente (¿una variable incremental?), y así hasta alcanzar el valor solicitado por el encuestador.

¿Existen formas de hacer esto? ¿Cuál es la mejor opción al trabajar con múltiples datos (en el sentido visto anteriormente de múltiples registros hijos para un mismo ID padre) sin tener que limitar a quien hace uso de la herramienta?

Desde ya agradezco toda colaboración y mil millones de disculpas por ser tan primerizo en todo este enorme mundo web!!!

Saludos,

Alejandro
  #2 (permalink)  
Antiguo 12/05/2013, 12:27
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Carga de datos múltiples en ventana pop up


<saludos>
Bueno, pues para que no te compliques la existencia, sería más fácil hacerlo de este modo:

1. Creas el hogar con los datos básicos (Entre ellos el número de personas)
2. Al crear dicho hogar, se refresca la página actual y se le habilita un botón de "Crear personas" por ej
3. Dicho botón abrirá la emergente, y enviará como parámetros el id del hogar, y el número de personas
4. En la ventana emergente, se dibujará el formulario para que digiten los datos de la persona (y a este formulario se le agregarían 2 campos hidden para albergar id hogar y cantidad de personas)
5. Al guardar se podría hacer que redireccione a si misma (a la emergente), y que haga una consulta a la tabla de las personas filtrando por el id hogar, trayendo el count, y luego se compara el count versus el total de personas que se recibió del campo hidden
6. Si el count es menor o igual al total de personas, que dibuje nuevamente el formulario para la siguiente persona, en caso contrario avisarle que ya se registraron la cantidad de personas que se informaron

Se entiende?
Espero que si, suerte con eso!!!

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 12/05/2013, 15:22
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Carga de datos múltiples en ventana pop up

Muchas gracias por la respuesta!

Voy a analizarlo bien, pero creo que la idea está muy clara y concisa.

Lo que veo es que primero debo entregarle un ID de encuesta al encuestador porque puede suceder que no quiera cargar las personas del hogar sino primero todos los hogares. Eso me conduce a que el propio encuestador tiene que tener su ID (su documento, por ejemplo) y relacionarlo con los ID de encuestas.

Por lo tanto debería haber una página de consulta de encuestas por ID de encuestador, y algún modo de traer la encuesta tal o cual al momento en que quedó registrada (por ejemplo antes de la carga de las personas del hogar).

¿Eso se hace con algún comando similar al onDblClick?

El problema de esta encuesta en particular es de tiempos, por lo que entiendo. La persona que realiza la encuesta puede completarla en cualquier momento, no lo hace de corrido.

Por otro lado hay otro tema relacionado que creo aporta más complejidad: cada persona tiene un juego de eventos particulares (una persona ==> muchos eventos), y cada evento puede ser a su vez subdividido en varias partes (un evento ==> muchas partes), de modo que por cada persona han de grabarse E eventos que podrán disparar P partes de dichos eventos. Ahí termina la cosa, pero nos encontramos con que una persona puede o no tener eventos, pero de tenerlos es muy probable que tenga al menos una parte (el todo) o muchas.

¿Nuevamente emplearías el select count con respecto a los eventos, y luego con las partes de dichos eventos en página aparte? ¿No existe algún modo más sencillo de relacionar personas, eventos y partes de eventos?

Si no fui claro (que es muy posible), me dicen que trataré de poner un ejemplo en concreto.

Desde ya muchas gracias por la paciencia y atención!

Saludos,

Alejandro
  #4 (permalink)  
Antiguo 12/05/2013, 17:51
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Carga de datos múltiples en ventana pop up

<saludos>
De nada Alejandro.

En cuanto a los nuevos planteamientos, en efecto si el tema es asincrono,
lo mejor sería que la aplicación lo primero que haga sea validar el usuario,
y luego al crear las encuestas que sean guardadas con el id de dicho usuario.

Esto para luego generar un listado de encuestas, filtrando por defecto
por el usuario que la creo y agregando otros filtros (por ej el nombre de la familia, o el consecutivo del id hogar, bueno, eso ya es más definiciones)

Dicho listado se generaría y cada uno debería tener un enlace (un href) y este href que abra directamente una página genérica (por ej encuesta.php) y que le envíe
de parámetro el id de hogar (pues al mostrar el listado ya se debería tener el id hogar, y por ende se puede usar para armar el href, y con esto se evita el onClick o onDblClick, a menos que en efecto los pienses implementar)

En cuanto a los eventos (y sus partes), yo me imagino que dichos eventos (y sus partes) ya existirían previamente en la base de datos, correcto?

Es decir, me imagino que al crear las personas, luego podría listar las personas (escogiendo previamente el hogar) y a cada persona se le agregaría un link de "Eventos", y a su vez, esto haría que se listen los eventos actuales o que tenga la posibilidad de crear uno (pues puede tener 1 o muchos)

Ahora, al crear un evento, solo se escogería cual evento se le quiere crear a la persona (pues el id de la persona ya lo tendríamos)
A su vez, al crear el evento, podemos consultar cuales son sus partes, y mostrarlas cuando entren a ver el detalle de un evento en particular (en cuyo caso se enviaría el id persona, y el idevento), y a su vez imagino esto es para ir informando cual parte del evento ya se hizo y cual no, en cuyo caso al guardar se necesita otro parámetro oculto que es el id de la parte.

Y en efecto, usaría los count pero filtrando con los ids que vamos enviando de sección en sección.

En cuanto a modos más sencillos para relacionar personas con eventos, se me ocurre que luego de crear las personas, se tenga un botón de Agregar Evento.

Dicho botón abriría una emergente en donde crearía dos selects multiples (uno para los Eventos (entendiendo que los Eventos están ya creados en bd) y otro para las personas del hogar en el que estamos)

Así entonces lo que se haría en cada listado es elegir cuales personas y cuales eventos, por ej escogería el evento "Fiesta" y el evento "Despedida" para las personas "Luis" y "Luisa"

Y cuando guarde, esto iría a una tabla que guarde id de la persona, id del evento para cada relación (Es decir, para el ej guardaría 4 registros, pues cada persona tiene 2 eventos relacionados)

Con esto se podría agilizar la creación de eventos.
A su vez esta misma lógica puede aplicarse a eventos con partes, pero sugeriría
que esta creación de eventos con partes se haga en una parte que no tenga nada que ver con las encuestas.
Es decir, que al encuestador no le toque ir armando las partes, sino que el solo enlace personas con eventos, pero estos eventos ya estén armados previamente, tarea que obviamente es de una persona o varias que se pongan en este menester.

Espero que no haya sido muy enredada la respuesta.

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 12/05/2013, 20:18
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Carga de datos múltiples en ventana pop up

Nuevamente gracias por la respuesta!!

Desgraciadamente no, los eventos se generan (o no) dependiendo de la persona y lo que haya hecho o dejado de hacer. Es decir, no hay eventos previos, la persona encuestada cuenta sobre sus eventos del día (son de un único día, el anterior al de la encuesta), y cómo se fueron dando esos eventos en el tiempo durante ese día.

Las tablas están como en cascada de uno a muchos en la relación Hogar a Personas a Eventos a (digamos) Partes de Eventos.

Por ejemplo una persona del hogar realizó una tarea que consta de varias partes por la mañana, luego a mediodía realizó otra tarea con varias partes, y así. Puede ser que otra persona del mismo hogar sin embargo no haya tenido actividad alguna el día en cuestión.

Por eso lo asocié en un punto a lo que contabas sobre las personas del hogar. El único problema aquí es que las personas son fijas (o por lo menos en un momento dado hay una cantidad fija de personas habitando una casa), pero puede que la cantidad de eventos por persona cambie en virtud de que la persona se acuerde más tarde que tuvo otro / otros eventos y haya que cargarlos a la base de datos (deben ser los menos, sin embargo, o al menos eso espero...).

Entonces ahí está el tema asincrónico, que las encuestas son de por sí largas y que la cantidad de información a cargar es mucha, por lo que la carga puede que sea fragmentada, que se cargue algo y otro día se continúe con la carga de lo mismo.

¿Cómo se puede entonces sortear ese problema? Se me ocurrió como te decía, con algo que permita seleccionar lo que ya se cargó, incluso para poder editarlo luego ante un cambio en alguno de los datos no sensibles o no obligatorios, esto implica una consulta cruzada de todas las tablas por índices, y mostrar... ¿qué? ¿La página principal? ¿La página que quedó sin completar? ¿Con qué criterio se puede resolver eso? ¿Hay forma de marcar a algún nivel que no sea el de las tablas / campos ese estado? Eso es lo que me marea, la posibilidad de edición atemporal, es un requerimiento de usuario que no puedo modificar, y que el encuestador que no tiene por qué saber nada de todo esto no sufra las consecuencias de la longitud de las encuestas. O al menos un justo medio.

Espero no haberme enredado en las palabras ni haber sido lo denso que parece todo esto, y nuevamente agradezco cualquier idea por descabellada que parezca a priori, todo este intercambio realmente me ayuda.

Un abrazo,

Alejandro
  #6 (permalink)  
Antiguo 12/05/2013, 21:54
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 6 meses
Puntos: 214
Respuesta: Carga de datos múltiples en ventana pop up


<saludos>
Uhm, bueno, en ese caso como es diario al generar los eventos, se debería para cada evento guardar en un campo de la tabla de eventos la fecha actual.

Así el asunto, al siguiente día se llenaría la encuesta normal para el día actual, pero si la persona recordó alguna tarea del día anterior (o de algún día anterior),
entonces lo que yo haría es tener la opción de buscar los eventos de esa persona y que también me permita filtrar por determinada fecha

Al hacer esto se listarían los eventos de dicha fecha, y tendría cada uno su link para entrar y editarlo si es el caso y agregarle lo que falte.

A su vez, pensando en que este evento sea de una encuesta anterior, el formulario de búsqueda debería filtrar incluso por fecha de la encuesta, persona encuestada (esto sería una lista desplegable pero que viene de una consulta a la tabla personas trayendo a todas las personas sin filtro alguno) y fecha de evento, para que busque de una vez por los 3 filtros, y una vez haga uso de un botón para la búsqueda, haga otra consulta pero con los filtros usados y traiga los registros correspondientes, es decir, yo manejaría un formulario de búsqueda en caso que las personas se acuerden de eventos pasados para buscarlos y pues cada resultado un link de edición con el formulario que se use para la creación de eventos, en donde imagino ya se tiene la parte de agregarle partes al mismo

Y como se supone que cada persona hace parte de una única familia,
pues haciendo el query que los une ya filtraría correctamente
(Sin embargo, en este mundo loco hay familias compuestas no?
Pero pues para la aplicación imagino que entra cada familia con sus integrantes por aparte, jajaja, loqueras mías no más)

Espero con esto haber dado otro lazo, vamos a ver si te sirve.

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 13/05/2013, 06:00
 
Fecha de Ingreso: mayo-2013
Mensajes: 10
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Carga de datos múltiples en ventana pop up

Muchas gracias!

Tengo que masticar un poco lo que me has dicho, así que me tomaré un tiempo para digerirlo y ver qué sale (en el buen sentido, se entiende!!!).

En principio demos por cerrado el hilo para no molestar, de surgir algo abro un nuevo hilo.

De nuevo mil gracias por la predisposición y la paciencia!

Un abrazo,

Alejandro

Etiquetas: mysql, pop, registro, tabla, ventana
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:37.