Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Tabla Html Php

Estas en el tema de Tabla Html Php en el foro de PHP en Foros del Web. Muy buenas gente del foro! Tengo un problema, deseo imprimir en una tabla las fechas comprendidas entre 2 fechas ingresadas por un usuario, deben mostrarse ...
  #1 (permalink)  
Antiguo 03/08/2015, 07:07
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Tabla Html Php

Muy buenas gente del foro!

Tengo un problema, deseo imprimir en una tabla las fechas comprendidas entre 2 fechas ingresadas por un usuario, deben mostrarse todos los días, excepto sábado y domingo, y solamente mostrar el numero del día, por ejemplo fecha inicio = 03/08/2015, fecha termino = 12/08/2015, el resultado debería ser 03 - 04 - 05 - 06 - 07 - 10 - 11 - 12.

Tengo el codigo php que me ingresa los datos a un array

Código PHP:

<?php

$fechaInicio
=strtotime("25-02-2008");
$fechaFin=strtotime("01-04-2008");

$semana=1;


/* avanzamos de a 1 dia; 1 dia ? 86400 segundos */
for($i=$fechaInicio$i<=$fechaFin$i+=86400){
    
    
/* obtenemos el dia de semana como numero; Domingo = 0, Lunes = 1... Sabado = 6 */
    
$diasemana date'w'strtotime($i) );
    
    
    
/* solo agregamos los dias Lunes, Martes, Miercoles, Jueves y Viernes */
    
if( (1<= $diasemana)&&($diasemana <=)     ) {
        
/* obtenemos el calendario en formato numerico STR, [Semana] [Dia Semana] = Fecha */
        
$calendario$semana ][ $diasemana ] = $i;
    }
    
    
/* imprimir fechas hacia abajo, en formato dia-mes-año */
    
echo date('d/m/Y',$calendario[$semana][$diasemana]). "<br>";    
    
    
/* aumentamos la cantidad de semanas */
    
if($diasemana == 7){
        
$semana++;
    }
    
}

?>
el cual funciona puesto que con 'echo', se muestran todas las fechas por pantalla dentro del array, mi problema se genera cuando debo mostrarlos en la tabla, solo aparecen errores, el html que estoy haciendo es el siguiente:

Código HTML:
<!DOCTYPE html>
<html>

	<head>
	</head>
 
	<body>

		<table border="1">
			<thead>
				<tr>
					<td>Lunes</td>
					<td>Martes</td>   
					<td>Miércoles</td>   
					<td>Jueves</td>   
					<td>Viernes</td>      
				</tr>
			</thead>

			<tbody>
				<?php for ($d=$fechaInicio; $d<=$fechaFin; $d+=86400): ?>
				<tr>
					<?php for ($s=1;$s<=5;$s++): ?>
					<td>
						<?php echo date('d/m/Y',$calendario[$d][$s]); ?>
					</td>
						<?php endfor; ?>
				</tr>
				<?php endfor; ?> 
			</tbody>
		</table> 
	</body>
	
</html> 
Lo tengo todo dentro del mismo archivo por motivos de simplesa, ya que luego lo implementare como corresponde en el verdadero proyecto.
  #2 (permalink)  
Antiguo 03/08/2015, 07:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tabla Html Php

Cita:
mi problema se genera cuando debo mostrarlos en la tabla, solo aparecen errores
¿Podrás compartir los mensajes de error completos o es nuestra obligación ejecutar mentalmente tu código para no adivinar?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 03/08/2015, 07:46
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

Oh perdon, olvide la imagen... la adjunto ahora


Última edición por efkruuse; 03/08/2015 a las 07:57 Razón: falla en cargar imagen
  #4 (permalink)  
Antiguo 03/08/2015, 09:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tabla Html Php

Pues los errores indican que la estructura de datos que intentas leer no coincide en lo absoluto, ¿cómo estás revisando esa parte?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 03/08/2015, 10:25
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

Bueno, si te fijas, en el codigo, transformo las fechas a formato Unix, con el strtomtime, para obtener valores numericos, estos son guardados en el arreglo bidimensional, los cuales son impresos con echo mediante date, para corroborar que existen los datos, posteriormente en el codigo html, se crea la tabla y mediante 2 ciclos for, voy revisando el arreglo bidimensional, e imprimiendo con echo a travez de date, de la misma forma que el codigo en php, pero no comprendo cual es el problema.
  #6 (permalink)  
