Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 05/07/2011, 20h01   #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 Construction d'un tableau HTML avec 2 requêtes SQL

Bonjour à tous,

J'aurais besoin d'afficher un tableau HTML assez compliqué avec 2 requêtes et je galère grave :

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
 
$ligne = "<table><tr>";
$col = 1;
$max_col = 6;
$sql = mysq_query("SELECT id, titre FROM titres");
while($row = mysql_fetch_assoc($sql)){
 
    $ligne .= "<td>".$row['titre']."</td>";
 
	$col ++;
	if ($col > $max_col) 
	{
		$ligne .= "</tr>\n<tr>\n";
		$col = 1;
	}
 
        $sql 2 = mysql_query("SELECT page FROM pages WHERE id_titre='".$row['id']."'");
        while($row2 = mysql_fetch_assoc($sql2)){
              $ligne .= "<tr><td>".$row2['page']."</td></tr>";
        }
 
}
$ligne .= "</table>";
echo $ligne;
Bon, cet exemple est très simplifié, mais l'idée est que dans mon cas, je ne peux pas faire de requête jointe, et que j'ai besoin d'afficher des blocs de <td> avec le titre et les pages dessous, sachant que le maximum de front est de 6 blocs et qu'ensuite on "passe à la ligne" en générant un nouveau <tr>. Ce code ne donne pas du tout le résultat escompté. Ce qui bloque, c'est que je ne sais pas où et comment afficher les pages les unes sous les autres, le tout sous le <td> du titre.
Alors je veux bien de l'aide...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 00h05   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Hello

Pour quelle raison tu ne peux pas faire de jointure ? Visiblement, la table 'pages' à une clé étrangère sur la clé de 'titres' donc ça devrait rouler.

Citation:
Bon, cet exemple est très simplifié, mais l'idée est que dans mon cas, je ne peux pas faire de requête jointe, et que j'ai besoin d'afficher des blocs de <td> avec le titre et les pages dessous, sachant que le maximum de front est de 6 blocs et qu'ensuite on "passe à la ligne" en générant un nouveau <tr>. Ce code ne donne pas du tout le résultat escompté. Ce qui bloque, c'est que je ne sais pas où et comment afficher les pages les unes sous les autres, le tout sous le <td> du titre.
Alors là j'ai pas du tout compris Quel rendu espères-tu obtenir ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 00h14   #3
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Salut,

je dois avouer que je suis dans la même position que le sieur Benjamin. Mais bon si mes deux neurones ne sont pas encore en train de pioncer, je vais essayer de te proposer une soluce en espérant avoir bien compris deviné ta problématique.
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
<?php
 
$col = 0; 
$max = 7;
 
$html[] = '<table>';
$html[] = '<tr>';
 
$sql = mysql_query("SELECT id, titre FROM titres");
 
while($row = mysql_fetch_assoc($sql)) {
 
   $html[] = '<td>' . $row['titre'] . '</td>';
 
   if (++$col === 7) {
      $html[] = '</tr>';
      $html[] = '<tr>';
      $col = 0;
   }
 
   $sql2 = mysql_query("SELECT page FROM pages WHERE id_titre='". $row['id'] ."'");
 
   while($row2 = mysql_fetch_assoc($sql2)) {      
 
      $html[] = '<td>' . $row2['page'] . '</td>';
 
      if (++$col === 7) {
         $html[] = '</tr>';
         $html[] = '<tr>';
         $col = 0;
      }
   }
}
 
if ($col === 0) {
   array_pop($html); # on retire une ligne <tr> ouverte et vide
}
else {
   $html[] = '</tr>';
}
 
$html[] = '</table>';
 
echo implode("\n", $html);
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 07h29   #4
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 à vous, et merci de vous pencher sur ce petit casse-tête.

D'abord je précise le but : je souhaite que l'utilisateur, avec un jquery drag / drop, puisse passer les "pages" d'un "titre" à l'autre. C'est pour ça que j'ai dit que je ne pouvais pas faire de requête jointe, mais il était un peu tard hier soir et je me suis sans doute avancé un peu trop vite. Après tout, oui, why not ?

Bon admettons que l'on passe par une requête jointe...
Un dessin valant mille long discours, j'ai mis en PJ ce que je voudrais obtenir.

Et je résume :

- Il y a autant de <td> que de titres
- Arrivé à 6 td / titre, on ajoute un <tr> et on passe à la ligne.
- Chaque <td> contient une table.
- Chaque table contient le <td> du titre, et sous ce <td>, les <td> des pages.

Ce n'est pas vraiment ce que j'ai (fort mal) expliqué hier, mais la nuit portant conseil...

Merci du coup de main, et bonne journée.

PS : côté code :

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
 
