Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/07/2009, 10:41
Gaug
 
Fecha de Ingreso: junio-2009
Mensajes: 250
Antigüedad: 14 años, 11 meses
Puntos: 1
Calendario atráves de valores de una BD.

Hola.

En realidad lo que estoy buscando hacer es algo complicado, al menos yo lo veo así, tengo un código que recibe 2 fechas y una de inicio y una término y a partir de eso me crea un calendario desde el mes de la de inicio hasta el mes de la de término, pero ahora quiero uno que reciba digamos 40 fechas y me cree 20 calendarios, uno primero, luego se brinque un renglón y se cree otro, pero digamos que los meses solo van a aparecer una vez en la parte superior y ya en cada calendario que se cree solamente sean cajas de texto por cada mes, alomejor no me explico, les dejo el código para que lo prueben y se den una idea:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $fecha= "20-Sep-08";
  4. $fecha2= "31-Jul-09";
  5.  
  6. //se manipula el formato de la fecha
  7.  
  8. $fechaExplode = explode("-", $fecha);
  9. $fechaSearch = array('Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic');
  10. $fechaReplaces = array('01','02','03','04','05','06','07','08','09','10','11','12');
  11. $fechaCambiada = str_ireplace($fechaSearch,$fechaReplaces,$fechaExplode[1]);
  12. $fecha= $fechaCambiada . "-" . $fechaExplode[0] . "-" . $fechaExplode[2];
  13.  
  14. $fechaExplode2 = explode("-", $fecha2);
  15. $fechaSearch2 = array('Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic');
  16. $fechaReplaces2 = array('01','02','03','04','05','06','07','08','09','10','11','12');
  17. $fechaCambiada2 = str_ireplace($fechaSearch2,$fechaReplaces2,$fechaExplode2[1]);
  18. $fecha2= $fechaCambiada2 . "-" . $fechaExplode2[0] . "-" . $fechaExplode2[2];
  19.  
  20. /////////////////////////////////////////////////////////////////////////////
  21.  
  22. $palabras=split("-",$fecha);
  23. $palabras2=split("-",$fecha2);
  24.  
  25.  
  26. for($i=0;isset($palabras[$i]);$i++)
  27. {
  28.  
  29. if($i==0){
  30. $mes=(int) $palabras[$i];
  31. $mes2=(int) $palabras2[$i];}
  32.  else if($i==1){
  33. $dia=$palabras[$i];
  34. $dia2=$palabras2[$i];}
  35.  else if($i==2){
  36.  $anio="20".$palabras[$i];
  37. $anio2="20".$palabras2[$i];
  38. }
  39. }
  40.  
  41. function nombres($month){ //para asignar los nombres de los meses
  42.  
  43. switch($month){
  44.     case 1: $nombre="ENE";
  45.             break;
  46.     case 2: $nombre="FEB";
  47.             break;
  48.     case 3: $nombre="MAR";
  49.             break;
  50.     case 4: $nombre="ABR";
  51.             break;
  52.     case 5: $nombre="MAY"; 
  53.             break;
  54.     case 6: $nombre="JUN";
  55.             break;
  56.     case 7: $nombre="JUL";
  57.             break;
  58.     case 8: $nombre="AGO";
  59.             break;
  60.     case 9: $nombre="SEP";
  61.             break;
  62.     case 10: $nombre="OCT";
  63.             break;
  64.     case 11: $nombre="NOV";
  65.             break;
  66.     case 12: $nombre="DIC";
  67.             break;
  68.     }//case
  69. return $nombre;
  70. }
  71. /////////////////////////////////////////////////////////////////////////////////////////////////////////
  72. ?>
  73.  
  74. <tr>
  75. <td>&nbsp;</td>
  76. <?php
  77. //para no modificar originales
  78. $mes_mas=$mes;
  79. $anio_mas=$anio;
  80. $inicio=1;
  81.  
  82.  
  83. if($anio==$anio2){
  84. $columna_anio=1;
  85. $columna_mes=($mes2-$mes)+1;
  86. $tot_mes+=$columna_mes;
  87. ?>
  88.  
  89. <td colspan="<?php echo $columna_mes+1;//el +1 por el ledger?>"><?php echo $anio; ?><td/>
  90. </tr>
  91.  
  92. <tr>
  93. <td>&nbsp;</td> <?php
  94. for($i=1;$i<=$columna_mes;$i++){
  95.    
  96.     if ($i==$columna_mes){ ?>
  97.    
  98.     <td><?php echo nombres($mes2); ?> </td>
  99.    
  100.     <?php }// if $i
  101.             else {  ?>
  102.            
  103.             <td> <?php echo nombres($mes_mas);?></td>
  104.             <?php $mes_mas++;
  105.         }//else $i
  106. } //for  ?>
  107. </tr>
  108.  
  109. <?php }//if ==
  110.  
  111.  
  112. else {  
  113.     for($k=1;$k<=2;$k++){ // 2 por que en la primera crea las columnas y en la segunda los meses..
  114.     $tot_mes=0; // se reinicia para que dé el tot neto de los meses.. por que da 2 vueltas y saldria doble el resultado.
  115.     if($k==1){ //para crear las columnas
  116.     $columna_anio=($anio2-$anio)+1;
  117.     ?>
  118.    
  119.    
  120.     <?php
  121.     for($j=1;$j<=$columna_anio;$j++){
  122.        
  123.         if($j==1){
  124.         $columna_mes=(12-$mes)+1;
  125.         $tot_mes+=$columna_mes;  ?>
  126.        
  127.         <td colspan="<?php echo $columna_mes+1;//por ledger?>"><?php echo $anio;?></td>
  128.          <?php }//if
  129.            
  130.             else if ($j==$columna_anio){
  131.             $columna_mes=$mes2;
  132.             $tot_mes+=$columna_mes;
  133.              ?>
  134.             <td colspan="<?php echo $columna_mes;?>"><?php echo $anio2;?></td>
  135.                 <?php } //else if
  136.                
  137.                 else {
  138.                 $columna_mes=12;
  139.                 $tot_mes+=$columna_mes;
  140.                 $anio_mas++; ?>
  141.                 <td colspan="<?php echo $columna_mes;?>"><?php echo $anio_mas;?></td>
  142.                 <?php }//else
  143.     }//for j ?>
  144. </tr>
  145. <?php }//if para crear columnas dentro del for k
  146.        
  147.         else{ //para crear meses ////////////////////////////////////////////////////////////////////////////////////?>
  148.         <tr> <?php
  149.         $columna_anio=($anio2-$anio)+1; ?>
  150.    
  151.         <td>&nbsp;</td>
  152.    
  153.         <?php
  154.         for($l=1;$l<=$columna_anio;$l++){ //para recorrer años
  155.        
  156.             if($l==1){ //primer año
  157.             $columna_mes=(12-$mes)+1;
  158.             $tot_mes+=$columna_mes;
  159.                
  160.                 for($m=1;$m<=$columna_mes;$m++){ //para recorrer los meses ?>
  161.        
  162.                 <td> <?php echo nombres($mes_mas); ?></td>
  163.                 <?php $mes_mas++;
  164.  
  165.                 } //for de m
  166.        
  167.             }//if l==1
  168.            
  169.             else if ($l==$columna_anio){ //si llega al ultimo año
  170.             $columna_mes=$mes2;
  171.             $tot_mes+=$columna_mes;
  172.            
  173.                 for($n=1;$n<=$columna_mes;$n++){ //para recorrer meses
  174.            
  175.                 if ($n==$columna_mes){ ?>
  176.              
  177.                 <td><?php echo nombres($mes2); ?> </td>
  178.            
  179.                 <?php }// if n
  180.  
  181.                 else { ?>
  182.                
  183.                 <td> <?php echo nombres($inicio); ?></td>
  184.             <?php $inicio++;
  185.  }//else
  186.            
  187.             }//for n
  188.             $inicio=1;
  189.             } //else if
  190.                
  191.                 else {
  192.                
  193.                 $columna_mes=12;  
  194.                 $tot_mes+=$columna_mes;
  195.                    
  196.                 for($o=1;$o<=$columna_mes;$o++){ //para construir los meses ?>
  197.                
  198.                 <td> <?php echo nombres($inicio);?></td>
  199.             <?php $inicio++;
  200.    
  201.                 }//for o
  202.                 $inicio=1;
  203.                  }//else
  204.     }//for l ?>
  205. </tr>   <?php      
  206.         }//else para crear meses dentro del for k
  207. } //for k
  208. } //else
  209.  
  210.  
  211.  
  212. $tot_columnas=$tot_mes+2; //para el ultimo renglon de la tabla y poner las variables hidden, el +2 por la columna de descrip y la de ledger
  213. $celdas=$tot_mes; //total de celdas (no se ocupa)
  214.  
  215. ////////////////////////////////////////////para establecer el nombre de las cajas de texto//////////////////////////////
  216.  
  217.  
  218. if($columna_anio>1){
  219. $mes_ini=12-$mes;
  220. $mes_ini2=$mes+$mes_ini; //para el for donde empiezan los meses del primer año
  221. }
  222. else {
  223. $mes_ini=$mes2;
  224. $mes_ini2=$mes_ini; //para el for donde empiezan los meses del primer año
  225. }
  226.  
  227. $z=0; //para arreglo en cajas de texto.
  228. ?>
  229.  
  230.  
  231. <form id="form1" name="form1" method="post" action="requerido222.php" onSubmit="return checar(this.form);">
  232. <tr>
  233.  
  234. <td>DEV</td>
  235. <?php
  236. $contador= 1;
  237. $i=0;
  238. for($p=1;$p<=$columna_anio;$p++){ //recorrer los años
  239.  
  240.     if($p==1){
  241.        
  242.         for($q=$mes;$q<=$mes_ini2;$q++) {//recorrer el primer año ?>
  243.        
  244.         <td><input name="nombre[<?php echo $z;?>]" type="text" value="0.00" id="<?php echo 'valor'.$i; ?>"  onkeyup="restar()"   /></td>
  245.         <?php
  246.         $z++;
  247.         $i++;
  248.         }//for q
  249.  
  250.    
  251.     } //if p==1
  252.     else if($p==$columna_anio){
  253.    
  254.         for($r=1;$r<=$mes2;$r++){ //recorrer meses de utlimo año?>
  255.         <td><input name="nombre[<?php echo $z;?>]" type="text" value="0.00" id="<?php echo 'valor'.$i; ?>" onkeyup="restar()"  /></td>
  256.         <?php
  257.         $z++;
  258.         $i++;
  259.         }//for r
  260.    
  261.     }//else if
  262.     else{
  263.    
  264.         for($s=1;$s<=12;$s++){//para recorrer los meses intermedios ?>
  265.         <td><input name="nombre[<?php echo $z;?>]" type="text"  value="0.00" id="<?php echo 'valor'.$i; ?>" onkeyup="restar()"/></td>
  266.         <?php
  267.         $z++;
  268.         $i++;
  269.         }//for s
  270.    
  271.     }//else
  272. }//for p
  273. ?>
  274.  
  275. </tr>
  276. <tr><td colspan="<?php echo $tot_columnas;?>" align="left">
  277.  
  278.  
  279.  
  280. <input name="FE" value="Siguiente" type="submit" class="navText"   />
  281. </td></tr>
  282. </form>
  283. </table>

Sé que esto es algo díficil, pero les estaría muy agradecido si me dieran una mano con este código, se los agradezco bastante de antemano.

EDIT: Ya lo resolví, sólo con ciclo for y con mysql_num_rows, igual gracias.

Saludos.

Última edición por Gaug; 29/07/2009 a las 12:06