Antiguo 03/08/2015, 10:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tabla Html Php

Cita:
pero no comprendo cual es el problema.
Pues según los errores los índices no coinciden, ¿así o más claro?

Además en el código inicial jamás se ve donde inicializas la variable $calendario, tampoco verificas la existencia/creación del segundo nivel de datos, etc.

En fin, deberías habilitar el reporte de errores y ver que resulta.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 03/08/2015, 11:00
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

Pues, la verdad necesito un poco de ayuda no se programar muy bien en php/html, los indices te refieres a los que utilizo para recorrer el arreglo ?? , por otro lado

Cita:
tampoco verificas la existencia/creación del segundo nivel de datos
No se que te refieres con ello, muchas gracias por tus prontas respuestas.
  #8 (permalink)  
Antiguo 03/08/2015, 11:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tabla Html Php

El tema es que usas tu primer for() para crear $calendario ¿pero en qué momento has creado dicha variable?

Además almacenas datos a $calendario como si ya existiera, y como si ya tuviera los primeros niveles.

Por favor, primero aprender a trabajar con arrays antes de mezclar cosas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 03/08/2015, 11:58
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

Ahora comprendo la logica de porque quizas no imprime correctamente la informacion que tiene dentro, ya que funciona como una variable "temporal". He ingresado al comienzo del programa la linea.

Código PHP:
$fechaInicio=strtotime("25-02-2008");
$fechaFin=strtotime("26-02-2008");
$calendario[][]=array();
$semana=1;
$i=0;
$s=0;
$diasemana=0;
$d=0
declarando $calendario como array, pero sigo teniendo problemas
  #10 (permalink)  
Antiguo 03/08/2015, 13:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tabla Html Php

Pues los problemas persistirán hasta que no aprendas a usar arrays, las lineas que agregaste son absolutamente inservibles.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 03/08/2015, 13:43
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Tabla Html Php

El código tiene varios errores: si tu por ejemplo imprimes el valor de la variable calendario con var_dump te vas a dar cuenta que siempre devuelve el mismo día de la semana, esto es porque estás usando strtotime en una variable que se supone ya está en formato time (Unix):


$diasemana = date( 'w', strtotime($i) );

Déjalo así:

$diasemana = date( 'w', $i );

Si observas también la variable $semana nunca aumenta porque estás haciendo mal la comparación:

Código PHP:
Ver original
  1. if($diasemana == 7){
  2.         $semana++;
  3.     }

No existe el día 7 porque date devuelve máximo hasta 6. Debería quedar así:

Código PHP:
Ver original
  1. if($diasemana == 6){
  2.         $semana++;
  3.     }

Y por ultimo para mostrar la tabla con las fechas tienes que cambiar el código porque primero tienes que saber a qué día de la semana corresponde el primer valor del array y después añadirlo en la tabla a nivel de ese día, porque así como tienes el código va a empezar siempre por lunes sin importar si la fecha corresponde a un jueves por ejemplo.

