Foros del Web » Programando para Internet » PHP »

Problemas con calendario PHP

Estas en el tema de Problemas con calendario PHP en el foro de PHP en Foros del Web. Bueno, tras dar muchas vueltas por Internet intentando buscar un calendario de reservas tipo hotel y cosas así... Me di por vencido al no encontrar ...
  #1 (permalink)  
Antiguo 19/06/2012, 17:30
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Exclamación Problemas con calendario PHP

Bueno, tras dar muchas vueltas por Internet intentando buscar un calendario de reservas tipo hotel y cosas así... Me di por vencido al no encontrar nada parecido a lo que yo quería, así que me puse ha hacerlo yo. Seguí un tutorial de desarrolloweb.com y salio un calendario perfecto. El problema es cuando quiero codificarlo para ajustarlo a lo que quiero.

Primero que nada voy a explicar que es lo que busco exactamente.

Tengo una base de datos mysql con los datos de clientes, reservas y otros tantos que no vienen a cuento ahora mismo.

El objetivo es puramente personal, osease, no quiero poner el típico calendario de reservas en una web para que los clientes pinchen y hagan reservas, es un calendario únicamente para mi para ver de forma gráfica los días libres que me quedan por reservar.

Por tanto lo que quiero es que sobre el calendario que ya tengo, simplemente sacar 2 datos de la tabla de reservas, "fechaEntrada" (cuando llega un cliente) y "fechaSalida" (cuando se va). Simplemente cambiar el color de fondo de la celda de la tabla que es el calendario por otro color.

No os muestro todo el código por que no creo que sirva colocarlo todo, el problema lo tengo localizado... Pero si hiciera falta os paso el resto. Tambien he quitado todos los intentos fallidos o medio fallidos mios para que se vea claro como esta hecho.



