Page 1 sur 1

Probleme d'affichage d'un emploi du temps PHP

Posté : 05 févr. 2007, 14:30
par Coula
Bonjour,

Voila, je dois coder un emploi du temps en php, je dois gérer plusieurs salles de cours, et un emploi du temps qui va de 8h à 20h.

Donc je l'ai codé comme suit : j'ai une fonction qui converti les heures en numéro :
static function conversionHeureCase($heure) 
	{	
		switch ($heure)
		{
			case "08h00": $numcase=1; break; case "08h15": $numcase=2; break;
			case "08h30": $numcase=3; break; case "08h45": $numcase=4; break;
			case "09h00": $numcase=5; break; case "09h15": $numcase=6; break;
			case "09h30": $numcase=7; break; case "09h45": $numcase=8; break;
			case "10h00": $numcase=9; break; case "10h15": $numcase=10; break;
			case "10h30": $numcase=11; break; case "10h45": $numcase=12; break;
			case "11h00": $numcase=13; break; case "11h15": $numcase=14; break;
			case "11h30": $numcase=15; break; case "11h45": $numcase=16; break;
			case "12h00": $numcase=17; break; case "12h15": $numcase=18; break;
			case "12h30": $numcase=19; break; case "12h45": $numcase=20; break;
			case "13h00": $numcase=21; break; case "13h15": $numcase=22; break;
			case "13h30": $numcase=23; break; case "13h45": $numcase=24; break;
			case "14h00": $numcase=25; break; case "14h15": $numcase=26; break;
			case "14h30": $numcase=27; break; case "14h45": $numcase=28; break;
			case "15h00": $numcase=29; break; case "15h15": $numcase=30; break;
			case "15h30": $numcase=31; break; case "15h45": $numcase=32; break;
			case "16h00": $numcase=33; break; case "16h15": $numcase=34; break;
			case "16h30": $numcase=35; break; case "16h45": $numcase=36; break;
			case "17h00": $numcase=37; break; case "17h15": $numcase=38; break;
			case "17h30": $numcase=39; break; case "17h45": $numcase=40; break;
			case "18h00": $numcase=41; break; case "18h15": $numcase=42; break;
			case "18h30": $numcase=43; break; case "18h45": $numcase=44; break;
			case "19h00": $numcase=45; break; case "19h15": $numcase=46; break;
			case "19h30": $numcase=47; break; case "19h45": $numcase=48; break;
			case "20h00": $numcase=49; break;
		}
		return($numcase);	
	}
Ensuite j'ai une fonction qui me calcule la longueur d'une plage horraire :
static function longueurPlage($heuredeb,$heurefin)
	{
		$caseheuredeb=Edt::conversionHeureCase($heuredeb);
		$caseheurefin=Edt::conversionHeureCase($heurefin);
		$lgplage=$caseheurefin-$caseheuredeb;
		return($lgplage);
	}
Ensuite j'ai une fonction qui me crée une ligne d'un tableau.
Son fonctionnement : on va récupérer dans la BD, toutes les réservations de plage horraire qui ont été faite pour la ligne en question (qui dépend donc de la salle etc...). Ensuite, tant qu'il y a des réservations, ou qu'on a pas encore mis toutes les cellules dans la ligne, on continue la boucle. Donc pour chaque case, on test si la case en question correspond au début d'une plage horraire réservée, si ce n'est pas le cas, on ajoute une cellule vide à la ligne, et on passe au numéro de cellule suivante. Si c'est le cas, on calcule la durée de la plage horraire, on fait passer cette durée comme variable du colspan de la cellule qu'on va créer en conséquence. Ensuite on ajoute au numéro de case de la cellule actuelle, la longueur de la cellule qu'on vient d'ajouter, afin de continuer la boucle à partir de la fin de la cellule qu'on vient d'ajouter. Ainsi de suite jusqu'a la fin de la ligne.
static function creeLigne($numsalle,$jour,$numsemaine)
	{		
			$i=1; 
			$sql = "SELECT * FROM reservationedt WHERE jour='$jour' AND numsemaine='$numsemaine' AND numsalle='$numsalle' ORDER BY heuredebut";
			$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
			$row = mysql_fetch_array($req);
			echo'<tr><td>'.$numsalle.'</td>';
			while($row OR $i<49)
			{
				while($i!=Edt::conversionHeureCase($row['heuredebut']))
				{		
					echo'<td></td>'; 
					$i=$i+1;
				}
				$lgplage=Edt::longueurPlage($row['heuredebut'],$row['heurefin']);
				echo'<td colspan="'.$lgplage.'"> "'.$row['prenom'].'" <br> <a href="reseredtdet.php5?numreservation='.$row['numreservation'].'">+</a></td>';
			    $i=$i+$lgplage;
			
					
			}
			echo'</tr>';	
	}	
Voila, ces fonctions sont contenues dans une classe appelée Edt.
J'include ensuite cette classe dans une page dynamique :
<table>
	<?php
				include 'config.php';
				include 'edt.class.php5';
				$result=mysql_query("SELECT nomsalle FROM salle ORDER BY nomsalle DESC");		
				while ($row2 = mysql_fetch_array($result))
				{	
					Edt::creeLigne($row2['nomsalle'],$jour,$numsemaine);
					
				} 
	?>
</table>

Bon et je crois pas avoir d'erreurs dans mes fonctions que ce soit de synthaxe ou de logique, mais quand j'affiche ma page, on dirait que la boucle de la ligne ne se finit jamais, la page charge indéfiniement, il n'y a que la premiere ligne qui s'affiche (alors qu'il y a une vaingtaine de salles donc une 20aine de ligne a afficher), et au final ca fait bugger le navigateur et je dois le fermer...

J'aimerai donc savoir si vous aviez vu des erreurs notables, si vous voyez d'ou peut venir le probleme...
Si vous avez besoin de plus d'infos n'hésitez pas.

Merci d'avance.

(mon mail : [email protected])

Posté : 05 févr. 2007, 14:35
par HD
je crois que c'est
while($row OR $i<49) 
qui tourne indéfiniment

Posté : 05 févr. 2007, 14:39
par Coula
Si c'est le cas, comme je pense pas qu'il comprenne pas qu'il faut pas aller au dessus de 48, c'est qu'il doit trouver des trucs dans ma BD indéfiniement ?

Ou alors c'est l'opérateur logique qui est pas bon ?
Pourtant ce que je veux c'est : quoi qu'il se passe, si on a pas dépassé 48 on continue, et après on examine bien chaque truc qu'il trouve dans la BD...

Posté : 05 févr. 2007, 14:42
par HD
là tu lui dit : tant que $row (qui est toujours vrai!) ou $i<49 : faire
or $row est toujours vérifiée donc il va tourner en boucle indéfiniment
je crois que c'est ça mais à vérifier quand même :?

Posté : 05 févr. 2007, 14:46
par Invité
Hum...

Je vais essayer de séparer les 2 conditions dans 2 while différents on va voir ce que ca donne.

Posté : 05 févr. 2007, 14:51
par HD
tu veux dire quoi par while($row) ?

Posté : 05 févr. 2007, 15:04
par Coula
Pb résolu, c'était donc bien cette boucle while qui faisait bugger

Résolu en changeant
while($row OR $i<49)
par
while($row = mysql_fetch_array($req) AND $i<49)
merci HD ;)

Posté : 05 févr. 2007, 15:09
par HD
c'est vrai que
$row = mysql_fetch_array($req)
est plus... compréhensible !
:pouce:

Posté : 05 févr. 2007, 19:41
par Truc
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)