Foros del Web » Programando para Internet » PHP »

Calendario en php que toma datos de una base de datos mysql

Estas en el tema de Calendario en php que toma datos de una base de datos mysql en el foro de PHP en Foros del Web. Hola señores. Tengo un problemilla con un código. Me bajé un calendaio sencillo en php que tengo que mostrar en una página. Todo bien hasta ...
  #1 (permalink)  
Antiguo 16/06/2010, 11:29
 
Fecha de Ingreso: julio-2008
Ubicación: Ruiz - Nayarit - México
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Sonrisa Calendario en php que toma datos de una base de datos mysql

Hola señores. Tengo un problemilla con un código.

Me bajé un calendaio sencillo en php que tengo que mostrar en una página. Todo bien hasta aqui, me lo imprime bien y me marca el dia actual en otro color.

Lo que quise es hacerlo que interactue con la base de datos para publicar una reunion segun la fecha que queda en la base de datos. Todo funciona bien siempre y cuando tenga una sola reunion en un mes. El problema es que en otros meses hay mas de una reunión y como uso ciclos me imprime solo la fecha de la última reunión, porque fue el resultado de la última vuelta.

Aqui les paso el código para ver si me pueden ayudar:

Código PHP:
<?
include("includes/conexion.php");
$tipo_semana 1;
$tipo_mes 0;

$MESCOMPLETO[1] = 'Enero';
$MESCOMPLETO[2] = 'Febrero';
$MESCOMPLETO[3] = 'Marzo';
$MESCOMPLETO[4] = 'Abril';
$MESCOMPLETO[5] = 'Mayo';
$MESCOMPLETO[6] = 'Junio';
$MESCOMPLETO[7] = 'Julio';
$MESCOMPLETO[8] = 'Agosto';
$MESCOMPLETO[9] = 'Septiembre';
$MESCOMPLETO[10] = 'Octubre';
$MESCOMPLETO[11] = 'Noviembre';
$MESCOMPLETO[12] = 'Diciembre';

$MESABREVIADO[1] = 'Ene';
$MESABREVIADO[2] = 'Feb';
$MESABREVIADO[3] = 'Mar';
$MESABREVIADO[4] = 'Abr';
$MESABREVIADO[5] = 'May';
$MESABREVIADO[6] = 'Jun';
$MESABREVIADO[7] = 'Jul';
$MESABREVIADO[8] = 'Ago';
$MESABREVIADO[9] = 'Sep';
$MESABREVIADO[10] = 'Oct';
$MESABREVIADO[11] = 'Nov';
$MESABREVIADO[12] = 'Dic';

$SEMANACOMPLETA[0] = 'Domingo';
$SEMANACOMPLETA[1] = 'Lunes';
$SEMANACOMPLETA[2] = 'Martes';
$SEMANACOMPLETA[3] = 'Miércoles';
$SEMANACOMPLETA[4] = 'Jueves';
$SEMANACOMPLETA[5] = 'Viernes';
$SEMANACOMPLETA[6] = 'Sábado';

$SEMANAABREVIADA[0] = 'Dom';
$SEMANAABREVIADA[1] = 'Lun';
$SEMANAABREVIADA[2] = 'Mar';
$SEMANAABREVIADA[3] = 'Mie';
$SEMANAABREVIADA[4] = 'Jue';
$SEMANAABREVIADA[5] = 'Vie';
$SEMANAABREVIADA[6] = 'Sáb';

////////////////////////////////////
if($tipo_semana == 0){
$ARRDIASSEMANA $SEMANACOMPLETA;
}elseif(
$tipo_semana == 1){
$ARRDIASSEMANA $SEMANAABREVIADA;
}
if(
$tipo_mes == 0){
$ARRMES $MESCOMPLETO;
}elseif(
$tipo_mes == 1){
$ARRMES $MESABREVIADO;
}

