Foros del Web » Programando para Internet » PHP »

Problema con calendario php y datos de mysql

Estas en el tema de Problema con calendario php y datos de mysql en el foro de PHP en Foros del Web. Saludos a todos, estoy intentando usar un calendario que conseguí acá en el foro para un sistema que estoy haciendo, la idea es que de ...
  #1 (permalink)  
Antiguo 16/05/2010, 18:22
 
Fecha de Ingreso: agosto-2009
Mensajes: 59
Antigüedad: 14 años, 8 meses
Puntos: 0
Problema con calendario php y datos de mysql

Saludos a todos, estoy intentando usar un calendario que conseguí acá en el foro para un sistema que estoy haciendo, la idea es que de un select selecciones el mes a consultar y al cambiar el script seleccione de la BD ese mes, hasta ahi todo bien.

El problema surge debido a que el debe representar el dia y al lado el esatus de esa persona para ese día, si estaba libre, ausente, presente, de permiso, etc.

cuando hago el bucle en la BD para que me lo muestre así lo que hace es repetirme 31 veces el calendario en vez de ubicarme cada dia con el estatus que corresponde.

La tabla en la BD se llama asistencia y utilizo dos campos para representar esto, son fechados y estatus

Fechados almacena la fecha en este formato: 01012010 y estatus bueno es obvio cual es su contenido, acá les dejo el codigo que estoy usando y no sirve.

Código Javascript:
Ver original
  1. <script>
  2. var vacia = "T02";
  3.  
  4. function cambiames(){
  5.    document.mesa.action = "mes_asistencia.php";
  6.    document.mesa.mes.value = vacia;
  7.    document.mesa.submit()
  8. }  
  9. </script>


