Probleme d'affichage d'un emploi du temps PHP

Coula
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 14:30

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])

HD
Mammouth du PHP | 1181 Messages

05 févr. 2007, 14:35

je crois que c'est
while($row OR $i<49) 
qui tourne indéfiniment
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Coula
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 14:39

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...

HD
Mammouth du PHP | 1181 Messages

05 févr. 2007, 14:42

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 :?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Invité
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 14:46

Hum...

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

HD
Mammouth du PHP | 1181 Messages

05 févr. 2007, 14:51

tu veux dire quoi par while($row) ?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Coula
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 15:04

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 ;)

HD
Mammouth du PHP | 1181 Messages

05 févr. 2007, 15:09

c'est vrai que
$row = mysql_fetch_array($req)
est plus... compréhensible !
:pouce:
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

05 févr. 2007, 19:41

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 !!! ;)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute