Bug dans l'astuce Affichage sur plusieurs colonnes ?

Répondre
Rolland
Rolland
Déconnecté
3SI - Sea, Sex, Sun and Internet
Bonjour,

Si je suis le script du site avec par exemple 2 colonnes et 2 images j'obtiens :
  1.  
  2. <table>
  3. <tr>
  4. <td width="50%"><img src="img_1.gif" alt="1"></td>
  5. <td width="50%"><img src="img_2.gif" alt="2"></td>
  6. </tr>
  7. </table>
  8.  

Parfait ! J'ai mes deux colonnes et un code correct.

Mais avec 2 colonnes et 3 images j'obtiens :
  1.  
  2. <table>
  3. <tr>
  4. <td width="50%"><img src="img_1.gif" alt="1"></td>
  5. <td width="50%"><img src="img_2.gif" alt="2"></td>
  6. </tr>
  7. <tr>
  8. <td width="50%"><img src="img_3.gif" alt="3"></td>
  9. </table>
  10.  

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 !
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Oui mettre un colspan="2" sur le dernier affichage quand tu as un nombre impair d'élément à placer.

Utilise l'opérateur modulo : %.
Rolland
Rolland
Déconnecté
3SI - Sea, Sex, Sun and Internet
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...
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
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".
Rolland
Rolland
Déconnecté
3SI - Sea, Sex, Sun and Internet
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.
  1.  
  2. <?php
  3. //on scanne  
  4. while($data = mysql_fetch_assoc($rsPart)) { 
  5.    // on stocke nos donn&eacute;es 
  6.    $tablo[]=$data;  
  7. }  
  8. //pour ne pas que <table></table> s'affiche si tablo est vide  
  9. if(!count($tablo)==0) { 
  10.    $nbcol=3; //---on d&eacute;termine le nombre de colonnes de l'affichage 
  11.    echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">'; 
  12.    //Pour le nombre de tuples trouvé 
  13.    for($i=0;$i<count($tablo);$i++){ 
  14.       if($i%$nbcol==0) 
  15.    echo '<tr>'; 
  16.    echo '<td><img src="../images/'.$tablo1[$i]['img'].'alt="img" /></td>'; 
  17.    //si la colonne est la dernière de la ligne 
  18.       if($i%$nbcol==($nbcol-1)) 
  19.    //on ferme cette ligne 
  20.       echo '</tr>'; 
  21.    } 
  22.    //si 1 seule colonne dans la ligne 
  23.    if($i%$nbcol==1) { 
  24.       //on ajoute deux colonnes 
  25.       echo '<td>&nbsp;</td><td>&nbsp;</td>'; 
  26.       //on ferme la ligne 
  27.       echo '</tr>'; 
  28.    } 
  29.    //si 2 colonnes dans la ligne 
  30.    if($i%$nbcol==2) { 
  31.       //on ajoute une troisième colonne        
  32.    echo '<td>&nbsp;</td>'; 
  33.       //on ferme la ligne 
  34.       echo '</tr>'; 
  35.    } 
  36.    echo '</table>';  
  37. }  
  38. ?>
  39.  

Voilà, voilà.

Merci encore pour ta disponiobilité.

Bye
bibi
bibi
Déconnecté
commit suicide
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+ :)
bibi
bibi
Déconnecté
commit suicide
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 ? :)
Rolland
Rolland
Déconnecté
3SI - Sea, Sex, Sun and Internet
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...)
  1.  
  2. <?php
  3. echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';  
  4. //on détermine le nombre de colonnes  
  5. $nbcol=3;  
  6. //on se positionne en début de ligne  
  7. $col=1;  
  8. //on scanne  
  9. while($data = mysql_fetch_assoc($rsLiens)) { 
  10.    //si on est à la première colonne 
  11.    if ($col==1) { 
  12.       //on ouvre la ligne 
  13.       echo '<tr>'; 
  14.    } 
  15.    //on affiche les cellules 
  16.    echo '<td>'.$data['nom'].'</td>'; 
  17.    //on passe à la colonne suivante 
  18.    $col=$col+1; 
  19.    //si on va dépasser le nombre de colonnes 
  20.    If ($col>$nbcol) { 
  21.       //on ferme la ligne 
  22.       echo'</tr>'; 
  23.       //on revient à la première colonne 
  24.       $col=1; 
  25.       
  26.    }  
  27. }  
  28. //autrement  
  29. if ($col<>1) { 
  30.    //pour le nombre de cellules restant pour finir la ligne 
  31.    for ($i=$col;$i<=$nbcol;$i++) { 
  32.       //on affiche un espace 
  33.       echo '<td>&nbsp;</td>'; 
  34.    } 
  35.    //on ferme la ligne 
  36.    echo '</tr>';  
  37. }  
  38. echo '</table>';  
  39. ?>  
  40.  

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,
  1. while($data = mysql_fetch_assoc($rsLiens)) {
  2. if(!count($data)==0) {
  3. if($col==1) { 
c'est possible !!!
Je teste ça dès demain matin...

Merci pour la patience.
Rolland
Rolland
Déconnecté
3SI - Sea, Sex, Sun and Internet
B'soir,
Pour conclure, le code qui fonctionne, complète éventuellement l'astuce du site affichage sur n colonnes et validé W3C :
  1.  
  2. <?php
  3. //--- une requête  
  4. $req = 'select la_table.champ from la_table';  
  5. //--- Résultat  
  6. $res = mysql_query($req);  
  7. //--- total des enregistrements  
  8. $total_res = mysql_num_rows($res);  
  9. //si il y a des enregistrements (si le total des enregistrements est différent de 0)  
  10. if(!$total_res==0) { 
  11.    //on ouvre notre tableau 
  12.    echo '<table>'; 
  13.    //on détermine le nombre de colonnes 
  14.    $nbcol=5; 
  15.    //on se positionne en début de ligne 
  16.    $col=1; 
  17.    //on scanne tous les enregistrements 
  18.    while($data = mysql_fetch_assoc($res)) { 
  19.       //si on est à la première colonne 
  20.       if ($col==1) { 
  21.          //on ouvre la ligne 
  22.          echo '<tr>'; 
  23.       } 
  24.       //on affiche les cellules 
  25.       echo '<td>'.$data['champ'].'</td>'; 
  26.       //on passe à la colonne suivante 
  27.       $col=$col+1; 
  28.       //si on va dépasser le nombre de colonnes 
  29.       If ($col>$nbcol) { 
  30.          //on ferme la ligne 
  31.          echo'</tr>'; 
  32.          //on revient à la première colonne 
  33.          $col=1; 
  34.       } 
  35.    } 
  36.    //autrement 
  37.    if ($col<>1) { 
  38.       //pour le nombre de cellules restant 
  39.       for ($i=$col;$i<=$nbcol;$i++) { 
  40.          //on affiche des cellules avec un espace 
  41.          echo "<td>&nbsp;</td>"; 
  42.       } 
  43.       //on ferme la ligne 
  44.       echo "</tr>"; 
  45.    } 
  46.    echo "</table>";  
  47. }  
  48. //si il n'y a pas d'enregistrement (total des enregistrements égal à 0)  
  49. else { 
  50.    //on l'affiche 
  51.    echo '<div align="center">Aucun enregistrement</div>';  
  52. }  
  53. //on libère la mémoire allouée  
  54. mysql_free_result($rsAlbum);  
  55. //on ferme la connexion  
  56. mysql_close();  
  57. ?>  

Le PHP c géant !!!
Merci pour tout et à la prochaine.
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog