Probleme d'affichage de tableau mysql/php

Résolu/Fermé
desc1988 Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 17 mars 2008 - 10 mars 2008 à 21:21
 GaNoCla - 7 mai 2008 à 18:22
Bonjour bonjour,
Ceci est mon premier message posté sur ccm.J'espère trouver une réponse à ma question.

Voila mon problème :
J'ai une base de données avec dedans des étudiants identifiés par un numéro un nom et une classe.
Je désirs les faire apparaitre dans des tableaux ayant pour titre leur classe.
J'arrive à faire apparaître les tableaux cependant lorsque 2 étudiants sont dans une même classe, ils n'apparaissent pas dans le même tableau mais dans 2 tableaux différents ayant le même titre.

Pouvez vous m'aidez à pallier à ce problème.


Voici mon code source :




<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("absences"); // Sélection de la base

$reponse = mysql_query("SELECT * FROM absences"); // Requête SQL


// On fait une boucle pour lister tout ce que contient la table :

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p>
<caption>Classe: <?php echo $donnees['classe']; ?></caption>
<table>

<tr>
<th>Numero d'étudiant</th>
<th>Nom/Prenom</th>
<th>date d'absence</th>
<th>Justifié</th>
</tr>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>

<?php
}

mysql_close(); // Déconnexion de MySQL
?>

7 réponses

desc1988 Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 17 mars 2008 1
10 mars 2008 à 23:31
Rien a dire, mis a part que vous avez oublié un ; après la variable $classeprecedente = 'truc' et que vous avez écris $donnes['classe'] au lieu de $donnees['classe'].

Je vous charrie un peu car je jalouse vaut talent de programmeur.

Je ne sais comment vous remercier pour votre aide.
Merci infiniment sincèrement.

Je suis impressionner par l'efficacité de ce site et par la qualité de ses membres.
Merci encore.
1
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
11 mars 2008 à 19:21
Effectivement c'est le genre d'erreurs que je fais couramment ! Une sorte de marque de fabrique pour faire crier un peu mon compilateur, quoi ^^ ! Je suis ravi d'avoir pu vous aider, bonne continuation dans vos projets et n'hésitez pas à repasser en cas de besoin ou pour aider un autre membre.
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
10 mars 2008 à 21:27
Bonsoir

En fait, le code dans la boucle while sera exécuté à chaque itération, il est donc normal qu'il y ait un tableau par étudiant...

Pour remédier à ce problème, il faudrait faire quelque chose du genre ordonner les résultats de la requête par classe, puis faire un test pour le création du tableau : ne le créer que si la classe est différentes de la classe de l'itération précédente, sinon ajouter l'étudiant à la classe courante.

J'espère que ma suggestion est compréhensible et qu'elle répondra à votre problème.

Bonne soirée
0
desc1988 Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 17 mars 2008 1
10 mars 2008 à 21:34
Merci pour cette réponse si rapide.

Je sais comment ordonner par classe en revanche le test me parait moins réalisable (en gros je ne sais pas comment m'y prendre).
Pouvez vous m'en dire un peu plus sur le code à mettre afin de réaliser le test?

merci d'avance.
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
10 mars 2008 à 21:44
Je pensais à une variable temporaire qui mémoriserait la valeur de la classe à l'itération précédente et un test du genre :

classe_precedente = NULL
tant que (...) faire
     si ( classe = classe_precedente) alors
          ajouter l'étudiant au tableau
     sinon
          créer un nouveau tableau
          ajouter l'étudiant au tableau
     finsi
     classe_precedente <- classe
fintantque



Je ne suis pas spécialiste de PHP et encore moins de MySQL mais je pense que vous devriez pouvoir adapter ce code à vos besoins. N'hésiter pas à demander si quelque chose ne vous semble pas clair.
0
desc1988 Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 17 mars 2008 1
10 mars 2008 à 22:02
J'essaye quelque chose mais cela ne marche pas. Pouvez vous m'indiquer et corriger mes erreurs si cela n'est pas trop vous demander.

Voila comment je procède mes pleins de trucs cloche:





$donnees = mysql_fetch_array($reponse)
$classeprecedente=NULL

if ($donnees['classe']!=$classeprecedente;$donnees['classe']==$classeprecedente)
{
?>

<p>
<caption>Classe: <?php echo $donnees['classe']; ?></caption>
<table>

<tr>
<th>Numero d'étudiant</th>
<th>Nom/Prenom</th>
<th>date d'absence</th>
<th>Justifié</th>
</tr>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>

<?php
}
else
{
?>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>
<?php
}
?>
0

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

Posez votre question
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
10 mars 2008 à 22:06
Il faudrait virer le "$donnees['classe']==$classeprecedente" du test if et ajouter "$classeprecedente=$donnees['classe']" après le else (à la fin de la boucle while).
Il faudrait aussi vérifier qu'on puisse faire des comparaisons de chaînes de caractère avec l'opérateur ==, je sais qu'on ne peut pas le faire en C, et comme le PHP en est proche, c'est à voir.
0
desc1988 Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 17 mars 2008 1
10 mars 2008 à 22:27
J'ai essayé autre chose mais ca ne marche toujours pas.
J'avoue que je galère pas mal.
Encore un petit coup de main ne serait pas de refus.

Voila ce que j'ai tenté de faire:



while ($donnees = mysql_fetch_array($reponse) )

{
$classeprecedente=$donnees['classe'];

if ($classeprecedente==NULL)
{
$classeprecedente=$donnees['classe']
?>

<p>
<caption>Classe: <?php echo $donnees['classe']; ?></caption>
<table>

<tr>
<th>Numero d'étudiant</th>
<th>Nom/Prenom</th>
<th>date d'absence</th>
<th>Justifié</th>
</tr>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>

<?php

}
else
{
?>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>
<?php
}
}


mysql_close(); // Déconnexion de MySQL
?>







Je ne sais pas si j'ai tout bien positionné (apparemment non puisque ça ne marche pas).
0
pyschopathe Messages postés 1963 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 137
10 mars 2008 à 22:48
Bah ouais mais si tu ne fais pas ce que je te dis, on va pas s'en sortir ^^ !

Essaie ça :

<?php
$classeprecedente = 'truc'
while ($donnees = mysql_fetch_array($reponse) )
{

     if ($donnes['classe'] != $classeprecedente)
     {
?>

<p>
<caption>Classe: <?php echo $donnees['classe']; ?></caption>
<table>

<tr>
<th>Numero d'étudiant</th>
<th>Nom/Prenom</th>
<th>date d'absence</th>
<th>Justifié</th>
</tr>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>

<?php

     }
     else
     {
?>

<tr>

<td><?php echo $donnees['numero'] ?></td>
<td><?php echo $donnees['np'] ?></td>
<td><?php echo $donnees['date'] ?></td>
<td><?php if ($donnees['justif']==0 ){echo "non";} else{echo "oui";} ?></td>
</tr>
</table>
</p>

<?php

     }
     $classeprecedente=$donnees['classe'];
}

mysql_close(); // Déconnexion de MySQL
?>

0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
10 mars 2008 à 23:51
Bonsoir,

j'ai pas testé mais essayes comme ça:

Changes les noms des champs si besoin la ou il y a $donnees['......']

<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("absences"); // Sélection de la base

$reponse = mysql_query("SELECT * FROM absences");
//on va faire un array à 3 dimensions premiere dimension la classe, deuxieme le num de l'eleve, 3 ième l'élève
$array_eleves=array();
while ($donnees = mysql_fetch_array($reponse)){
	$array_eleves[$donnees['classe']][$donnees['numero']]=$donnees['eleve'];
}
mysql_close();
//on affiche:
echo "<table border=\"1\">";
foreach($array_eleves as $classe=>$value){
	echo "<tr><th colspan=\"2\">".$classe."</th></tr>";
	foreach($value as $num=>$eleve){
		echo "<tr><td>".$num."</td><td>".$eleve."</td></tr>"
	}

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

Depuis quelques temps, si tout va bien pour mes fichiers personnels, Outlook Express, etc., par contre dès que je demande une page Web, mon ordinateur se bloque et dans le message d'erreurs, il est mentionné ce qui suit :

C:\DOCUME~1\VIP\LOCALS~1\Temp\WERee01.dir00\iexplore.exe.mdmp
C:\DOCUME~1\VIP\LOCALS~1\Temp\WERee01.dir00\appcompat.txt

Que puis-je faire pour remédier à cette situation ?
Bien merci à qui pourra m'aider.
J.P.
0