Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/08/2011, 14:14
Yhoni
 
Fecha de Ingreso: mayo-2009
Mensajes: 10
Antigüedad: 15 años
Puntos: 3
Respuesta: Como ejecutar un while dentro de un while

Estimado compañero, me gustaría agradecerte lo primero el tiempo que ya has dedicado a leer y a entender el objetivo del código y agradecerte de ante mano todas las sugerencias del post.
Cita:
Iniciado por vgonga1986 Ver Mensaje
Buenas,
A ver, primero el código. Según pones ahí, no sé si esa función sigue o no, no tiene mucho sentido asignar $tabla = horarios ($sql1,$dia); ya que la función hace echo directamente, no tiene un return de la tabla, sino que la imprime directamente. No sé si es el problema, pero puede ser, date cuenta que cuando haces echo de $dia, primero te imprime todos los días y luego la tabla. Es decir, que primero hace el bucle entero y luego imprime la tabla de la primera iteración. No tiene sentido!!!!!
He probado a eliminar la $tabla pero sigue ejecutándose el bucle while de la función una sola vez.
Desde mi desconocimiento también me llama mucho la atención que se ejecute primero los días y luego la tabla de la función. ¿ alguien sabe cual puede ser el motivo?
Cita:
Iniciado por vgonga1986 Ver Mensaje
En segundo lugar, creo que tu código, aunque no está mal, no es muy bueno:
Para mi esas palabras, auque no lo creas, suenan a gloria ya que es la primera función que programo yo mismo.
Cita:
Iniciado por vgonga1986 Ver Mensaje
- Primero, la estructura de la base de datos, creo que debes pensarla mejor. Qué vas poner un horario para cada día en la tabla horario?
En este caso, las pistas de tenis tienen siempre el mismo horario para poder reservarlas por lo que he creado una tabla que tenga tres campos:
Cita:
-id_horario
-horario (varchar) ejemplo de un campo seria: 09:00/10:15 , otro sería: 10:15/11:30 etc.
-Id_pista
Cita:
Iniciado por vgonga1986 Ver Mensaje
Es decir, cómo vas a controlar si está reservado o no? Si un usuario reserva para las 9 del día 12 y otro para las 9 del día 13 cómo lo guardas? En reserva sólo tienes horario y pista... y la fecha?
Realmente demuestras que tienes mucho conocimiento sobre lo que hablas descubriendo un error que yo cometí al explicar como tenía creadas las tablas, y pido perdón por haceros perder tiempo y no fijarme que la info del primer post era incompleta, las tablas que tengo actualmente preparadas son:
Cita:
tabla_pistas: id_pista, numero_pista
tabla_horarios: id_horario, horario,id_pista
tabla_reservas: id_reserva, fecha(formato:DATE), id_horario
Quizás estén incompletas para llegar al objetivo final que es mostrar la tabla de reservas coloreada si la hora está reservada pero me conformaba de momento con que el while de la función “horarios” ejecutara el bucle como debería.
Cita:
Iniciado por vgonga1986 Ver Mensaje
- Tu función horarios hace un if para cada pista hasta id_pista == 3. Y si mañana pones una pista nueva? Tienes que cambiar la función, eso no es modular.
No entiendo exactamente lo que significa que “no es modular” pero imagino que te refieres a que estaré obligado a modificar esa función cada vez que añada una pista nueva y la verdad que tienes toda la razón pero una vez que se ejecute el bucle del while de la función “horarios” te haré caso y continuaré puliendo el código todo lo que pueda.
Cita:
Iniciado por vgonga1986 Ver Mensaje
- La sentencia $sql1 hace un select de todos los campos de tabla_horarios, pero luego haces el fetch y crees que tiene dentro $valores['id_pista'], esto está mal, ya que id_pista no es de la tabla horarios.
Tienes toda la razón y una vez más demuestras que tienes muy claro por donde te mueves y destapas una vez más el error que cometí escribiendo información incompleta de las tablas en el primer post, reitiero mis disculpas y siento el tiempo que hayais perdido por mi culpa.
Cita:
Iniciado por vgonga1986 Ver Mensaje
- Los campos de las tablas no creo que sean muy acertados. Guardar horas en formato varchar me parece un error de concepto. Lo suyo sería que guardaras la hora de inicio en un TIMESTAMP y crearas otro campo para la duración, así además, podrías hacer reservas de media hora, por ejemplo.
Una vez más agradezco tus sugerencias y sobre el formato “varchar” que utilizé en los campos de los horarios como expliqué más arriba lo hize porque los horarios de reserva de cada pista son inamovibles y tienen el formato a mostrar en la tabla final:
Código:
28
29
30
31
                       Mes de Marzo

	      Pista1  	Pista2       Pista3
Dia 27	09:00/10:15	09:30/10:45	10:00/11:15	
	10:15/11:30	10:45/12:00	11:15/12:30	
	11:30/12:45	12:00/13:15	12:30/13:45	
	12:45/14:00	13:15/14:30	13:45/15:00	
	14:00/15:15	14:30/15:45	15:00/16:15	
	15:15/16:30	15:45/17:00	16:15/17:30	
	16:30/18:00	17:00/18:30	17:30/19:00	
	18:00/19:30	18:30/20:00	19:00/20:30	
	19:30/21:00	20:00/21:30	20:30/22:00	
	21:00/22:30	21:30/23:00	22:00/23:30	
	22:30/24:00	23:00/24:30
Cita:
Iniciado por vgonga1986 Ver Mensaje
En fin, espero que soluciones el tema que preguntas, pero yo le pegaría un gran repaso a todo lo demás. No te lo tomes a mal, pero tienes muchos detalles de concepto.
Un saludo.
No me tomo nada a mal y no te imaginas lo que te agradezco el tiempo que dedicas y las sugerencias que me haces y que me enseñan donde están los errores y donde se puede mejorar el código.

Gracias mil a vgonga1986 y a todos los que pasais por el post para interesaros

Última edición por Yhoni; 02/08/2011 a las 14:20