Código PHP:
Ver original
  1. <?php
  2.  function DiaSemana($dia,$mes,$ano){
  3.   $numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
  4.   if($numerodiasemana == 0){ $numerodiasemana = 6; } else { $numerodiasemana--; }
  5.   return $numerodiasemana;
  6. }  
  7.  
  8. function NombreMes($mes){
  9.   switch ($mes){
  10.    case 1:  $nombre = "Enero";  break;
  11.    case 2:  $nombre = "Febrero";  break;
  12.    case 3:  $nombre = "Marzo";  break;
  13.    case 4:  $nombre = "Abril";  break;
  14.    case 5:  $nombre = "Mayo";  break;
  15.    case 6:  $nombre = "Junio";  break;
  16.    case 7:  $nombre = "Julio";  break;
  17.    case 8:  $nombre = "Agosto";  break;
  18.    case 9:  $nombre = "Septiembre";  break;
  19.    case 10: $nombre = "Octubre";  break;
  20.    case 11: $nombre = "Noviembre";  break;
  21.    case 12: $nombre = "Diciembre";  break;
  22.   }
  23.   return $nombre;
  24. }  
  25.  
  26. function ultimoDia($mes,$ano){
  27.   $ultimo_dia=28;
  28.   while (checkdate($mes,$ultimo_dia + 1,$ano)){ $ultimo_dia++; }
  29.   return $ultimo_dia;
  30. }  
  31.  
  32. function Calendar($mes,$ano){
  33.   $nombremes = NombreMes($mes);
  34.   $mes_anterior = $mes - 1;
  35.   $ano_anterior = $ano;
  36.   if ($mes_anterior == 0){
  37.    $ano_anterior--;
  38.    $mes_anterior = 12;
  39.   }
  40.   $mes_siguiente = $mes + 1;
  41.   $ano_siguiente = $ano;
  42.   if ($mes_siguiente==13){
  43.    $ano_siguiente++;
  44.    $mes_siguiente=1;
  45.   }
  46.  
  47.   ?>

Código HTML:
Ver original
  1. <form name="mesa" id="mesa" method="post">
  2.    <select name="mes" id="mes" onchange="cambiames()"><option selected><?php echo $nombremes; ?></option>
  3.    <option value="Enero">Enero</option>
  4.    <option value="Febrero">Febrero</option>
  5.    <option value="Marzo">Marzo</option>
  6.    <option value="Abril">Abril</option>
  7.    <option value="Mayo">Mayo</option>
  8.    <option value="Junio">Junio</option>
  9.    <option value="Julio">Julio</option>
  10.    <option value="Agosto">Agosto</option>
  11.    <option value="Septiembre">Septiembre</option>
  12.    <option value="Octubre">Octubre</option>
  13.    <option value="Noviembre">Noviembre</option>
  14.    <option value="Diciembre">Diciembre</option>
  15.    </select>
  16.    </form>
  17.  
  18.    <table align="center" border="1" cellpadding="1" cellspacing="1" width="650">


Código PHP:
Ver original
  1. <?php
  2. require('conexion.php');
  3. $ssql = "SELECT fechados FROM asistencia WHERE cirac='16445732' and fechados BETWEEN '01012010' and '31012010'";
  4. $rss = mysql_query($ssql,$conn);
  5.  
  6. if (mysql_num_rows($rss)!=0){
  7.  
  8. while($row = mysql_fetch_array($rss)) {
  9.  
  10. $fechados = $row["fechados"];
  11.  
  12.  
  13.  
  14.   echo "<tr>";
  15.   echo "<td align='center' bgcolor='#F0F8FE'>Domingo</td>";
  16.   echo "<td align='center' bgcolor='#F0F8FE'>Lunes</td>";
  17.   echo "<td align='center' bgcolor='#F0F8FE'>Martes</td>";
  18.   echo "<td align='center' bgcolor='#F0F8FE'>Mi&eacute;rcoles</td>";
  19.   echo "<td align='center' bgcolor='#F0F8FE'>Jueves</td>";
  20.   echo "<td align='center' bgcolor='#F0F8FE'>Viernes</td>";
  21.   echo "<td align='center' bgcolor='#F0F8FE'>S&aacute;bado</td>";
  22.   echo "</tr>";
  23.   $dia_actual = 1;
  24.   $numero_dia = DiaSemana(1,$mes,$ano);
  25.   $ultimo_dia = ultimoDia($mes,$ano);
  26.   $diaact = date("d");
  27.   $mesact = date("m");
  28.   $anoact = date("Y");
  29.  
  30.  
  31. $csql = "SELECT estatus FROM asistencia where fechados='$fechados' and cirac='16445732'";
  32. $ress = mysql_query($csql,$conn);                  
  33. if (mysql_num_rows($ress)!=0){
  34. while($row = mysql_fetch_array($ress)) {
  35. $estatus1 = $row['estatus'];
  36.   echo "<tr>";
  37.   for($i=-1;$i<6;$i++){
  38.    if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){
  39.     $bgcolor = "#F0F8FE";
  40.    }elseif(($dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){
  41.     $bgcolor = "#D8D8D8";
  42.    }elseif ($mes>$mesact){
  43.     $bgcolor = "#D8D8D8";
  44.    }
  45.    if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){
  46.     $enlace = "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id()."";
  47.    }else{
  48.     $enlace = "";
  49.    }
  50.    if($i < $numero_dia){
  51.     echo "<td class='calendar' bgcolor='#D8D8D8'>&nbsp;</td>";
  52.    }else{
  53.     echo "<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>";
  54.     $dia_actual++;
  55.    }
  56.   }
  57.   echo "</tr>";
  58.   $numero_dia = 0;
  59.   while($dia_actual <= $ultimo_dia){
  60.    if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){
  61.     $bgcolor = "#F0F8FE";
  62.    }elseif(($dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){
  63.     $bgcolor = "#D8D8D8";
  64.    }elseif ($mes>$mesact){
  65.     $bgcolor = "#D8D8D8";
  66.    }
  67.    if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){
  68.     $enlace = "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id()."";
  69.    }else{
  70.     $enlace = "";
  71.    }
  72.    if ($numero_dia == 0)
  73.     echo "<tr>";
  74.     echo "<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."<br>".$estatus1."</span></a></td>";
  75.     $dia_actual++;
  76.     $numero_dia++;
  77.     if ($numero_dia == 7){
  78.      $numero_dia = 0;
  79.      echo "</tr>";
  80.     }
  81.    }
  82.   for ($i=$numero_dia;$i<7;$i++){
  83.    echo "<td bgcolor='#D8D8D8'>&nbsp;</td>";
  84.   }
  85.   echo "</tr>";
  86. }  
  87.  
  88.     }
  89.  
  90. }
  91.    }
  92.  
  93. }
  94.  
  95. $mes = isset($_GET['mes'])?$_GET['mes']:date("m");
  96.  $ano = isset($_GET['ano'])?$_GET['ano']:date("Y");
  97.  Calendar($mes,$ano);  
  98.  
  99. ?>

Código HTML:
Ver original 

Espero me puedan ayudar porque de verdad no consigo como acomodarlo.

Muchas gracias
  #2 (permalink)  
Antiguo 16/05/2010, 18:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 59
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema con calendario php y datos de mysql

Ya lo resolví ahora el problema me viene con el between, le digo que me seleccione solo el rango del 21012010 al 22012010 y me esta seleccionando todo esto

21092009
21102009
21112009
21122009
21012010
22012010
21092009
21102009
21112009
21122009
21012010
22012010
21092009
21102009
21112009
21122009
21012010
22012010
21092009
21102009
21112009
21122009
21012010
22012010
21092009
21102009
21112009
21122009
21012010
22012010

si me pudieran hechar una mano se los agradecería.
  #3 (permalink)  
Antiguo 16/05/2010, 19:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con calendario php y datos de mysql

Como almacenas las fechas? mysql tiene opcion para campos tipo DATE.

Si el campo no es tipo DATE, 21092009 es mayor que 21012010 y por eso aparece en los resultados de tu consulta, en todo caso, en lugar de almacenar ddmmaaaa deberias usar aaaammdd o, mucho mejor, el timestamp correspondiente a cada fecha (numerico, 10 digitos) que obtienes con strtotime().
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 16/05/2010, 19:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 59
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema con calendario php y datos de mysql

Muchas gracias por tu respuesta, lo que sucede es que para agregar las listas de asistencia se usa un calendario en javascript y el almacena la fecha de esa forma, ahora si entiendo porque ese error, muchas gracias

Etiquetas: calendario, mysql
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 20:50.