Ver datos de una base de datos en tiempo real

Estoy trabajando en un sitio que se compone de varias páginas de esta manera
La primera página ingresa los datos de personas y todos los registros ingresados tienen un campo estado char(1) que por defecto es 'P'. Estos datos se ingresan a la base de datos mediante un insert
La segunda página muestra una lista de las personas ingresadas pero solo con estado 'P' mediante un mysql_query... Aquí el problema, que para mostrar las personas nuevas ingresadas. Tengo que recargar la página y quisiera algo tipo twitter. Que se vayan desplegando en tiempo real las nuevas personas ingresadas para no estar recargando hasta el fin de los tiempos.

1 Respuesta

Respuesta
1
Hay dos formas de hacerlo, una más sencilla y otra más complicada (mucho más complicada).
La primera es, recargar la página, no sé como lo estás haciendo ahora, se puede hacer de varias formas:
setTimeout("location.reload()", 5000); (Esto en en Javascript, se recargaría cada 5 segundos)
<meta http-equiv="refresh" content="5" />
(Lo puedes poner así en el "head", también recargaría cada 5 segundos)
Hay varias formas más.
Si quieres que se recargue solo la parte donde muestras la base, puedes meterla en un frame o mejor en un iframe, así solo se recarga el contenido del iframe y no toda la página.
Si ya lo quieres hacer bien, te tienes que meter en Ajax, y no es sencillo, bueno, no tan sencillo como lo que te he expuesto antes.
Puedes mirar por ejemplo (está en inglés, pero si sabes de programación no te será complicado entenderlo, y hace lo que tu necesitas) :
http://api.jquery.com/load/
JQuery puede ayudarte mucho en esos temas. Es complicado explicártelo aquí, pero tienes un montón de información en la red sobre JQuery y su función "load".
Por ejemplo, aquí ves como con 4 líneas de código puedes refrescar un div, un frame, cualquier elemento que pueda contener un "id":
http://blog.mediasoft.be/partial-page-refresh-with-ajax-and-jquery/
Este otro ejemplo es en Ajax, si lo estudias un poco verás que básicamente siempre es lo mismo, así que no tardarás en hacerte con el para pequeñas cosas:
http://www.pcimpacto.com.ar/informacion.php?id=45
Me parece interesante la opción de recargar un frame cada cierto tiempo, pero ocurre que esa página tiene opciones, como cambiar el estado de las personas mediante botones y otras opciones que requieren popups y si la recargo cada 5seg se perderán los cambios si no me equivoco
La página que se recarga no puede tener configuraciones o formularios o similares, solo mostrar información. Al recargarla cada por tiempo, solo recargas ese iframe, por lo que lo que estés haciendo en el resto de la página no se ve afectado, y si cambias el estado de las personas en el iframe aparecerán los datos actualizados, que es lo que quieres.
No sé cual es tu distribución, pero en la página en la que muestres las opciones de las distintas personas o la de insertar, si quieres que se vean los datos actualizados lo puedes poner así:
Body pagina1
Menu
Datos a ingresar o cambios de estado
Iframe conteniendo pagina2
Fin body página 1
Head pagina2
Refrescar cada por tiempo
Fin head página 2
Body pagina2
Mostrar datos de la base
Fin body pagina2
Aquí está una captura de como voy realizando la página hasta el momento

Aún es muy sencillo, pero desearía que te fijaras en el modelo que estoy pensando usar, no se si lo encuentres bien o si podrías sugerirme alguna mejor manera.
Lo que se actualizaría constantemente son la lista de pacientes, pero como me expliqué anteriormente, al hacer un frame de esta página y recargarla constantemente, supongo que esto provocará la pérdida de datos ingresados... como la receta. O en otro caso hará que si el médico está revisando la lista de pacientes, al recargar la página constantemente esto provocaría que el usuario pierda el punto donde se encontraba, ya sea viendo el turno de algún paciente o algo por el estilo.
Aclaro que aún falta una columna donde insertaré una opción para añadir receta, esto se hará también mediante un popup y este popup tendrá una opción para listar los medicamentos disponibles(eso es otro tema)
Gracias por tu ayuda
Está claro que lo mejor sería hacerlo en Ajax, pero se te complicaría mucho la cosa.
De todas formas, según lo tienes, no pasa nada por refrescar, no afecta a los cambios, es decir:
- Veo la lista, paciente, si está atendido o no (lo ordenaría con los no atendidos primero), botón para ver detalles, etc.
- Si pulso sobre el botón de ver detalles, la página se sigue refrescando por detrás, pero ya estoy en una nueva página que me muestra información adicional y a la que no le afecta el refresco.
- Si pulso sobre el botón de cambiarlo de estado ha atendido, se abre una ventana que es la que maneja la base de datos y cambia ese estado, tampoco le afecta el refresco, cuando cambie el estado del paciente y cierre esa ventana aparecerá actualizado.
- Con las recetas lo mismo, siempre y cuando cada acción que hagas la hagas como dices, con un pop-up, o sea, en una nueva ventana.
El problema esa la especialidad, no puede estar en la misma ventana porque ahí si que puede tener problemas al seleccionarla, que abra el desplegable y antes de elegir se le refresque. Así que sería así:
Body
Selección de especialidad
Iframe lista de pacientes de esa especialidad que se refresca
Cierras body
Pero creo que quedaría mejor si en toda la pantalla aparecen los datos del paciente donde actualizar el historial, ver la recetas que se le han emitido o meter nuevas, cambiar estado de no atendido ha atendido etc. Vamos, un formulario.
Debajo, o en un lateral, el nombre del paciente con un icono verde si está atendido o rojo si no lo está, que es la zona que se refrescará, y al pulsar sobre un paciente (que es un enlace que pasa como parámetro el id del paciente) se abre su ficha en el panel principal.
Es más elegante que los pop-up. Algo así:

Para consultas sobre otros detalles te agradecería que cerrases un pregunta antes de hacer una nueva, si no no me entran nuevas preguntas por tener muchas abiertas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas