IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Tableau HTML dans une boucle while [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Tableau HTML dans une boucle while
    Bonjour à tous,

    Ma requête est du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select quantite, MONTH(date) as mois FROM table GROUP BY MONTH(date)
    Je récupère donc un mois et une quantité.
    Je voudrais afficher ça sous forme d'un tableau :

    01 | 02 | 03 | 04 | 05 etc..
    12 | 17 | 22 | 34 | 76 etc...
    J'ai donc écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    $nb_result = mysql_num_rows($res);
    $ligne = '<table cellpadding="2" cellspacing="2" border="1" width="100%">';
    $ligne .= '<tr><td colspan="'.$nb_result.'">Résultats</td></tr>';
    $col = 1;
    $max_col = $nb_result;
     
    $ligne .= '<tr>';
     
    while($row = mysql_fetch_assoc($res)){
    	$ligne .= '<td>'.$row['mois'] .'</td>';
     
    	$col++;
    	if($col > $max_col){
    		$ligne .= "</tr><tr>";
    		$col = 1;
    	}
    	$ligne .= '<td>'. $row['quantite']. '</td>';
     
    }
    $ligne .= '</tr>';
    $ligne .= '</table>';
    echo $ligne;
    ...Et diverses autres choses tentées également.
    Mais ça ne fonctionne pas. Le <tr> ne s'affiche pas au bon moment, les quantités s'affichent à côté des mois...bref, c'est le bin's.

    Si vous avez une idée pour structurer ça, je suis preneur.
    D'avance, merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    il faut utiliser les modulos pour ca

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour, tu pourrais donner un exemple ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Bonjour, tu pourrais donner un exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    <?php
    $nbCols = 3; // nombre de colonnes du tableau
    $cpt = 0; // compteur d'éléments
    ?>
     
    <table>
      <tr>
        <th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 1</th>
        <th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 2</th>
        <th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 3</th>
      </tr>
    <?php
     
    $rs = mysql_query(...); // exécution de la requête
    // Nota : on pourrait tout aussi bien parcourir les éléments d'un tableau ou les fichiers d'un dossier
     
    while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats
     
        // début d'une ligne
        if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
            echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne
     
     
        // On place chaque élément dans une cellule du tableau
        echo '<td>';
        echo ... // affichage de tout ce qu'on veut dans la cellule
        echo '</td>';
     
     
        // fin d'une ligne
        if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
            echo '</tr>'; // ..., on est sur le dernier élément d'une ligne
     
        $cpt++; // on incrémente le compteur pour savoir où on en est
    }
     
    // Au cas où ...
    if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
        echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille...
        echo '</tr>'; // ... et on ferme la ligne
    }
     
    ?>
     
    </table>

  5. #5
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci.
    Je viens de tester...
    Mais apparemment, il faut connaître le nombre de colonnes dont on a besoin, les mettre en "dur", et ensuite le modulo répartit le résultat dans les colonnes et ajoute autant de lignes que nécesaires.

    En ce qui me concerne, j'ignore le nombre de colonnes puisqu'il dépend du résultat de la requête...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Merci.
    Je viens de tester...
    Mais apparemment, il faut connaître le nombre de colonnes dont on a besoin, les mettre en "dur", et ensuite le modulo répartit le résultat dans les colonnes et ajoute autant de lignes que nécesaires.

    En ce qui me concerne, j'ignore le nombre de colonnes puisqu'il dépend du résultat de la requête...
    a toi de la calculer par rapport au nombre de resultats, quelle est la logique d'affiche de ton tableau ?

  7. #7
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Dans ton cas, tu auras toujours 2 lignes ?

    Donc on pourrait faire un truc du genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $nb_result = mysql_num_rows($res);
     
    $mois='';
    $quantite='';
     
    while($row = mysql_fetch_assoc($res)){
    	$mois    .='<td>'.$row['mois']    .'</td>';
     	$quantite.='<td>'.$row['quantite'].'</td>';
    }
     
    $ligne = '<table cellpadding="2" cellspacing="2" border="1" width="100%">'."\n";
    $ligne.= '<tr><td colspan="'.$nb_result."\">Résultats</td></tr>\n";
    $ligne.= "<tr>\n".$mois    ."\n</tr>\n";
    $ligne.= "<tr>\n".$quantite."\n</tr>\n";
    $ligne.= "</table>\n";
     
    echo $ligne;

  8. #8
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour

    Dans ton cas, tu auras toujours 2 lignes ?
    Oui, toujours : des mois et des quantités.
    Et ta soluce est impec pour ce que je veux faire !
    Simple et limpide !

    Je te remercie beaucoup.
    Merci aussi à toi, stealth35, de m'avoir orienté sur l'utilisation du modulo, mais dans ce cas, l'idée de Eric2a est beaucoup plus simple.

    Bonne fin de journée à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2009, 09h38
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo