Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2012, 17:30
noruas
 
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.