Mas o menos así debería quedar el código, pero debes arreglar lo que te dije al final:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $fechaInicio=strtotime("25-02-2008");
  4. $fechaFin=strtotime("01-04-2008");
  5.  
  6. $semana=1;
  7.  
  8.  
  9. /* avanzamos de a 1 dia; 1 dia ? 86400 segundos */
  10. for($i=$fechaInicio; $i<=$fechaFin; $i+=86400){
  11.    
  12.     /* obtenemos el dia de semana como numero; Domingo = 0, Lunes = 1... Sabado = 6 */
  13.     $diasemana = date( 'w', $i );
  14.    
  15.    
  16.     /* solo agregamos los dias Lunes, Martes, Miercoles, Jueves y Viernes */
  17.     if(($diasemana >= 1) && ($diasemana <=5 ))
  18.     {
  19.         /* obtenemos el calendario en formato numerico STR, [Semana] [Dia Semana] = Fecha */
  20.         $calendario[ $semana ][ $diasemana ] = $i;
  21.     }
  22.    
  23.     /* imprimir fechas hacia abajo, en formato dia-mes-año */
  24.     //echo date('d/m/Y',$calendario[$semana][$diasemana]). "<br>";
  25.    
  26.     /* aumentamos la cantidad de semanas */
  27.     if($diasemana == 6){
  28.         $semana++;
  29.     }
  30.    
  31. }
  32. ?>
  33.  
  34. <!DOCTYPE html>
  35. <html>
  36.  
  37.     <head>
  38.     </head>
  39.  
  40.     <body>
  41.  
  42.         <table border="1">
  43.             <thead>
  44.                 <tr>
  45.                     <td>Lunes</td>
  46.                     <td>Martes</td>  
  47.                     <td>Miércoles</td>  
  48.                     <td>Jueves</td>  
  49.                     <td>Viernes</td>      
  50.                 </tr>
  51.             </thead>
  52.  
  53.             <tbody>
  54.                 <?php
  55.                     for($i = 1; $i <= count($calendario); $i++)
  56.                     {
  57.                         echo "<tr>";
  58.                             $num = count($calendario[$i]);
  59.                             for ($n = 1; $n <= $num; $n++)
  60.                             {
  61.                                 echo "<td>";
  62.                                     echo date("d/m/Y",$calendario[$i][$n]);
  63.                                 echo "</td>";
  64.                             }
  65.                         echo "</tr>";
  66.                     }
  67.                 ?>
  68.             </tbody>
  69.         </table>
  70.     </body>
  71.    
  72. </html>
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Última edición por chronos682; 03/08/2015 a las 19:38
  #12 (permalink)  
Antiguo 05/08/2015, 13:29
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

Hola chronos682 gracias por tu tiempo y dedicacion!!


