Page 1 sur 1

[php][html] Réaliser un tableau

Posté : 07 janv. 2009, 09:52
par guigui69
Bonjour à tous,

je voudrait réaliser un tableau html, en récupérant mes données de ma base mysql.
J'ai deja réalisé des tableaux html avec une base mysql, mais pour réaliser celui je sais pas comment mi prendre.


requete sql: question, critere_question, sous_critere_question reponse, remarque

je voudrait réaliser un tableau comme ceci:

Code : Tout sélectionner

<table> <tr><td colspan="5"> Critere</td></tr> <tr>td colpans="5"> Sous critere/td></tr> <tr><td>Question</td><td>Réponse</td><td>Remarque</td> .... .... <tr>td colpans="5"> 2 eme Sous critere/td></tr> <tr><td>Question</td><td>Réponse</td><td>Remarque</td> .... ....
Est-il possible de réaliser ceci directement ou bien faut-il que je passe plusieurs étape (du type un tableau array)?

merci d'avance pour votre aide sur ce point, car la je ne voit pas comment je pourrait mettre en forme ceci.


guigui69

Posté : 07 janv. 2009, 11:18
par sadeq
L'idée est de n'afficher un critère ou un sous-critère qu'une seule fois sachant que dans la base de données on en a des doublons selon la multiplicité des questions. Moi, je ferais un regroupement/classement des questions par critère et sous-critère dans la requête exécutée avant d'afficher la table HTML. Et grâce à ce classement, j'afficherais les questions tout en évitant d'afficher les mêmes critères et sous-critères plus d'une fois. Voici comment:
// Exécution de la requête SQL
$sql = "SELECT critere_question, sous_critere_question, question, reponse, remarque FROM mes tables ... ORDER BY critere_question, sous_critere_question";
$resultat = mysql_query($sql);

// Lecture du résultat et affichage 
$critere_en_cours = ""; // variable permettant de mémoriser un critère traité pour éviter de le réafficher plus d'une fois
$sous_critere_en_cours = ""; // variable permettant de mémoriser un sous-critère traité pour éviter de le réafficher plus d'une fois
echo '<table>';
while ($resultat && $row = mysql_fetch_array($resultat)){
    // Afficher une seule fois le critère en cours de traitement
    if ($critere_en_cours != $row['critere_question']){
         echo '<tr><th colspan="5">' . $row['critere_question'] . '</th></tr>';
         // Mémoriser le critère en cours
         $critere_en_cours = $row['critere_question'];
    }
    // Afficher une seule fois le sous-critère en cours de traitement
    if ($sous_critere_en_cours  != $row['sous_critere_question']){
         echo '<tr><td><th colspan="5">' . $row['sous_critere_question'] . '</th></tr>';
         // Mémoriser le sous-critère en cours
         $sous_critere_en_cours  = $row['sous_critere_question'];
    }
    // Et dans tous les cas, afficher la question en cours
   echo '<tr><td>' . $row['question'] . '</td><td>' . $row['reponse'] . '</td><td>' . $row['remarque'] . '</td></tr>';
}
echo '</table>';
Alors, comme tu vois, les deux IF dans la boucle WHILE permettent d'éviter de réafficher le même critère et le même sous-critère plusieurs fois.
Mais il faut noter que le classement ORDER BY de la requête de base est obligatoire pour ce programme car c'est lui qui va rassembler les questions dans des blocs de même critère et sous-critère ce qui permet de les lire séquentiellement dans l'ordre.

Ainsi, par exemple, le résultat suivant qui contient 8 questions classées par critère et sous-critère:
  • c1, sc1, q1, ...
    c1, sc1, q2, ...
    c1, sc2, q3, ...
    c1, sc2, q4, ...
    c2, sc1, q5, ...
    c2, sc1, q6, ...
    c2, sc2, q7, ...
    c2, sc2, q8, ...
sera affiché comme ça:
-----
c1
-----
  • sc1
    -----
    q1, ...
    q2, ...
    -----
    sc2
    -----
    q3, ...
    q4, ...
-----
c2
-----
  • sc1
    -----
    q5, ...
    q6, ...
    -----
    sc2
    -----
    q7, ...
    q8, ...

Posté : 07 janv. 2009, 18:05
par guigui69
Je te remercie , c'est exactement ca que je veux :D


Merci

guigui69