Hola yebert:
Pense que la tabla estaba dispuesta de arriba hacia abajo porque el ancho es de 20%:
Código PHP:
Ver originalecho "<table width='20%' border='1' align='center'cellpadding='2' cellspacing='0'>";
Entonces yo diria que el ancho de la tabla deberia ser por ejemplo:
Código PHP:
Ver originalecho "<table width='800px' border='1' align='center'cellpadding='2' cellspacing='0'>";
Luego tenes que, la estructura de la tabla dentro del ciclo 'for' te genere una nueva tabla por cada valor de $i.
Entonces habria que sacar la mayor cantidad de <tags> posibles de los ciclos 'for'
Código PHP:
Ver originalecho "<table width='800px' border='1' align='center'cellpadding='2' cellspacing='0'>";
echo "<tr width='780px'>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>LUNES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MARTES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MIERCOLES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>JUEVES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>VIERNES</div></td>";
echo "</tr>";
echo "<tr width='780px' border='1'cellpadding='1' cellspacing='1'>";
Como veras he sacado toda la fila con los nombres de dias que no es contenido dinamico y tambien he puesto un <tr> de apertura para una nueva fila.
He tratado de darle un ancho fijo a cada celda para que sea mas ordenado, quitando los
que no tienen sentido.
Al final de los ciclos 'for' cierro la fila y la tabla para que no entren en el rulo
Hasta aqui todo al pelo quedaria mas o menos asi:
Código PHP:
Ver originalecho "<table width='800px' border='1' align='center'cellpadding='2' cellspacing='0'>";
echo "<tr width='780px'>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>LUNES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MARTES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MIERCOLES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>JUEVES</div></td>";
echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>VIERNES</div></td>";
echo "</tr>";
echo "<tr width='780px' border='1'cellpadding='1' cellspacing='1'>";
for ($i=1;$i<=5;$i++) {//con este for le damos el valor a las horas en una columna
for ($j=0;$j<=4;$j++) {//con este recuperamos la informacion del arreglo y la llamamos el registro que nos interesa
if ($inf[$j]['dia'] == $i)
{//mostramos el valor
echo "<td style='width:150px; background:#E3E9F1'>";
if($inf[$j]['h_entrada']==''){ echo "LIBRE";}else {echo $inf[$j]['h_entrada']." - ";}
if($inf[$j]['h_salida']==''){ echo "LIBRE";}else {echo $inf[$j]['h_salida']."<br>";}
if($inf[$j]['materia']==''){ echo "LIBRE";}else {echo $inf[$j]['materia']."<br>";}
if($inf[$j]['grado']==''){ echo "LIBRE";}else {echo $inf[$j]['grado']." - ";}
if($inf[$j]['seccion']==''){ echo "LIBRE";}else {echo $inf[$j]['seccion']." - ";}
if($inf[$j]['aula']==''){ echo "LIBRE";}else { echo $inf[$j]['aula']."";}
echo "</td>";
}
}
} echo "</tr>";
echo "</table>";
El problema surge cuando se completa la primera fila en la columna del dia viernes y debe generarce una nueva fila empezando por la columna del dia Lunes
Si a $j lo establecemos en <= 4
te completa la primera fila hasta el dia viernes.
Pero si establecemos $j en <= 5 nos agrega una columna fuera de la tabla en la misma fila y asi con todo valor de $j mayor que 4.
Para evitar esto se me acurrio hacer bloques de codigo donde el valor de $j este en un rango que valla de 5 en 5.
Por ejemplo:
Primer bloque:
Código PHP:
Ver originalfor ($i=1;$i<=5;$i++) {//con este for le damos el valor a las horas en una columna
for ($j=0;$j<=4;$j++) {//con este recuperamos la informacion del arreglo y la llamamos el registro que nos interesa
if ($inf[$j]['dia'] == $i)
{//mostramos el valor
//echo "</tr>";
echo "<td style='width:140px; background:#E3E9F1'>";
if($inf[$j]['h_entrada']==''){ echo "LIBRE";}else {echo $inf[$j]['h_entrada']." - ";}
if($inf[$j]['h_salida']==''){ echo "LIBRE";}else {echo $inf[$j]['h_salida']."<br>";}
if($inf[$j]['materia']==''){ echo "LIBRE";}else {echo $inf[$j]['materia']."<br>";}
if($inf[$j]['grado']==''){ echo "LIBRE";}else {echo $inf[$j]['grado']." - ";}
if($inf[$j]['seccion']==''){ echo "LIBRE";}else {echo $inf[$j]['seccion']." - ";}
if($inf[$j]['aula']==''){ echo "LIBRE";}else { echo $inf[$j]['aula']."";}
echo "</td>";
}
}
}
Agregamos un cierre de fila y un apertura de fila:
Código PHP:
Ver originalecho "</tr>";
echo "<tr width='780px' border='1'cellpadding='1' cellspacing='1'>";
Segundo bloque:
Código PHP:
Ver originalfor ($i=1;$i<=5;$i++) {//con este for le damos el valor a las horas en una columna
for ($j=5;$j<=9;$j++) {//con este recuperamos la informacion del arreglo y la llamamos el registro que nos interesa
if ($inf[$j]['dia'] == $i)
{//mostramos el valor
//echo "</tr>";
echo "<td style='width:140px; background:#E3E9F1'>";
if($inf[$j]['h_entrada']==''){ echo "LIBRE";}else {echo $inf[$j]['h_entrada']." - ";}
if($inf[$j]['h_salida']==''){ echo "LIBRE";}else {echo $inf[$j]['h_salida']."<br>";}
if($inf[$j]['materia']==''){ echo "LIBRE";}else {echo $inf[$j]['materia']."<br>";}
if($inf[$j]['grado']==''){ echo "LIBRE";}else {echo $inf[$j]['grado']." - ";}
if($inf[$j]['seccion']==''){ echo "LIBRE";}else {echo $inf[$j]['seccion']." - ";}
if($inf[$j]['aula']==''){ echo "LIBRE";}else { echo $inf[$j]['aula']."";}
echo "</td>";
}
}
}
Donde notaras que el valor de $j en el ciclo for esta entre 5 y 9
Podria mejorar esto con una funcion que nos genere cada bloque con su correspondiente rango de $j asi no tener que escribir tanto.
Me gustaria saber si con los valores de tu base de datos te muestra los datos correctamente.
Para probar el codigo cree un array simulando los datos a mostrar, lo cual puede que en la practica real no funcione. Vos me diras si es asi.
Como comentario final estuvo interesante el problema de generar una tabla con datos de base de datos.
Espero que funcione y haber podido se util.