Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 14h08   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Tableau HTML dans une boucle while

Bonjour à tous,

Ma requête est du genre :

Code :
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 :

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

Code :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h18   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
il faut utiliser les modulos pour ca
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h41   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour, tu pourrais donner un exemple ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h45   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par renaud26 Voir le message
Bonjour, tu pourrais donner un exemple ?
Code :
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>
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h01   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h12   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h13   #7
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Dans ton cas, tu auras toujours 2 lignes ?

Donc on pourrait faire un truc du genre...
Code :
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;
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h29   #8
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour

Citation:
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h06.


 
 
 
 
Partenaires

Hébergement Web