Código:
function mostrar_calendario($mes,$ano){
	//tomo el nombre del mes que hay que imprimir
	$nombre_mes = dame_nombre_mes($mes);
	
	//construyo la tabla general
	echo '<table class="tablacalendario" cellspacing="3" cellpadding="2" border="0">';
	echo '<tr><td colspan="7" class="tit">';
	
	//tabla para mostrar el mes el año y los controles para pasar al mes anterior y siguiente
	echo '<table width="100%" cellspacing="2" cellpadding="2" border="0"><tr><td class="messiguiente">';
	
	//calculo el mes y ano del mes anterior
	$mes_anterior = $mes - 1;
	$ano_anterior = $ano;
	if ($mes_anterior==0){
		$ano_anterior--;
		$mes_anterior=12;
	}
	echo '<a href="index.php?nuevo_mes=' . $mes_anterior . '&nuevo_ano=' . $ano_anterior .'"><span>&lt;&lt;</span></a></td>';
	   echo '<td class="titmesano">' . $nombre_mes . " " . $ano . '</td>';
	   echo '<td class="mesanterior">';
	//calculo el mes y ano del mes siguiente
	$mes_siguiente = $mes + 1;
	$ano_siguiente = $ano;
	if ($mes_siguiente==13){
		$ano_siguiente++;
		$mes_siguiente=1;
	}
	echo '<a href="index.php?nuevo_mes=' . $mes_siguiente . '&nuevo_ano=' . $ano_siguiente . '"><span>&gt;&gt;</span></a></td>';
	//finalizo la tabla de cabecera
	echo '</tr></table>';
	echo '</td></tr>';
	//fila con todos los días de la semana
	
	echo '	<tr>
				<td width="14%" class="diasemana"><span>L</span></td>
				<td width="14%" class="diasemana"><span>M</span></td>
				<td width="14%" class="diasemana"><span>X</span></td>
				<td width="14%" class="diasemana"><span>J</span></td>
				<td width="14%" class="diasemana"><span>V</span></td>
				<td width="14%" class="diasemana"><span>S</span></td>
				<td width="14%" class="diasemana"><span>D</span></td>
			</tr>';
		


	
	////// Aquì en teoria es donde habria que trabajar el codigo...		
$link=Conectarse();
$result=mysql_query('SELECT * FROM reservas',$link);


	//Variable para llevar la cuenta del dia actual
	$dia_actual = 1;
	
	//calculo el numero del dia de la semana del primer dia
	$numero_dia = calcula_numero_dia_semana(1,$mes,$ano);
	//echo "Numero del dia de demana del primer: $numero_dia <br>";
	
	//calculo el último dia del mes
	$ultimo_dia = ultimoDia($mes,$ano);
	
	//escribo la primera fila de la semana	
	echo "<tr>";

	for ($i=0;$i<7;$i++){
		if ($i < $numero_dia){
			//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
			echo '<td class="diainvalido"><span></span></td>';
		} else {
			echo '<td class="diavalido"><span>' . $dia_actual . '</span></td>';
			$dia_actual++;
		}
	}
	echo "</tr>";
	
	//recorro todos los demás días hasta el final del mes
	$numero_dia = 0;
	while ($dia_actual <= $ultimo_dia){
		//si estamos a principio de la semana escribo el <TR>
         if ($numero_dia == 0) 
	     echo "<tr>";
			
	    echo '<td class="diavalido"><span>' . $dia_actual . '</span></td>';
		$dia_actual++;
		$numero_dia++;
		    //}
		//si es el utimo de la semana, me pongo al principio de la semana y escribo el </tr>
		if ($numero_dia == 7){
			$numero_dia = 0;
			echo "</tr>";
		}
	
	//compruebo que celdas me faltan por escribir vacias de la última semana del mes
	for ($i=$numero_dia;$i<7;$i++){
		echo '<td class="diainvalido"><span></span></td>';
	}
	echo "</tr>";
	echo "</table>";
}
La variable $mes sale de un array en la que intercambia el numero del mes por el nombre del mes, asi que lo que saca es: Enero, Febrero... etc.

Lo he intentado todo ya, pero no consigo sacar nada derecho. Veo dos problemas importantes.

El primero es que al haber varias reservas de alguna forma he de sacar todas ellas para luego por medio de un if o similar cambiar el estilo de la celda del dia que coincida con una reserva... Y solo consigo sacar 1 reserva en vez de todas.

El segundo es que pasa si una reserva coje parte de 2 meses distintos o de dos años distintos...

Si al menos consiguiera sacar todas las reservas para poder compararlas con el dia del calendario seria un gran avance...

A ver si algun lumbreras es capaz de decirme como se hace o almenos ponerme en el camino de la luz

Saludos.
  #2 (permalink)  
Antiguo 19/06/2012, 19:55
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Problemas con calendario PHP

Holas,

No soy mucho de mezclar mucho PHP con HTML, pero creo podrias usar mejor el jqueryUI Calendar en donde el calendario ya esta hecho simplemente podrias usar el PHP para obtener datos datos (json) y pintar (con estilos) los dias del calendario:

http://www.phpeveryday.com/articles/...ker-P1029.html


En el script que muestras donde veas la variable $dia_actual pues con ese dia podrias comparar con el resultado de query, pero a simple vista el script esta muy desordenado o capaz lo copeastes mal, pero mejor te recomiendo por lo mas facil y directo, el link anterior que te mostre.

Saludos
__________________
.: Gildus :.
  #3 (permalink)  
Antiguo 20/06/2012, 04:53
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: Problemas con calendario PHP

Respecto al orden... el Archivo fue creado por el creador del tutorial xD

Llevo toda la mañana mirando los calendarios jquery, tienen buena pinta. Pero volvemos a mi problema principal, ¿como relaciono un rango de fechas de una tabla con la celda del calendario?

Cada entrada de reserva es: una fecha de entrada y otra de salida. el espacio entre amabas es digamos el rango de celdas que quiero cambiar el estilo. He intentado ya muchas cosas, pero ninguna funciona bien.
  #4 (permalink)  
Antiguo 20/06/2012, 09:47
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: Problemas con calendario PHP

Bueno he avanzado y solucionado todos los problemas menos uno... A ver si alguien me explica donde esta el fallo.

Lo primero que he hecho es crear otra tabla mysql que almacene dia a dia las reservas mes y año para poder discriminar los datos que voy a sacar. Con eso me quito del problema de que es lo que pasa si una reserva ocupa partes de dos meses o años distintos.

Pero sigo con el problema anterior, la consulta solo me extrae el 1º dato de la tabla generada...

¿Como hago para que saque todos los datos y los compare en el if que genera las celdas?

Código:
$link=Conectarse();
$result=mysql_query('SELECT * FROM fechas WHERE mes LIKE "'.$mes.'" AND ano LIKE "'.$ano.'" ',$link);
$row = mysql_fetch_array($result);


	$numero_dia = 0;
	while ($dia_actual <= $ultimo_dia){
       
        if ($numero_dia == 0) 
			echo "<tr>";
			
                                if ($dia_actual == $row["dia"]) {
				       echo '<td class="diavalidoActivo"><span>' . $dia_actual . '</span></td>';}
				else {
                                        echo '<td class="diavalido"><span>' . $dia_actual . '</span></td>';}
		$dia_actual++;
		$numero_dia++;
.
.
.
.
//Esto continua, pero no hace falta seguir...
He intentado usar un "while" con la consulta, pero nada, mismo problema, o lo mismo es que no lo he usado bien.
  #5 (permalink)  
Antiguo 20/06/2012, 10:55
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Problemas con calendario PHP

Haz intentado algo como:

Código PHP:
Ver original
  1. $link=Conectarse();
  2. $result=mysql_query('SELECT * FROM fechas WHERE mes LIKE "'.$mes.'" AND ano LIKE "'.$ano.'" ',$link);
  3. while($row = mysql_fetch_array($result)){
  4. ...
  5. ...
  6. ...
  7.  
  8. }

Con JQueryUI Calendar:

http://jsfiddle.net/gildus/kChZB/11/

Saludos
__________________
.: Gildus :.
  #6 (permalink)  
Antiguo 20/06/2012, 12:13
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: Problemas con calendario PHP

Voy a investigar esa otra opcion a ver. Gracias.

Etiquetas: calendario, mysql, sql, tabla, variables
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 03:21.