if(!
$dia$dia date(d);
if(!
$mes$mes date(n);
if(!
$ano$ano date(Y);

$mes=intval($mes);
$TotalDiasMes date(t,mktime(0,0,0,$mes,$dia,$ano));
$DiaSemanaEmpiezaMes date(w,mktime(0,0,0,$mes,1,$ano));
$DiaSemanaTerminaMes date(w,mktime(0,0,0,$mes,$TotalDiasMes,$ano));
$EmpiezaMesCalOffset $DiaSemanaEmpiezaMes;
$TerminaMesCalOffset $DiaSemanaTerminaMes;
$TotalDeCeldas $TotalDiasMes $DiaSemanaEmpiezaMes $TerminaMesCalOffset;


if(
$mes == 1){
$MesAnterior 12;
$MesSiguiente $mes 1;
$AnoAnterior $ano 1;
$AnoSiguiente $ano;
}elseif(
$mes == 12){
$MesAnterior $mes 1;
$MesSiguiente 1;
$AnoAnterior $ano;
$AnoSiguiente $ano 1;
}else{
$MesAnterior $mes 1;
$MesSiguiente $mes 1;
$AnoAnterior $ano;
$AnoSiguiente $ano;
$AnoAnteriorAno $ano 1;
$AnoSiguienteAno $ano 1;
}

print 
"<table style=\"font-family:arial;font-size:13px\" bordercolor=\"#EEEEEE\" align=center border=0 cellpadding=1 cellspacing=1>";
print 
" <tr>";
print 
" <td colspan=10>";
print 
" <table border=0 align=center width=\"1%\" style=\"font-family:arial;font-size:14px\">";
print 
" <tr>";
print 
" <td width=\"1%\"><a href=\"$PHP_SELF?mes=$mes&ano=$AnoAnteriorAno\"><img src='imagenes/anio_atras.gif' border=0></a></td>";
print 
" <td width=\"1%\"><a href=\"$PHP_SELF?mes=$MesAnterior&ano=$AnoAnterior \"><img src='imagenes/mes_atras.gif' border=0></a></td>";
print 
" <td width=\"1%\" colspan=\"1\" align=\"center\" nowrap><b>".$ARRMES[$mes]." de $ano</b></td>";
print 
" <td width=\"1%\"><a href=\"$PHP_SELF?mes=$MesSiguiente&ano=$AnoSiguiente\"><img src='imagenes/mes_sig.gif' border=0></a></td>";
print 
" <td width=\"1%\"><a href=\"$PHP_SELF?mes=$mes&ano=$AnoSiguienteAno\"><img src='imagenes/anio_sig.gif' border=0></td>";
print 
" </tr>";
print 
" </table>";
print 
" </td>";
print 
"</tr>";
print 
"<tr>";
foreach(
$ARRDIASSEMANA AS $key){
print 
"<td bgcolor=#ccccff><b>$key</b></td>";
}
print 
"</tr>";

$sql="select * from calendario_actas where mes=$mes and anio=$ano";
$result=mysql_query($sql,$conex);

while(
$reg=mysql_fetch_row($result))
{
for(
$a=1;$a <= $TotalDeCeldas;$a++)
{
    if(!
$b$b 0;
    if(
$b == 7$b 0;
    if(
$b == 0) print '<tr>';
    if(!
$c$c 1;
    if(
$a $EmpiezaMesCalOffset AND $c <= $TotalDiasMes)
    {
        if(
$c == date(d) && $mes == date(m) && $ano == date(Y))
        {
            if(
$c==$reg[1] or $c==$i)
                {
                    
$i=$reg[1];
                    print 
"<td bgcolor=#ffff00><a href='$reg[4]'><b>$c</a></b><br></td>";
                }
            else
            print 
"<td bgcolor=#ffcc99>$c<br></td>";
        }
        elseif(
$b == OR $b == 6)
        {
            if(
$c==$reg[1] or $c==$i)
                {
                    
$i=$reg[1];
                    print 
"<td bgcolor=#ffff00><a href='$reg[4]'><b>$c</a></b><br></td>";
                }
            else print 
"<td bgcolor=#99cccc>$c</td>";
        }
        else
        {
            if(
$c==$reg[1] or $c==$i)
                {
                    
$i=$reg[1];
                    print 
"<td bgcolor=#ffff00><a href='$reg[4]'><b>$c</a></b><br></td>";
                }
            else print 
"<td bgcolor=\"#EEEEEE\">$c</td>";
        }
        
$c++;
    }
    else
    {
        print 
"<td> </td>";
    }
    if(
$b == 6) print '</tr>';
    
$b++;
}
}
print 
$i;
print 
"<tr><td align=center colspan=10><a href='calendario.php'>Ir al dia de hoy</a></td></tr>";
print 
"</table>";
?>
Agradecería mucho si me ayudaran con ese problema.
  #2 (permalink)  
Antiguo 16/06/2010, 11:59
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Calendario en php que toma datos de una base de datos mysql

Hola
bueno, pues ayudaría que agregaras el sql con la creación e inserción de datos, pues en mi caso ando en otros foros y me rinde más si pones eso para montar y hacer pruebas directamente
mientras observacines, usas AND y &&, te recomiendo que uses solo una, y
generalmente se recomienda && porque a veces AND no respeta correctamente condiciones (casos excepcionales)
y veo que usas while y for, es necesario para tus fines, no puedes en uno solo (por ej el while) hacer
el proceso que necesitas? lo pregunto porque pues dos ciclos pueden retrasarte bastante el procesamiento
en caso que sean muchos datos
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 16/06/2010, 14:16
 
Fecha de Ingreso: julio-2008
Ubicación: Ruiz - Nayarit - México
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Calendario en php que toma datos de una base de datos mysql

Justamente es lo que quiero, un consejo de como evitar esos dos ciclos para dejar solo uno y haga lo que yo quiero. En cuanto a lo d ela base de datos es solo una tabla que te describo aqui:

Código PHP:
CREATE TABLE `calendario_actas` (
  `
idint(11NOT NULL auto_increment,
  `
diaint(11NOT NULL,
  `
mesint(11NOT NULL,
  `
anioint(11NOT NULL,
  `
linkvarchar(100NOT NULL,
  
PRIMARY KEY  (`id`)

Solo que aun no tengo un código para insertar los datos porque apenas lo voy empezando y los meto directamente en el http://localhost/phpmyadmin.

GRacias por la pronta respuesta.
  #4 (permalink)  
Antiguo 16/06/2010, 23:54
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Calendario en php que toma datos de una base de datos mysql

Hola ancortez
voy a permitirme quejarme del calendario que posteaste porque me parecio un asco, sin embargo me mate un buen tiempo tratando de entenderlo, y cambiandole cosas me termine estresando y borre ese adefesio
Respire, y bueno, pense que yo podía hacer uno que fuera un adefesio menor,
como resultado te voy a postear el código no sin antes hacerte algunas observaciones

0. hay muchos calendarios mejor estructurados y que consigues aquí en foros o en internet
1. las fechas podrían manejarse mejor en campos de fecha como tal
2. no confies en las modificaciones que hice, pues si bien pienso que mejoro bastante aún sigue usando cosas del anterior, y según veo faltan cosas, como por ejemplo pasar entre meses e incluso años! por eso recomiendo mejor otro calendario

aquí pues el resultado

Código PHP:
Ver original
  1. while($reg = mysql_fetch_row($result))
  2. {
  3.   //array con los datos
  4.   $fechas[$reg[0]] = array($reg[0],$reg[4]);
  5. }
  6.  
  7. //dibujado calendario
  8. echo '<tr>';
  9. //array de colores
  10. $colordias = array(
  11.                   //sabado y domingo
  12.                   0=>'#99cccc',1=>'#99cccc',
  13.                   //lunes a viernes
  14.                   2=>'#EEEEEE',3=>'#EEEEEE',4=>'#EEEEEE',5=>'#EEEEEE',6=>'#EEEEEE',
  15.                   //dia actual
  16.                   7=>'#ffcc99',        
  17.                   //dia con link
  18.                   8=>'#ffff00',
  19.               );
  20. //variable que pasara por los dias de la semana siendo 0 sabado hasta 6 viernes
  21. $k = $DiaSemanaEmpiezaMes;
  22. for($i = 1; $i < $TotalDeCeldas; $i++)
  23. {          
  24.     if( $i > 2  )
  25.     {
  26.       $j = $i - 2;
  27.    
  28.         if( $k == 6 )
  29.         {
  30.           $k = 0;
  31.           $color = $colordias[$k];
  32.         }
  33.         else if ( $k != 6 )
  34.         {
  35.           $k++;
  36.           $color = $colordias[$k];
  37.         }
  38.        
  39.         if ( $j == date(d) )
  40.           $color = $colordias[7];
  41.          
  42.       //Verificamos que exista el día dentro del array de fechas, y si
  43.       //existe veremos el link, de lo contrario solo el número    
  44.       if( array_key_exists($j, $fechas) )
  45.       {
  46.         $color = $colordias[8];
  47.         $link = '<a href = "'.$fechas[$j][1].'"><b>'.$fechas[$j][0].'</b></a>';
  48.       }
  49.       else
  50.       {
  51.         $link = $j;
  52.       }
  53.          
  54.     }
  55.          
  56.     if($i&#37;7 == 0)
  57.      echo '<td bgcolor='.$color.'>'.$link.'</td></tr><tr>';                            
  58.     else if($i == $EmpiezaMesCalOffset + 1  )
  59.       echo '<td bgcolor='.$color.'>'.$link,'</td>';
  60.     else if( $i <= $EmpiezaMesCalOffset && $i < $EmpiezaMesCalOffset)
  61.       echo '<td bgcolor='.$color.'>'.$link.'</td>';  
  62.     else if( $i <= $EmpiezaMesCalOffset && $i%7 != 0)
  63.       echo '<td bgcolor='.$color.'></td>';
  64.     else if( $i > $EmpiezaMesCalOffset && $i%7 != 0 && $i < $TotalDeCeldas - $DiaSemanaTerminaMes+1 )
  65.       echo '<td bgcolor='.$color.'>'.$link.'</td>';
  66. }
  67. echo '</tr>';
  68.  
  69. print "<tr><td align=center colspan=10><a href='calendario.php'>Ir al dia de hoy</a></td></tr>";
  70. print "</table>";

saludos

p.s: solo copie como puedes ver del while hasta cuando se cierra la tabla, el resto del código
sigue igual
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 16/06/2010 a las 23:55 Razón: add_comment()

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