Bug dans l'astuce Affichage sur plusieurs colonnes ?
Bonjour,
Si je suis le script du site avec par exemple 2 colonnes et 2 images j'obtiens :
Parfait ! J'ai mes deux colonnes et un code correct.
Mais avec 2 colonnes et 3 images j'obtiens :
J'ai bien mes 2 colonnes et deux lignes mais il manque comme qque chose au niveau du code...
Le gars PHP ne me place pas le </tr> puisque la condition n'est pas remplie.
Donc si j'ai un nbre d'images pair tt est OK. Un nbre impair et m'sieur W3C me dit que c pas bien et qu'il veut plus valider.
J'ai tenté plusieurs changements mais sans succès. Qqu'un de + doué aurait-il la solut.
Merci.
Encore bravo à l'équipe du site !
Si je suis le script du site avec par exemple 2 colonnes et 2 images j'obtiens :
- <table>
- <tr>
- <td width="50%"><img src="img_1.gif" alt="1"></td>
- <td width="50%"><img src="img_2.gif" alt="2"></td>
- </tr>
- </table>
Parfait ! J'ai mes deux colonnes et un code correct.
Mais avec 2 colonnes et 3 images j'obtiens :
- <table>
- <tr>
- <td width="50%"><img src="img_1.gif" alt="1"></td>
- <td width="50%"><img src="img_2.gif" alt="2"></td>
- </tr>
- <tr>
- <td width="50%"><img src="img_3.gif" alt="3"></td>
- </table>
J'ai bien mes 2 colonnes et deux lignes mais il manque comme qque chose au niveau du code...
Le gars PHP ne me place pas le </tr> puisque la condition n'est pas remplie.
Donc si j'ai un nbre d'images pair tt est OK. Un nbre impair et m'sieur W3C me dit que c pas bien et qu'il veut plus valider.
J'ai tenté plusieurs changements mais sans succès. Qqu'un de + doué aurait-il la solut.
Merci.
Encore bravo à l'équipe du site !
Oui mettre un colspan="2" sur le dernier affichage quand tu as un nombre impair d'élément à placer.
Utilise l'opérateur modulo : %.
Utilise l'opérateur modulo : %.
Pfiiiiooooouuu ! Quelle rapidité ! Tu vas bien arriver à rattrapper BipBip à cette allure :)
Bon un colspan je vois bien c du html. Le modulo, je crois savoir : pair if ($nombre % 2 == 0) ou impair if ($nombre % 1 == 0). Mais après j'sais plus. Comment j'explique çà au serveur ? Et si j'ai 3 colonnes (ce qui en plus est le cas) ?
Ah ces débutants alors...
Bon un colspan je vois bien c du html. Le modulo, je crois savoir : pair if ($nombre % 2 == 0) ou impair if ($nombre % 1 == 0). Mais après j'sais plus. Comment j'explique çà au serveur ? Et si j'ai 3 colonnes (ce qui en plus est le cas) ?
Ah ces débutants alors...
Ben si tu as 3 colonnes, le probleme ne se pose que dans le cas ou $nombre % 3 vaut 1 ou 2.
Auquel cas, faut faire un colspan="2" ou colspan="3".
Auquel cas, faut faire un colspan="2" ou colspan="3".
Salut,
Aprés pas mal de recherches, toujours pas réussi à placer correctement le colspan. J'ai donc adopté une méthode inspirée de ta réponse qui va certainement te faire marrer ou bondir (selon l'humeur) mais qui semble bien fonctionner.
Voilà, voilà.
Merci encore pour ta disponiobilité.
Bye
Aprés pas mal de recherches, toujours pas réussi à placer correctement le colspan. J'ai donc adopté une méthode inspirée de ta réponse qui va certainement te faire marrer ou bondir (selon l'humeur) mais qui semble bien fonctionner.
- <?php
- //on scanne
- while($data = mysql_fetch_assoc($rsPart)) {
- // on stocke nos données
- $tablo[]=$data;
- }
- //pour ne pas que <table></table> s'affiche si tablo est vide
- if(!count($tablo)==0) {
- $nbcol=3; //---on détermine le nombre de colonnes de l'affichage
- echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
- //Pour le nombre de tuples trouvé
- for($i=0;$i<count($tablo);$i++){
- if($i%$nbcol==0)
- echo '<tr>';
- echo '<td><img src="../images/'.$tablo1[$i]['img'].'alt="img" /></td>';
- //si la colonne est la dernière de la ligne
- if($i%$nbcol==($nbcol-1))
- //on ferme cette ligne
- echo '</tr>';
- }
- //si 1 seule colonne dans la ligne
- if($i%$nbcol==1) {
- //on ajoute deux colonnes
- echo '<td> </td><td> </td>';
- //on ferme la ligne
- echo '</tr>';
- }
- //si 2 colonnes dans la ligne
- if($i%$nbcol==2) {
- //on ajoute une troisième colonne
- echo '<td> </td>';
- //on ferme la ligne
- echo '</tr>';
- }
- echo '</table>';
- }
- ?>
Voilà, voilà.
Merci encore pour ta disponiobilité.
Bye
je comprend pas bien l'utilité de ca :
$tablo[]=$data;
tu marques comme commentaire : on stock nos données.
2 remarques. 1erement, tu peux tres bien utiliser $data[...] au lieu de $tablo[...] comme tu le fais, php a été conçu pour cela et c'est tant mieux. 2eme remarque maintenant, si tu fais cela, a la sortie de ta boucle, tu auras un tableau $tablo[] qui contiendra, a chaque index, un tableau correspondant a une ligne retournée par ta requete, enfin je pense que ca fera ca donc c'est mal :)
voila a+ :)
$tablo[]=$data;
tu marques comme commentaire : on stock nos données.
2 remarques. 1erement, tu peux tres bien utiliser $data[...] au lieu de $tablo[...] comme tu le fais, php a été conçu pour cela et c'est tant mieux. 2eme remarque maintenant, si tu fais cela, a la sortie de ta boucle, tu auras un tableau $tablo[] qui contiendra, a chaque index, un tableau correspondant a une ligne retournée par ta requete, enfin je pense que ca fera ca donc c'est mal :)
voila a+ :)
enleve la 2eme remarque j'avais pas bien lu ton code . Mais la premiere fonction toujours . Prkoi faire une while et une for quand on peut tout mettre dans la premiere while ? :)
Salut Bibi,
Bah pour $tablo[]=$data j'ai trouvé ça ds les astuces du site : affichage sur plusieurs colonnes, et comme j'avais besoin de compter autrement qu'avec mysql_num_rows(), le count($tablo) me semblait parfait et j'en ai déduit qu'il fallait un tablo pour stocker les données et pouvoir les compter. Mes connaissances en PHP ne m'ont même pas permis d'oser me poser la question.
Jusque là j'utilisais ce script (mon premier qui a fonctionné d'ailleurs...)
Mais là si je n'ai pas de données <table></table> est généré et c ce que je veux éviter.
Donc, si je t'ai bien compris,
c'est possible !!!
Je teste ça dès demain matin...
Merci pour la patience.
Bah pour $tablo[]=$data j'ai trouvé ça ds les astuces du site : affichage sur plusieurs colonnes, et comme j'avais besoin de compter autrement qu'avec mysql_num_rows(), le count($tablo) me semblait parfait et j'en ai déduit qu'il fallait un tablo pour stocker les données et pouvoir les compter. Mes connaissances en PHP ne m'ont même pas permis d'oser me poser la question.
Jusque là j'utilisais ce script (mon premier qui a fonctionné d'ailleurs...)
- <?php
- echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
- //on détermine le nombre de colonnes
- $nbcol=3;
- //on se positionne en début de ligne
- $col=1;
- //on scanne
- while($data = mysql_fetch_assoc($rsLiens)) {
- //si on est à la première colonne
- if ($col==1) {
- //on ouvre la ligne
- echo '<tr>';
- }
- //on affiche les cellules
- echo '<td>'.$data['nom'].'</td>';
- //on passe à la colonne suivante
- $col=$col+1;
- //si on va dépasser le nombre de colonnes
- If ($col>$nbcol) {
- //on ferme la ligne
- echo'</tr>';
- //on revient à la première colonne
- $col=1;
- }
- }
- //autrement
- if ($col<>1) {
- //pour le nombre de cellules restant pour finir la ligne
- for ($i=$col;$i<=$nbcol;$i++) {
- //on affiche un espace
- echo '<td> </td>';
- }
- //on ferme la ligne
- echo '</tr>';
- }
- echo '</table>';
- ?>
Mais là si je n'ai pas de données <table></table> est généré et c ce que je veux éviter.
Donc, si je t'ai bien compris,
- while($data = mysql_fetch_assoc($rsLiens)) {
- if(!count($data)==0) {
- if($col==1) {
Je teste ça dès demain matin...
Merci pour la patience.
B'soir,
Pour conclure, le code qui fonctionne, complète éventuellement l'astuce du site affichage sur n colonnes et validé W3C :
Le PHP c géant !!!
Merci pour tout et à la prochaine.
Pour conclure, le code qui fonctionne, complète éventuellement l'astuce du site affichage sur n colonnes et validé W3C :
- <?php
- //--- une requête
- $req = 'select la_table.champ from la_table';
- //--- Résultat
- $res = mysql_query($req);
- //--- total des enregistrements
- $total_res = mysql_num_rows($res);
- //si il y a des enregistrements (si le total des enregistrements est différent de 0)
- if(!$total_res==0) {
- //on ouvre notre tableau
- echo '<table>';
- //on détermine le nombre de colonnes
- $nbcol=5;
- //on se positionne en début de ligne
- $col=1;
- //on scanne tous les enregistrements
- while($data = mysql_fetch_assoc($res)) {
- //si on est à la première colonne
- if ($col==1) {
- //on ouvre la ligne
- echo '<tr>';
- }
- //on affiche les cellules
- echo '<td>'.$data['champ'].'</td>';
- //on passe à la colonne suivante
- $col=$col+1;
- //si on va dépasser le nombre de colonnes
- If ($col>$nbcol) {
- //on ferme la ligne
- echo'</tr>';
- //on revient à la première colonne
- $col=1;
- }
- }
- //autrement
- if ($col<>1) {
- //pour le nombre de cellules restant
- for ($i=$col;$i<=$nbcol;$i++) {
- //on affiche des cellules avec un espace
- echo "<td> </td>";
- }
- //on ferme la ligne
- echo "</tr>";
- }
- echo "</table>";
- }
- //si il n'y a pas d'enregistrement (total des enregistrements égal à 0)
- else {
- //on l'affiche
- echo '<div align="center">Aucun enregistrement</div>';
- }
- //on libère la mémoire allouée
- mysql_free_result($rsAlbum);
- //on ferme la connexion
- mysql_close();
- ?>
Le PHP c géant !!!
Merci pour tout et à la prochaine.
Accès rapide :
Remonter 