He agregado una comprobacion con if e isset para validar si existe o no el dato, y he solucionado el problema de que el dia comiense como Lunes.
Código PHP:
for ($n 1$n <= $num$n++){
     echo 
"<td>"." ";
     if(isset(
$calendario[$i][$n]) ) {
             echo 
"<center>".date("d"$calendario[$i][$n])."</center>";
     }else {
            echo 
" ";
     }
     echo 
"</td>";

Obtengo el siguiente resultado para:
Lunes 27


Martes 28


Miercoles 29


Algo sucede con los <td> que van disminuyendo, alguna idea?
  #13 (permalink)  
Antiguo 05/08/2015, 14:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tabla Html Php

A todo esto ¿no era mejor usar alguna librería ya existente que resuelva todo esto?

Ya pasó mucho tiempo y no veo progreso alguno, ¿vale la pena invertir tanto tiempo en hacer esto desde cero?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 05/08/2015, 18:35
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

La verdad es que no manejo mucho esto y no quiero utilizar librerías para esto, sino, ya hubiera solicitado eso no crees?, para mí es importante aprender a realizar esto desde 0.
  #15 (permalink)  
Antiguo 05/08/2015, 21:31
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Tabla Html Php

Cita:
Iniciado por efkruuse Ver Mensaje
Hola chronos682 gracias por tu tiempo y dedicacion!!


He agregado una comprobacion con if e isset para validar si existe o no el dato, y he solucionado el problema de que el dia comiense como Lunes.
Código PHP:
for ($n 1$n <= $num$n++){
     echo 
"<td>"." ";
     if(isset(
$calendario[$i][$n]) ) {
             echo 
"<center>".date("d"$calendario[$i][$n])."</center>";
     }else {
            echo 
" ";
     }
     echo 
"</td>";

Obtengo el siguiente resultado para:
Lunes 27


Martes 28


Miercoles 29


Algo sucede con los <td> que van disminuyendo, alguna idea?
Yo lo plantearía diferente, yo llenaría el array hasta completar los espacios que hagan falta así siempre serían 5 elementos horizontales por cada elemento vertical en el array de 2 dimensiones. Quedaría así el código:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $fechaInicio=strtotime("06-08-2015");
  4. $fechaFin=strtotime("05-09-2015");
  5. $calendario = array();
  6.  
  7. $semana=1;
  8. //Se comprueba a qué día de la semana corresponde la fecha de inicio
  9. $diasemana = date( 'w', $fechaInicio );
  10.  
  11. //Si es sábado o domingo automáticamente modifica la fecha de inicio al siguiente Lunes
  12. if ($diasemana == 0)
  13. {
  14.     $fechaInicio += 86400;
  15. }
  16. elseif ($diasemana == 6)
  17. {
  18.     $fechaInicio += 172800;
  19. }
  20.  
  21. $diasemana = date( 'w', $fechaInicio );
  22.  
  23. //Si la fecha de inicio corresponde a un día entre Martes y Viernes
  24. //rellena los espacios del array que hagan falta con guión para completar hasta el Lunes anterior
  25. if ($diasemana > 1 && $diasemana < 6)
  26. {
  27.     for($i=1;$i<=$diasemana - 1; $i++)
  28.     {
  29.         $calendario[$semana][$i] = "-";
  30.     }
  31. }  
  32.  
  33. /* avanzamos de a 1 dia; 1 dia ? 86400 segundos */
  34. for($i=$fechaInicio; $i<=$fechaFin; $i+=86400){
  35.    
  36.     /* obtenemos el dia de semana como numero; Domingo = 0, Lunes = 1... Sabado = 6 */
  37.     $diasemana = date( 'w', $i );
  38.    
  39.    
  40.     /* solo agregamos los dias Lunes, Martes, Miercoles, Jueves y Viernes */
  41.     if(($diasemana >= 1) && ($diasemana <=5 ))
  42.     {
  43.         /* obtenemos el calendario en formato numerico STR, [Semana] [Dia Semana] = Fecha */
  44.         $calendario[ $semana ][ $diasemana ] = $i;
  45.     }
  46.    
  47.     /* imprimir fechas hacia abajo, en formato dia-mes-año */
  48.     //echo date('d/m/Y',$calendario[$semana][$diasemana]). "<br>";
  49.    
  50.     /* aumentamos la cantidad de semanas */
  51.     if($diasemana == 6){
  52.         $semana++;
  53.     }
  54.    
  55. }
  56. ?>
  57.  
  58. <!DOCTYPE html>
  59. <html>
  60.  
  61.     <head>
  62.     </head>
  63.  
  64.     <body>
  65.  
  66.         <table border="1">
  67.             <thead>
  68.                 <tr>
  69.                     <td>Lunes</td>
  70.                     <td>Martes</td>  
  71.                     <td>Miércoles</td>  
  72.                     <td>Jueves</td>  
  73.                     <td>Viernes</td>
  74.                     <td>Semana</td>                
  75.                 </tr>
  76.             </thead>
  77.  
  78.             <tbody>
  79.                 <?php
  80.                     for($i = 1; $i <= count($calendario); $i++)
  81.                     {
  82.                         echo "<tr>";
  83.                             $num = count($calendario[$i]);
  84.                             for ($n = 1; $n <= $num; $n++)
  85.                             {
  86.                                 echo "<td>";
  87.                                     //Determina si el elemento del array es un guion
  88.                                     //Si es guión, coloca un espacio
  89.                                     if ($calendario[$i][$n] != "-")
  90.                                     {
  91.                                         echo "<center>".date("d", $calendario[$i][$n])."</center>";
  92.                                     }
  93.                                     else
  94.                                     {
  95.                                         echo " ";
  96.                                     }
  97.                                 echo "</td>";
  98.                             }
  99.                             echo "<td>Semana {$i}</td>"; //Si no quieres que aparezca la semana en la tabla borras esta línea
  100.                             //y donde dice <td>Semana</td> tambien lo eliminas
  101.                         echo "</tr>";
  102.                     }
  103.                 ?>
  104.             </tbody>
  105.         </table>
  106.     </body>
  107.    
  108. </html>

Lo comenté para que sea más fácil de entenderlo y estudiarlo.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #16 (permalink)  
Antiguo 06/08/2015, 05:28
 
Fecha de Ingreso: julio-2015
Ubicación: Temuco, Chile
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Tabla Html Php

Muchas gracias chronoa682, marcare el tema como solucionado, de nuevo muchas gracias por tu tiempo y dedicacion!

Etiquetas: html, tabla
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 16:52.