problème d'utilisation de mysql_data_seek

rikku099
Invité n'ayant pas de compte PHPfrance

21 sept. 2010, 07:06

bonjour,

je vous ecris pour vous demander de l'aide quant à l'utilisation de mysql_data_seek

mon but : dupliquer des colonnes avec mysql_data_seek. En effet, je souhaite mettre en place un comparateur qui en fonction du nombre de produit que l'internautre souhaite comparer, rajoutera des colonnes.

Pour mettre en place la duplication de colonne j'ai mis ce code php en place
Resultat : les champs frequence, taille et poid s'affichent bien mais uniquement pour le produit=(
Or dans ma requete je renvoi 4 resultats, je devrais donc avoir 4 colonnes, or je n'en ai qu'une =(

Pourriez vous m'aidez svp =( depuis x temps je suis dessus , je suis novice et ca aide pas=(

Code : Tout sélectionner

$requete = "SELECT * FROM `matable` "; $afficheTab = mysql_query($requete) <table width="585" border="0" cellspacing="0" cellpadding="0"> <tr> <th scope="col">taille</th> <?php while ($listTab= mysql_fetch_assoc($afficheTab)) {?> <th scope="col"> <?php echo $listTab['taille'];?></th> <?php } // On se repositionne sur le premier enregistrement mysql_data_seek($afficheTab, 0); // On se replace sur le premier enregistrement $listTab = mysql_fetch_assoc($afficheTab); // Il faut le relire ?> </tr> <tr> <td>poid</td> <?php while ($listTab= mysql_fetch_assoc($afficheTab)) {?> <td><?php echo $listTab['poid'];?></td> <?php } mysql_data_seek($afficheTab, 0); $listTab = mysql_fetch_assoc($afficheTab); ?> </tr> <tr> <td>freq</td> <?php while ($listTab= mysql_fetch_assoc($afficheTab)) {?> <td><?php echo $listTab['freq'];?></td> <?php } mysql_data_seek($afficheTab, 0); $listTab = mysql_fetch_assoc($afficheTab); ?> </tr> </table>


merci encore pour toute l'aide que vous pourrez m'apporter !!
:) :) :) :)

Mammouth du PHP | 19672 Messages

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>&nbsp;</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] ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

rikku099
Invité n'ayant pas de compte PHPfrance

22 sept. 2010, 07:08

Bonjour,

Déja un grand merci pour ton aide , j'ai parcouru ton code et même si je ne connaissait pas CODE_HTML Je crois deviner ce que cela va donner :)

ce soir je parcours bien la documentation php et je test le code et je te ferais un retour ^^

encore une fois merci d'avoir pris du temps pour m'aider =) jespere que j'arriverais à mettre en place ta solution et que ca marchera

Dans tous les cas je ferais un retour :D

Mammouth du PHP | 19672 Messages

22 sept. 2010, 08:01

Ce que j'ai marqué CODE_HTML, ce n'est pas un mot clé du langage, c'est comme une variable et tu peux mettre ce qui te passe par la tête. Simplement, j'utilise le plus souvent des mots explicites, c'est moins prise de tête à la relecture. Ce qui est important, c'est que le terme utilisé en ouverture ( ex.: <<<MON_BOUT_DE_CODE ») soit strictement le même utilisé en fermeture et que ce dernier soit positionné en début de ligne, se termine par un « ; » et suivi par un retour chariot. Entre les deux, tu peux mettre du code HTML, du JavaScript, des CSS ou simplement du texte brut, et y insérer des variables PHP sans mettre de echo() ou de print(), simplement en les encadrant avec des accolades « {$variable} »
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: