Problème tableaux croisés php

Résolu/Fermé
O'scour - 13 oct. 2011 à 13:19
Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 - 13 oct. 2011 à 14:41
Bonjour à tous,

je dois faire un tableau avec un résultat provenant de 4 tables.

Les différentes table sont :

- CODEPROFS : nom - prenom - login - mdp
- CODEELEVES : nom - prenom - login - mdp - classe
- ATELIER : id - matiere - jour - loginprof - datesession - groupeac
- INSCRIPTION : logineleve - idatelier - datesession - jour

L'histoire c'est des prof qui après s'être identifier grâce à la table "CODEPROFS", créer un atelier qui se rajoute dans la table "ATELIER".
par la suite les élèves après s'être identifier grâce à la table "CODEELEVES", s'inscrivent à un atelier et une ligne est alors crée dans la table "INSCRIPTION".


Je dois au final afficher un tableau visible par les profs en fonction de critères qu'ils choisissent dans une page auparavant, avec le nom, prénom et la matière du prof et à la suite le nom et prénom des élèves qui se sont inscrit dans son atelier.

Exemple :

| prof 1 | prof 2 | prof 3 | prof 4 | prof 5 |
| math | français | anglais | physique | espagnol |
| eleve 1 | eleve 12 | | eleve 5 | eleve 58 |
| eleve 49 | eleve 27 | | | eleve 33 |
| | eleve 51 | | | |


J'obtiens les bon résultats de mes requêtes dans une table comme je veux et tout est presque OK.
Par contre je ne sais pas faire un tableau en colonne, donc mon résultat est en ligne, et ça, c'est pas trop grave MAIS......... LE PROBLÈME est que les noms et prénoms des élèves se répetent autant de fois que le nombre de professeurs trouvés par la requête.

ça me donne ça :

| prof 1 | math | eleve 1 | eleve 49 | eleve 1 | eleve 49 | eleve 1 | eleve 49 | eleve 1 ...
| prof 2 | français | eleve 12 | eleve 27 | eleve 51 | eleve 12 | eleve 27 | eleve 51 | le...
| prof 3 | anglais |
| prof 4 | physique | eleve 5 | eleve 5 | eleve 5 | eleve 5 | eleve 5 |
| prof 5 | espagnol | eleve 58 | eleve 33 | eleve 58 | eleve 33 | eleve 58 | eleve...

J'aimerais que le nom des élèves ne se répètent pas.

je sais que mon code est pas vraiment top et même empirique, j'ai fait une boucle dans une boucle pour arriver à mon résultat.

Si une âme charitable aurais la gentillesse de m'aider, merci.

Voici mon code :

<?php

//récuperation des données
// On commence par récupérer les champs
if( ! isset( $groupeeleve ) ) $groupeeleve = $_POST['groupeeleve'];
else      $groupeeleve="";

if( ! isset( $dates ) ) $dates = $_POST['dates'];
else      $dates="";

if( ! isset( $jour ) ) $jour = $_POST['jour'];
else      $jour="";

$login = $_SESSION['login'] ; 
$vide = "";


//connexion au serveur:
$cnx = mysql_connect( "localhost", "root", "motdepasse" );
//sélection de la base de données:
$db= mysql_select_db( "accper" );
//connexion au serveur:
$cnx2 = mysql_connect( "localhost", "root", "motdepasse" );
//sélection de la base de données:
$db2= mysql_select_db( "accper" );
//création de la requête SQL:
// on ne choisit que les ateliers ou l'éleve s'est inscrit
$sql = "SELECT nom, prenom, matiere, id FROM codeprofs, atelier WHERE  atelier.loginprof = codeprofs.login AND atelier.datesession = '".$dates."'  AND atelier.jour = '".$jour."'  ORDER BY nom";

//exécution de notre requête SQL:
$requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );

?> <table width="1000" border="1" align="center">
  <tr> <?php
while( $result = mysql_fetch_assoc( $requete ) )
{ 
?>  <td><?php echo( "<div align=\"center\">".$result["nom"]."</div><div align=\"center\">".$result["prenom"]."" );  ?></td> 
<td><?php echo( "<div align=\"center\">".$result["matiere"]."</div>" );  ?></td><?php
$idselection = $result['id'];



// deuxieme requete dans la boucle______________________________________________________________________________________________________

$sql2 = "SELECT nom, prenom, idatelier FROM codeeleves, atelier, inscription WHERE '".$idselection."' = inscription.idatelier AND codeeleves.login = inscription.logineleve  AND atelier.datesession = '".$dates."' AND atelier.jour = '".$jour."'  ORDER BY atelier.id";
 
//exécution de notre requête SQL:
$requete2 = mysql_query( $sql2, $cnx2 ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );


 while( $result2 = mysql_fetch_assoc( $requete2 ) )

 { 
?>  <td><?php echo( "<div align=\"center\">".$result2["nom"]."</div><div align=\"center\">".$result2["prenom"]."</div>" );  ?></td> 
<?php
} ?><tr></tr> <?php 
// Fin de la deuxieme requete____________________________________________________________________________________________________________

}

?>
  </tr>
</table>

3 réponses

Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 156
13 oct. 2011 à 13:23
Bonjour.

Sans jeter un oeil à votre code qui semble fonctionner, pour n'avoir qu'une fois les élèves affichés, peut être qu'un SELECT DISTINCT(nom), ...,... serait approprié?
1
Mais c'est magnifique, ça fonctionne !!! :)

DISTINCT je ne connaissais pas !

Merci beaucoup Skeletyon.
0
Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 156
13 oct. 2011 à 14:41
C'est souvent des petits trucs comme ça qui nous filent le plus de problèmes ^^'.
0