<table width="80%" border="1" cellspacing="2" cellpadding="2">
  <tr>
    <td align="center" valign="top">
    <table width="150" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td><strong>Titre 1</strong></td>
        </tr>
        <tr>
          <td>Page 1-1</td>
        </tr>
        <tr>
          <td>Page 1-2</td>
        </tr>
        <tr>
          <td>Page 1-3</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
      </table>
    </td>
 
    <td align="center" valign="top">
    <table width="150" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><strong>Titre 2</strong></td>
      </tr>
      <tr>
        <td>Page 2-1</td>
      </tr>
      <tr>
        <td>Page 2-2</td>
      </tr>
      <tr>
        <td>Page 2-3</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    </td>
 
    <td align="center" valign="top">
      <table width="150" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td><strong>Titre 3</strong></td>
        </tr>
        <tr>
          <td>Page 3-1</td>
        </tr>
        <tr>
          <td>Page 3-2</td>
        </tr>
        <tr>
          <td>Page 3-3</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
      </table>
      </td>
 
    <td align="center" valign="top">
    <table width="150" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><strong>Titre 4</strong></td>
      </tr>
      <tr>
        <td>Page 4-1</td>
      </tr>
      <tr>
        <td>Page 4-2</td>
      </tr>
      <tr>
        <td>Page 4-3</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    </td>
 
    <td align="center" valign="top">
    <table width="150" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><strong>Titre 5</strong></td>
      </tr>
      <tr>
        <td>Page 5-1</td>
      </tr>
      <tr>
        <td>Page 5-2</td>
      </tr>
      <tr>
        <td>Page 5-3</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    </td>
 
    <td align="center" valign="top">
    <table width="150" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><strong>Titre 6</strong></td>
      </tr>
      <tr>
        <td>Page 6-1</td>
      </tr>
      <tr>
        <td>Page 6-2</td>
      </tr>
      <tr>
        <td>Page 6-3</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
   </td>
 
  </tr>
  <tr>
 
    <td align="center">
    <table width="150" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><strong>Titre 7</strong></td>
      </tr>
      <tr>
        <td>Page 7-1</td>
      </tr>
      <tr>
        <td>Page 7-2</td>
      </tr>
      <tr>
        <td>Page 7-3</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    </td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
Images attachées
Type de fichier : gif croquis.gif (19,3 Ko, 4 affichages)
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 08h16   #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
Re bonjour,

Je pense être arrivé au résultat escompté. Maintenant je vais voir comment je vais gérer le JS avec les différents IDS des éléments, c'est pas gagné...

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
 
$col = 1;
$max_col=5;
$sql = mysql_query("SELECT id, titre FROM titres");
$ligne = '<table width="100%" cellpadding="1" cellspacing="5" align="center" border="1"><tr>';
 
while($row = mysql_fetch_assoc($sql)){
 
$ligne .= '<td valign="top">
	       <table width="100%">';	
 
	$sql2 = mysql_query("SELECT id, page FROM pages WHERE id_titre = '".$row['id']."");
 
 
		$ligne .= '<tr><td class="gras">'.$row['titre'].'</td></tr>';
 
                        while($row2 = mysql_fetch_assoc($sql2)){
			$ligne .= '<tr><td>'.$row2['page'].'</td></tr>';
		}
		$ligne .= '</table>';
 
		$ligne .= '</td>';
		$col ++;
		if ($col > $max_col) 
		{
			$ligne .= "</tr>\n<tr>\n";
			$col = 1;
		}
 
}
$ligne .= '</table>';
return $ligne;
Je passe ce post en résolu, bien pas que pas trop convaincu quant à la suite des opérations

Merci de votre intervention et bonne journée !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 12h29   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Hello

Citation:
- Il y a autant de <td> que de titres
- Arrivé à 6 td / titre, on ajoute un <tr> et on passe à la ligne.
- Chaque <td> contient une table.
- Chaque table contient le <td> du titre, et sous ce <td>, les <td> des pages.
On peut imaginer ça:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<table>
  <tbody>
    <tr>
    <?php for ($i=0; $i < $nb_elems; $i++): ?>
    <td><?=$elems[$i]?></td>
    <?php if ($i % 6 == 0): ?>
    </tr>
    <tr>
    <?php endif ?>
    <?php endfor ?>
    </tr>
  </tbody>
</table>
En supposant $elems comme ta table d'éléments à afficher et $nb_elems comme le nombre d'entrées dans cette table.

Toutefois je me demande si ce que tu essaie de faire caractérise bien des données tabulaires. Si c'est pour faire des vignettes, il vaut mieux mettre des divs flottants avec une taille de 1/6 *100%.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre 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 03h16.


 
 
 
 
Partenaires

Hébergement Web