Problême de tuples en double PHP/SQL ?

Résolu/Fermé
Darkim - 19 juil. 2011 à 12:33
 Darkim - 19 juil. 2011 à 16:46
Bonjour tout le monde, alors voila mon problème :
Actuellement je développe une application pour la gestion des salle d'une école, j'arrive à la partie affichage des emploi du temps d'une salle(C'est un tableau ou les colonnes représente les heures et les lignes les jours; si une salle est occupée j'affiche le nom du groupe qui l'occupe). J'ai trois tables : ocupper(id_sal,id_group,jour,heure) , groupe(id_group,nom_group) et salle(id_sal,nom_sal) et voici un fragment du code que j'ai utiliser :


$req2 = $bdd->query("SELECT * FROM ocupper,groupe WHERE (ocupper.id_group = groupe.id_group) AND (id_sal = ".$_POST['sal'].') ORDER BY jour' );
?>
<tr><td>\</td><td>8h - 10h</td><td>10h - 12h</td><td>12h:30 - 14h:30</td><td>14h:30 - 16h:30</td><td>16h:30 - 18h:30</td><td>18h:30 - 20h:30</td><td>20h:30 - 22h:30</td></tr>

<?php
while($donnee = $req2->fetch())
{
?>

<tr><td><?php echo $donnee['jour'];?></td><td><?php if(($donnee['jour'] == "dimanche")&&($donnee['heure'] == "8h - 10h")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($donnee['heure'] == "10h - 12h")) echo $donnee['nom_group']; else echo "\\";?>
</td><td><?php if(($donnee['heure'] == "12h30 - 14h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($donnee['heure'] == "14h30 - 16h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($donnee['heure'] == "12h30 - 14h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($donnee['heure'] == "16h30 - 18h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($donnee['heure'] == "18h30 - 20h30")) echo $donnee['nom_group']; else echo "\\"; ?></td>

</tr>

<?php } ?>
</table>

le problème c'est que les jours dans les lignes s'affiche autant de fois qu'il y'a de tuples dans la table récupéré par la requête, Je suis vraiment perdu j'ai passé la journée a essayer de trouver une solution...
Merci d'avance pour votre aide
A voir également:

13 réponses

varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 16:29
au moins on sais d'ou vient le pb: tes balises <tr> ne sont pas prises correctement.

Reste a voir ou les mettres pour que sa fonctionne
1
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 14:42
Bonjour,

Peut tu nous fournir le code HTML généré par ton code PHP s'il te plait?
(en utilisant les balise <code>, c'est plus joli ;) )
0
Ah oui, désolé je suis nouveau sur le forum !
J'ai modifier le code précédent, j'ai diviser la table occuper en deux table : ocupper(id_sal,id_group,jour) et heure(id_sal,id_group,jour,heure)
et voila mon nouveau code :

$req2 = $bdd->query("SELECT * FROM ocupper,groupe WHERE (ocupper.id_group = groupe.id_group) AND (ocupper.id_sal = ".$_POST['sal'].') ' );

?>
<tr><td>\</td><td>8h - 10h</td><td>10h - 12h</td><td>12h:30 - 14h:30</td><td>14h:30 - 16h:30</td><td>16h:30 - 18h:30</td><td>18h:30 - 20h:30</td><td>20h:30 - 22h:30</td></tr>

<?php
while($donnee = $req2->fetch())
{
?>

<tr><td><?php echo $donnee['jour'];?></td>

<?php $req3 = $bdd->query('SELECT * FROM heure WHERE jour = \''. $donnee['jour'] . '\'');
while($d = $req3->fetch())
{
?>
<td><?php if(($d['heure'] == "8h - 10h")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($d['heure'] == "10h - 12h")) echo $donnee['nom_group']; else echo "\\";?>
</td><td><?php if(($d['heure'] == "12h30 - 14h30")) echo $d['nom_group']; else echo "\\"; ?>
</td><td><?php if(($d['heure'] == "14h30 - 16h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($d['heure'] == "16h30 - 18h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($d['heure'] == "18h30 - 20h30")) echo $donnee['nom_group']; else echo "\\"; ?>
</td><td><?php if(($d['heure'] == "20h30 - 22h30")) echo $donnee['nom_group']; else echo "\\"; ?></td>
<?php } ?>
</tr>

<?php } ?>
</table>



et cette fois ci c'est les colonne qui sont dupliquer... Je n'arrive vraiment pas a trouver une solution, voila le code html générer

<table>
<tbody>
<tr>
<td>\</td>
<td>8h - 10h</td>
<td>10h - 12h</td>
<td>12h:30 - 14h:30</td>
<td>14h:30 - 16h:30</td>
<td>16h:30 - 18h:30</td>
<td>18h:30 - 20h:30</td>
<td>20h:30 - 22h:30</td>
</tr>
<tr>
<td>Dimanche</td>
<td>\ </td>
<td>groupe A </td>
<td>\ </td>
<td>\ </td>
<td>\ </td>
<td>\ </td>
<td>\</td>
<td>groupe A </td>
<td>\ </td>
<td>\ </td>
<td>\ </td>
<td>\ </td>
<td>\ </td>
<td>\</td>
</tr>
</tbody>
</table>

Merci !
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 15:44
Essaye avec ça:

<?php
	$req2 = $bdd->query("SELECT * FROM ocupper,groupe WHERE (ocupper.id_group = groupe.id_group) AND (ocupper.id_sal = ".$_POST['sal'].') ' ); 

?> 
<tr>
	<td>\</td>
	<td>8h - 10h</td>
	<td>10h - 12h</td>
	<td>12h:30 - 14h:30</td>
	<td>14h:30 - 16h:30</td>
	<td>16h:30 - 18h:30</td>
	<td>18h:30 - 20h:30</td>
	<td>20h:30 - 22h:30</td>
</tr> 

<?php 
while($donnee = $req2->fetch()) 
{ 
	echo "<tr>";
	echo "	<td>".$donnee['jour']."</td> ";
	$req3 = $bdd->query('SELECT * FROM heure WHERE jour = \''. $donnee['jour'] . '\''); 
	while($d = $req3->fetch()) 
	{ 

		echo "<td>"; if(($d['heure'] == "8h - 10h")) echo $donnee['nom_group']; else echo "\\";  
		echo "</td><td>"; if(($d['heure'] == "10h - 12h")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "12h30 - 14h30")) echo $d['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "14h30 - 16h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "16h30 - 18h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "18h30 - 20h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "20h30 - 22h30")) echo $donnee['nom_group']; else echo "\\";echo "</td>"; 
	}  
	echo"</tr> ";

}  
echo"</table> ";
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ça ne marche toujours pas... Au fait j'ai pensé que les heure de cours ne risquait pas de changer de ce fait au lieu de créer une table heure je peux ajouter 7 champs a la table ocupper (heure1,heure2,...,heure7) et comme ça je n'aurai plus de soucis... J'attend ton avis ! Et merci pour ton aide varfendell !
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 15:58
Tu peut essayer, je n'ai pas le mappage en tete, mais si le test est positif, c'est que c'est une solution.
Sinon essaye de mettre tes balise <tr> dans la seconde boucle while...ce n'est pas tres logique, je sais, mais sa pourrait venir de la.
0
Je viens d'essayer ma solution ça ne marche pas ! et le <tr> dans la boucle non plus ! je crois que ce que j'essaie de faire est tout simplement pas possible en php !
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 16:05
Tu as mis ta double boucle while comme ça:

while($donnee = $req2->fetch()) 
{ 
	$req3 = $bdd->query('SELECT * FROM heure WHERE jour = \''. $donnee['jour'] . '\''); 
	while($d = $req3->fetch()) 
	{ 
		echo "<tr>";
		echo "	<td>".$donnee['jour']."</td> ";
		echo "<td>"; if(($d['heure'] == "8h - 10h")) echo $donnee['nom_group']; else echo "\\";  
		echo "</td><td>"; if(($d['heure'] == "10h - 12h")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "12h30 - 14h30")) echo $d['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "14h30 - 16h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "16h30 - 18h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "18h30 - 20h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "20h30 - 22h30")) echo $donnee['nom_group']; else echo "\\";echo "</td>"; 
		echo" </tr> ";
	}  
	

}


???
0
Oui ! et là c'est pire puisque il m'affiche des ligne dupliquées par dizaine!!
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 16:14
et comme ça sa donne quoi?

while($donnee = $req2->fetch()) 
{ 
	echo "<tr>";
	echo "	<td>".$donnee['jour']."</td> ";
	$req3 = $bdd->query('SELECT * FROM heure WHERE jour = \''. $donnee['jour'] . '\''); 
	while($d = $req3->fetch()) 
	{ 

		echo "<td>"; if(($d['heure'] == "8h - 10h")) echo $donnee['nom_group']; else echo "\\";  
		echo "</td><td>"; if(($d['heure'] == "10h - 12h")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "12h30 - 14h30")) echo $d['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "14h30 - 16h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "16h30 - 18h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "18h30 - 20h30")) echo $donnee['nom_group']; else echo "\\"; 
		echo "</td><td>"; if(($d['heure'] == "20h30 - 22h30")) echo $donnee['nom_group']; else echo "\\";echo "</td>"; 
		echo "</tr> ";
		echo "<tr>";
	}  
	echo "</tr> ";

}  
0
Même chose !!
0
Le problème ne vient pas de la balise <tr> mais plutôt des tuples existant dans la base de donnée par exemple occuper(salle 1 , groupe 1, dimanche, 12h) et occuper(salle 1 , groupe 2, dimanche, 15h), C'est normal que les <tr> s'exécute deux fois puisque req3 va récupérer deux tuple dimanche...
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
19 juil. 2011 à 16:37
T peut me faire un tableau en HTML du resultat que tu souhaites?
0
C'est bon j'ai trouvé la solution... En annalysant bien la situation j'ai finalement constatée que les heures de cours on les connais déja et on peut facilement les indéxer(8h 18h représente heure1... etc) et le maximum de groupes qui étudie durant la journée est 7 alors au lieu de stocker l'heure j'ai stoker les nom du groupe suivant les indexe des différente heure de cours... et ça marche !!!!!!!!

Merci beaucoup pour ton aide précieuse varfendell !!!
0