Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/02/2012, 01:11
Avatar de repara2
repara2
 
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Calendario semanal y Mysql

ok, si miras un poco el script, verás un par de cosas. Te hago un ejemplo más fácil para que veas como se hace la tabla:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $dias = array('L', 'M', 'X', 'J', 'V');
  4. $horas = array(9,10,11,12,13,14,15,16);
  5.  
  6. $table = "<table border='1'>";
  7. $table .= "<tr bgcolor='#CCCCCC'>";
  8. $table .= "<td></td>"; //Extremo sup izq
  9. foreach($dias as $dia)
  10. {
  11.     $table .= "<td>$dia</td>";
  12. }
  13. $table .= "</tr>"; //Fin fila inicial dias
  14. foreach($horas as $hora)
  15. {//En estas filas vacias van las citas
  16. $table .= "  <tr>
  17.    <td bgcolor='#CCCCCC'>$hora</td>
  18.    <td>&nbsp;</td>
  19.    <td>&nbsp;</td>
  20.    <td>&nbsp;</td>
  21.    <td>&nbsp;</td>
  22.    <td>&nbsp;</td>
  23.  </tr>";
  24. }
  25. $table .= "</tr>"; //Fin fila inicial dias
  26.  
  27. echo $table;
  28.  
  29. ?>

Hasta aquí, es lo mismo que tienes tú, faltan las citas.
Entonces:
1. Las citas van en el sitio indicado pero te falta una relación o dependencia entre dia / hora / cita. Cómo sabes qué cita va en cada dia / hora??: Respuesta: depende de lo que traiga la consulta, en el post no lo pones, pero para que funcione, cada registro de cita debe tener una referencia de dia, hora y text, como mínimo. Sabiendo esto entonces puedes poner cada cita en su lugar.
2. La
Código SQL:
Ver original
  1. SELECT: SELECT * FROM ....
no parece muy apropiada. Si quieres mostrar una semana, coloca un WHERE... para consultar sólo la semana que te interesa. Según tu propio ejemplo, el número de la semana que el usuario quiere ver viene en $_GET['wk'], por tanto realiza la consulta como:
Código SQL:
Ver original
  1. SELECT * FROM citas WHERE semana = '".$_GET['wk']."'
o lo que corresponda a tu esquema de BD.
3. Modifica la consulta para que cada registro de cita tenga la información de día y hora. Para esto deberás trabajar con los dias como enteros y no como caracteres. Ejemplo completo:



Código PHP:
Ver original
  1. <?php
  2. ini_set("display_errors", 1);
  3.  
  4. $dias = array(0 => 'L', 1 => 'M', 2 => 'X', 3 => 'J', 4 => 'V');
  5. $horas = array(9,10,11,12,13,14,15,16);
  6. //Supuesto resultado de la base de datos
  7. //Cita = array(dia, hora, texto);
  8. $citas = array(
  9. 0 => array(0 => 0, 1 => 9, 2 => 'Estudiar PHP'),
  10. 1 => array(0 => 1, 1 => 10, 2 => 'Compras'),
  11. 2 => array(0 => 1, 1 => 11, 2 => 'Reunion'),
  12. 3 => array(0 => 2, 1 => 9, 2 => 'Dormir'),
  13. 4 => array(0 => 3, 1 => 13, 2 => 'Estudiar MySQL'),
  14. 5 => array(0 => 3, 1 => 14, 2 => 'Cenar'),
  15. 6 => array(0 => 4, 1 => 9, 2 => 'Nada'),
  16. );
  17.  
  18. $table = "<table border='1'>";
  19. $table .= "<tr bgcolor='#CCCCCC'>";
  20. $table .= "<td></td>"; //Extremo sup izq
  21. foreach($dias as $dia)
  22. {
  23.     $table .= "<td>$dia</td>";
  24. }
  25. $table .= "</tr>"; //Fin fila inicial dias
  26.  
  27.  
  28. foreach($horas as $hora)
  29. {//En estas filas vacias van las citas
  30. $table .= "  <tr>
  31.    <td bgcolor='#CCCCCC'>$hora</td>";
  32. //Una  celda por dia
  33. for($i = 0; $i<count($dias); $i++)
  34. {
  35.     $table .="<td>";
  36.     //POr cada cita, comprobar que hay coincidencia
  37.     foreach($citas as $index => $cita){
  38.         if($cita[0] == $i && $cita[1] == $hora)
  39.         {//Hay coincidencia, imprimir el texto
  40.         $table .= $cita[2];
  41.         }
  42.         else $table .= "&nbsp;";
  43.     }
  44.     $table .= "</td>";
  45.    
  46. }
  47.  
  48. }//Horas
  49. $table .= "</tr>"; //Fin fila inicial dias
  50. $table .= "</table>";
  51. echo $table;
  52.  
  53. ?>



Espero que sirva, saludos
__________________
Fere libenter homines, id quod volunt, credunt.

Última edición por repara2; 03/02/2012 a las 01:20 Razón: Agregado ejemplo