par
Cyrano » 21 sept. 2010, 13:40
Salut,
tu t'es effectivement embarqué dans un montage pas évident au premier coup d'oeil.
Le truc va consister à stocker les différentes cellules selon la colonne avant de construire le tableau. Comme ça, tu vas avoir toutes les cellules de chaque colonne prêtes. Il ne restera qu'à les insérer dans le tableau lui-même à la bonne place. Ce qui manque encore à ton tableau, c'est la cellule d'en-tête, on va corriger ça. J'ai commenté le code exprès, sois attentif, ils sont importants :
<?php
// Construction et exécution de la requête SQL
$requete = "SELECT taille, poid, freq FROM `matable` ";
$afficheTab = mysql_query($requete);
/**
* Initialisation des conteneurs pour les différentes cellules
*/
$lh = <<<CODE_HTML
<td> </td>
CODE_HTML;
$l1 = '';
$l2 = '';
$l3 = '';
// On crée un pointeur pour l'en-tête du tableau
$i = 1;
/**
* Pour chaque ligne des données retournées, on va créer les
* différentes cellules selon la ligne correspondante
*/
while(false !== ($listTab= mysql_fetch_assoc($afficheTab)))
{
$lh .= <<<CODE_HTML
<th>Choix {$i}</th>
CODE_HTML;
$l1 .= <<<CODE_HTML
<td>{$listTab['taille']}</th>
CODE_HTML;
$l2 .= <<<CODE_HTML
<td>{$listTab['poid']}</td>
CODE_HTML;
$l3 .= <<<CODE_HTML
<td>{$listTab['freq']}</td>
CODE_HTML;
// On oublie pas d'incrémenter le pointeur pour la prochaine ligne
$i++;
}
/**
* Maintenant on peut construire le tableau.
*/
$Tableau = <<<CODE_HTML
<table width="585" border="0" cellspacing="0" cellpadding="0">
<thead>
{$lh}
</thead>
<tr>
<th scope="row">taille</th>
{$l1}
</tr>
<tr>
<th scope="col">poids</td>
{$l2}
</tr>
<tr>
<th scope="col">freq</td>
{$l3}
</tr>
</table>
CODE_HTML;
/**
* On affiche le résultat
*/
echo($Tableau);
?>
Ce qu'il faut arriver à comprendre : à chaque tour de la boucle, on crée une des cellules de colonne. Supposons que la requête me retourne 3 lignes de données, la boucle while va donc créer trois cellules <td> avec la valeur d'un article. Dans la construction finale du tableau, je crée les lignes avec la cellule <th> indiquant à quoi correspond ce qui est inscrit dans la ligne et au passage, je modifie le scope de col en row.
Un détail, si tu ne saisis pas ce que sont ces «
<<<CODE_HTML », regarde la documentation de PHP sur la syntaxe HEREDOC, ça devrait t'éclairer.
Et en fin de compte, plus besoin de mysql_data_seek
Teste ça et reviens dire ce que tu n'auras pas compris ou, si tout va bien, reviens nous mettre un [Résolu]

Salut,
tu t'es effectivement embarqué dans un montage pas évident au premier coup d'oeil.
Le truc va consister à stocker les différentes cellules selon la colonne avant de construire le tableau. Comme ça, tu vas avoir toutes les cellules de chaque colonne prêtes. Il ne restera qu'à les insérer dans le tableau lui-même à la bonne place. Ce qui manque encore à ton tableau, c'est la cellule d'en-tête, on va corriger ça. J'ai commenté le code exprès, sois attentif, ils sont importants :
[php]<?php
// Construction et exécution de la requête SQL
$requete = "SELECT taille, poid, freq FROM `matable` ";
$afficheTab = mysql_query($requete);
/**
* Initialisation des conteneurs pour les différentes cellules
*/
$lh = <<<CODE_HTML
<td> </td>
CODE_HTML;
$l1 = '';
$l2 = '';
$l3 = '';
// On crée un pointeur pour l'en-tête du tableau
$i = 1;
/**
* Pour chaque ligne des données retournées, on va créer les
* différentes cellules selon la ligne correspondante
*/
while(false !== ($listTab= mysql_fetch_assoc($afficheTab)))
{
$lh .= <<<CODE_HTML
<th>Choix {$i}</th>
CODE_HTML;
$l1 .= <<<CODE_HTML
<td>{$listTab['taille']}</th>
CODE_HTML;
$l2 .= <<<CODE_HTML
<td>{$listTab['poid']}</td>
CODE_HTML;
$l3 .= <<<CODE_HTML
<td>{$listTab['freq']}</td>
CODE_HTML;
// On oublie pas d'incrémenter le pointeur pour la prochaine ligne
$i++;
}
/**
* Maintenant on peut construire le tableau.
*/
$Tableau = <<<CODE_HTML
<table width="585" border="0" cellspacing="0" cellpadding="0">
<thead>
{$lh}
</thead>
<tr>
<th scope="row">taille</th>
{$l1}
</tr>
<tr>
<th scope="col">poids</td>
{$l2}
</tr>
<tr>
<th scope="col">freq</td>
{$l3}
</tr>
</table>
CODE_HTML;
/**
* On affiche le résultat
*/
echo($Tableau);
?>[/php]
Ce qu'il faut arriver à comprendre : à chaque tour de la boucle, on crée une des cellules de colonne. Supposons que la requête me retourne 3 lignes de données, la boucle while va donc créer trois cellules <td> avec la valeur d'un article. Dans la construction finale du tableau, je crée les lignes avec la cellule <th> indiquant à quoi correspond ce qui est inscrit dans la ligne et au passage, je modifie le scope de col en row.
Un détail, si tu ne saisis pas ce que sont ces « [i]<<<CODE_HTML[/i] », regarde la documentation de PHP sur la syntaxe HEREDOC, ça devrait t'éclairer.
Et en fin de compte, plus besoin de mysql_data_seek ;)
Teste ça et reviens dire ce que tu n'auras pas compris ou, si tout va bien, reviens nous mettre un [Résolu] ;)