begin process at 2012 02 15 20:04:20
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > AFFICHAGE EN TABLEAU : AFFICHER DES DONNÉES DANS UN TABLEAU

AFFICHAGE EN TABLEAU : AFFICHER DES DONNÉES DANS UN TABLEAU


 Information sur le tutoriel

Note :
Aucune note

 Description

Création d'un tableau "à la volée" pour afficher ses données, provenant d'un array() ou d'une base de données.

Affichage "en ligne" ou "en colonne".

Tutorial

Mon tutorial original se trouve ici :
http://www.asp-php.net/tutorial/asp-php/tableaux.php

Tables simples 

Structure d'un tableau (table) :

affiche

<table>
   <tr>
      <td>ligne1 colonne1</td>
      <td>ligne1 colonne2</td>
      <td>ligne1 colonne3</td>
      <td>ligne1 colonne4</td>
   </tr>
   <tr>
      <td>ligne2 colonne1</td>
      <td>ligne2 colonne2</td>
      <td>ligne2 colonne3</td>
      <td>ligne2 colonne4</td>
   </tr>
...
</table>

ligne1 colonne1

ligne1 colonne2

ligne1 colonne3

ligne1 colonne4

ligne2 colonne1

ligne2 colonne2

ligne2 colonne3

ligne2 colonne4

...

 

 

 

a- Tableau de NbrCol colonnes par NbrLigne lignes :

<html><body>
<?php
// $NbrCol : le nombre de colonnes
// $NbrLigne : le nombre de lignes
// -------------------------------------------------------
echo '<table>';
for ($i=1; $i<=$NbrLigne; $i++) {
   echo '<tr>';
   for ($j=1; $j<=$NbrCol; $j++) {
         echo '<td>';
          // ------------------------------------------
          // AFFICHAGE ligne $i, colonne $j
         echo $affichage;
          // ------------------------------------------
         echo '</td>';
   }
   echo '</tr>';
   $j=1;
}
echo '</table>';
?>
</body></html>

b- Table de multiplication : exemple amélioré

i X j

1

2

3

4

5

6

7

8

9

1

1

2

3

4

5

6

7

8

9

2

2

4

6

8

10

12

14

16

18

3

3

6

9

12

15

18

21

24

27

4

4

8

12

16

20

24

28

32

36

5

5

10

15

20

25

30

35

40

45

6

6

12

18

24

30

36

42

48

54

7

7

14

21

28

35

42

49

56

63

8

8

16

24

32

40

48

56

64

72

9

9

18

27

36

45

54

63

72

81

 

<html><body>
<?php
// $NbrCol : le nombre de colonnes
// $NbrLigne : le nombre de lignes
$NbrCol = 9;
$NbrLigne = 9;
// --------------------------------------------------------
// on affiche en plus sur les 1ere ligne et 1ere colonne 
// les valeurs a multiplier (dans des cases en couleur)
// le tableau fera donc 10 x 10
// --------------------------------------------------------
echo '<table border="1" width="400">';
// 1ere ligne (ligne 0)
   echo '<tr>';
   echo '<td bgcolor="#CCCCCC">i X j</td>';
   for ($j=1; $j<=$NbrCol; $j++) {
      echo '<td bgcolor="#FFFF66">'.$j.'</td>';
   }
   echo '</tr>';


// -------------------------------------------------------
// lignes suivantes
for ($i=1; $i<=$NbrLigne; $i++) {
   echo '<tr>';
   for ($j=1; $j<=$NbrCol; $j++) {
       // 1ere colonne (colonne 0)
      if ($j==1) {
         echo '<td bgcolor="#FFFF66">'.$i.'</td>';
      }
       // colonnes suivantes
         if ($i==$j) {
            echo '<td bgcolor="#FFCC66">';
         } else {
            echo '<td>';
         }

       // ------------------------------------------
       // AFFICHAGE ligne $i, colonne $j
      echo $i*$j;
       // ------------------------------------------
      echo '</td>';
   }
   echo '</tr>';
   $j=1;
}
echo '</table>';
?>
</body></html>

Affichage "en ligne" avec array()

Affichage d'un certains nombres de données dans un tableau :
- On veut que le tableau fasse un nombre déterminé de colonnes.
Mais on ne connait pas à l'avance le nombre de données récupérées :
- il faut donc pouvoir afficher (automatiquement) autant de lignes que nécessaire.

Récupération des éléments d'un tableau Array()

A noter : le premier indice d'un array() est 0 (zéro)

a- AVEC calcul du nombre de lignes AVANT affichage

L'exemple ci-dessous affiche :

le code généré :

elt0

elt1

elt2

elt3

elt4

elt5

 

 

<table border="1">
   <tr>
      <td>elt0</td>
      <td>elt1</td>
      <td>elt2</td>
      <td>elt3</td>
   </tr>
   <tr>
      <td>elt4</td>
      <td>elt5</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
   </tr>
</table>

 

<html><body>
<?php
// $NbreData : le nombre de données à afficher
// $NbrCol : le nombre de colonnes
// $NbrLigne : calcul automatique AVANT affichage
// -------------------------------------------------------
// (exemple)
$NbrCol = 4;
$tableau = array('elt0','elt1','elt2','elt3','elt4','elt5');
// -------------------------------------------------------
$NbreData = sizeof($tableau);
// -------------------------------------------------------
// calcul du nombre de lignes
if (round($NbreData/$NbrCol)!=($NbreData/$NbrCol)) {
   $NbrLigne = round(($NbreData/$NbrCol)+0.5);
} else {
   $NbrLigne = $NbreData/$NbrCol;
}
// -------------------------------------------------------
// affichage
if ($NbreData != 0) {
$k = 0;
echo '<table border="1">';
for ($i=1; $i<=$NbrLigne; $i++) {
   echo '<tr>';
   for ($j=1; $j<=$NbrCol; $j++) {
      if ($k<$NbreData) {
         echo '<td>';
          // ------------------------------------------
          // AFFICHAGE de l'element
         echo $tableau[$k];
          // ------------------------------------------
         echo '</td>';
         $k++;
      } else {    //  case vide
         echo '<td>&nbsp;</td>';
      }
   }
   echo '<tr>';
   $j=1;
}
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?>
</body></html>

b- SANS calcul du nombre de lignes

C'est une façon différente d'aborder le problème :
- affichage "tant qu'il y a des données ..." (while ...)

- L'astuce : on utilise la propriété "modulo" (Mod en ASP et % en PHP )
qui renvoie le reste de la division entière du 1er chiffre par le 2ème
Exemple :

1 % 4 = 1

2 % 4 = 2

3 % 4 = 3

4 % 4 = 0

5 % 4 = 1

6 % 4 = 2

7 % 4 = 3

8 % 4 = 0

9 % 4 = 1

...

 

 

Donc :
- quand le modulo = 1 : première colonne
- quand le modulo = 0 : dernière colonne

Le nombre de lignes (NbrLigne) est incrémenté au fur et à mesure :
- on le récupère A LA FIN. éventuellement
- ou on l'intercepte en cours de route (pour pagination)

L'exemple ci-dessous affiche :

le code généré :

elt0

elt1

elt2

elt3

elt4

elt5

 

 

<table border="1">
   <tr>
      <td>elt0</td>
      <td>elt1</td>
      <td>elt2</td>
      <td>elt3</td>
   </tr>
   <tr>
      <td>elt4</td>
      <td>elt5</td>
   </tr>
</table>

 

<html><body>
<?php
// $NbreData : le nombre de données à afficher
// $NbrCol : le nombre de colonnes
// $NbrLigne : calcul automatique a la FIN
// -------------------------------------------------------
// (exemple)
$NbrCol = 4;
$tableau = array('elt0','elt1','elt2','elt3','elt4','elt5');
// -------------------------------------------------------
$NbreData = sizeof($tableau);
// -------------------------------------------------------
// affichage
$NbrLigne = 0;
if ($NbreData != 0) {
$k = 0;
$j = 1;
echo '<table border="1">';
while ($k < $NbreData) {
   if ($j%$NbrCol == 1) {
      $NbrLigne++;
      echo "<tr>";
      $fintr = 0;
   }
   echo '<td>';
    // ------------------------------------------
    // AFFICHAGE de l'element
   echo $tableau[$k];
    // ------------------------------------------
   echo '</td>';
   $k++;
   if ($j%$NbrCol == 0) {
      echo "</tr>"; 
      $fintr = 0;
   }
   $j++;
}
if ($fintr!=1) { echo '</tr>'; }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?>
</body></html>

Affichage "en ligne" avec base de données

Affichage de données récupérées par une requête dans une base de données.
- On veut afficher dans chaque case les données provenant d'un enregistrement
- On veut que le tableau fasse un nombre déterminé de colonnes.
Mais on ne connait pas à l'avance le nombre de données récupérées :
- il faut donc pouvoir afficher (automatiquement) autant de lignes que nécessaire.

Dans la partie "AFFICHAGE des DONNEES de la fiche" : Tout est possible !
- afficher plusieurs données,
- afficher des images,
- les organiser dans un tableau,
- ajouter des liens hypertext,
- ...

Même principe que "b- SANS calcul du nombre de lignes" :

- affichage "tant qu'il y a des données ..." while ...
- L'astuce : on utilise la propriété "modulo"

Exemple
La table MATABLE :

champs

valeurs

NUM

1

2

3

4

5

6

7

8

9

10

DONNEE

banane

betterave

boule

pomme

ananas

baie

bille

citron

bonbon

ballon

TYPE

fruit

legume

jouet

fruit

fruit

fruit

jouet

fruit

douceur

jouet

La requête : toutes les données commençant par un "b", classées par ordre alphabétique.

L'exemple ci-dessous affiche :

le code généré :

baie
fruit

ballon
jouet

banane
fruit

betterave
legume

bille
jouet

bonbon
douceur

boule
jouet

 

<table border="1">
   <tr>
      <td>baie<br><i>fruit</i></td>
      <td>ballon<br><i>jouet</i></td>
      <td>banane<br><i>fruit</i></td>
      <td>betterave<br><i>legume</i></td>
   </tr>
   <tr>
      <td>bille<br><i>jouet</i></td>
      <td>bonbon<br><i>douceur</i></td>
      <td>boule<br><i>jouet</i></td>
   </tr>
</table>

 

<?php  include("_connexion.php") ; ?>
<html><body>
<?php
// $NbreData : le nombre de données à afficher
// $NbrCol : le nombre de colonnes
// $NbrLigne : calcul automatique a la FIN
// -------------------------------------------------------
// (exemple)
$NbrCol = 4;
// requete
$table = 'MATABLE';
$condition = ' WHERE DONNEE LIKE \'b%\' ORDER BY DONNEE ASC';
$query = 'SELECT * FROM '.$table.$condition;
$result = mysql_query($query);

// -------------------------------------------------------
$NbreData = mysql_num_rows($result);
// -------------------------------------------------------
// affichage
$NbrLigne = 0;
if ($NbreData != 0) {
$j = 1;
echo '<table border="1">';
while ($val = mysql_fetch_array($result)) {
   if ($j%$NbrCol == 1) {
      $NbrLigne++;
      echo "<tr>";
      $fintr = 0;
   }
   echo '<td>';
    // ------------------------------------------
    // AFFICHAGE des DONNEES de la fiche
   echo $val['DONNEE'];
   echo '<br>';
   echo '<i>'.$val['TYPE'].'</i>';
    // ------------------------------------------
   echo '</td>';
   if ($j%$NbrCol == 0) {
      echo "</tr>"; 
      $fintr = 1;
   }
   $j++;

}
if ($fintr!=1) { echo '</tr>'; }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?>
</body></html>
<?php
// deconnexion de la base
mysql_close(); 
?>

Affichage "en Colonne"

Les scripts précédents affichent les données "en ligne".

Affichage des résultats "en colonne" :
- pour un nombre de lignes (NbreLigne) défini,
- il faut pouvoir afficher (automatiquement) autant de colonnes que nécessaire.


a- Solution 1 (la plus simple)
Exemple avec Array() (même principe avec Base de données)

Principe :
- une table d'une ligne (invisible),
- dans chaque cellule : création d'une table d'1 colonne et NbreLigne lignes,
- ajout de cellules supplémentaires "tant qu'on a des données ..."

L'exemple ci-dessous affiche :

le code généré :

elt0

elt1

elt2

elt3

elt4

elt5

elt6

elt7

elt8

elt9

<table><tr>
   <td valign="top">
      <table border="1">
      <tr><td>elt0</td></tr>
      <tr><td>elt1</td></tr>
      <tr><td>elt2</td></tr>
      </table>
   </td>
   <td valign="top">
      <table border="1">
      <tr><td>elt3</td></tr>
      <tr><td>elt4</td></tr>
      <tr><td>elt5</td></tr>
      </table>
   </td>
   <td valign="top">
      <table border="1">
      <tr><td>elt6</td></tr>
      <tr><td>elt7</td></tr>
      <tr><td>elt8</td></tr>
      </table>
   </td>
   <td valign="top">
      <table border="1">
      <tr><td>elt9</td></tr>
      </table>
   </td>
</tr></table>

 

<html><body>
<?php
// $NbreData : le nombre de données à afficher
// $NbrLigne : le nombre de lignes
// $NbrCol : le nombre de colonnes : calcul automatique
// -------------------------------------------------------
// (exemple)
$NbrLigne = 3;
$tableau = array('elt0','elt1','elt2','elt3','elt4','elt5','elt6','elt7','elt8','elt9');
// -------------------------------------------------------
$NbreData = sizeof($tableau);
// -------------------------------------------------------
$NbrCol = 0;
// affichage
if ($NbreData != 0) {
$k = 0;
echo '<table><tr>';
while ($k < $NbreData) {
   echo '<td valign="top">';
   echo '<table border="1">';
   for ($i=1; $i<=$NbrLigne; $i++) {
      if ($k < $NbreData) {
         echo '<tr><td>';
          // --------------------------------------
          // AFFICHAGE de l'element
         echo $tableau[$k];
          // --------------------------------------
         echo '</td></tr>';
         $k++;
      }
      if ($i == $NbrLigne) {
         echo '</table>';
         echo '</td>';
      }
   }
   $NbrCol++;
}
echo '</tr></table>';
} else {
echo 'pas de données à afficher';
}
?>
</body></html>

b- Solution 2, avec Array()

La solution 1 est efficace, mais pas satisfaisante si on souhaite bien aligner toutes les cellules.

Principe :
- une seule table,
- le remplissage se fait ligne par ligne en testant le "modulo" :
Exemple
10 éléments (elt0 à elt9) sur 3 lignes.
On doit les afficher dans cet ordre : (voir le code généré)

ligne 0 :

elt0 - elt3 - elt6 - elt9

0 Mod 3 = 3 Mod 3 = 6 Mod 3 = 9 Mod 3 = 0

ligne 1 :

elt1 - elt4 - elt7

1 Mod 3 = 4 Mod 3 = 7 Mod 3 = ... = 1

ligne 2 :

elt2 - elt5 - elt8

2 Mod 3 = 5 Mod 3 = 8 Mod 3 = ... = 2

 

L'exemple ci-dessous affiche :

le code généré :

elt0

elt3

elt6

elt9

elt1

elt4

elt7

 

elt2

elt5

elt8

 

<table border="1">
   <tr>
      <td>elt0</td>
      <td>elt3</td>
      <td>elt6</td>
      <td>elt9</td>
   </tr>
   <tr>
      <td>elt1</td>
      <td>elt4</td>
      <td>elt7</td>
   </tr>
   <tr>
      <td>elt2</td>
      <td>elt5</td>
      <td>elt8</td>
   </tr>
</table>

 

<html><body>
<?php
// $NbreData : le nombre de données à afficher
// $NbrLigne : le nombre de lignes
// $NbrCol : le nombre de colonnes : calcul automatique
// -------------------------------------------------------
// (exemple)
$NbrLigne = 3;
$tableau = array('elt0','elt1','elt2','elt3','elt4','elt5'
                                               ,'elt6','elt7','elt8','elt9');
// -------------------------------------------------------
$NbreData = sizeof($tableau);
// -------------------------------------------------------
// affichage
if ($NbreData != 0) {
$i = 0;
$NbrCol = 0;
echo '<table border="1">';
   for ($i=0; $i<$NbrLigne; $i++) {
      echo '<tr>';
      $j = 0;
      while (($i+($j*$NbrLigne))%$NbrLigne==$i && ($i+($j*$NbrLigne))<$NbreData) {
         echo '<td>';
          // --------------------------------------
          // AFFICHAGE de l'element
         $k = ($i+($j*$NbrLigne));
         echo $tableau[$k];
          // --------------------------------------
         echo '</td>';
         $j++;
         if ($NbrCol<$j) { $NbrCol=$j; }
      }
      echo '</tr>';
   }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?>
</body></html>

c- Solution 2, avec base de données

Le script utilisant les indices de tableau :
- création d'un tableau array() contenant les données récupérées.

L'exemple ci-dessous affiche :

le code généré :

baie
fruit

bille
jouet

ballon
jouet

bonbon
douceur

banane
fruit

boule
jouet

betterave
legume

 

<table border="1">
   <tr>
      <td>baie<br><i>fruit</i></td>
      <td>bille<br><i>jouet</i></td>
   </tr>
   <tr>
      <td>ballon<br><i>jouet</i></td>
      <td>bonbon<br><i>douceur</i></td>
   </tr>
   <tr>
      <td>banane<br><i>fruit</i></td>
      <td>boule<br><i>jouet</i></td>
   </tr>
   <tr>
      <td>betterave<br><i>legume</i></td>
   </tr>
</table>

 

<?php  include("_connexion.php") ; ?>
<html><body>
<?php
// $NbreData : le nombre de données à afficher
// $NbrLigne : le nombre de lignes
// $NbrCol : calcul automatique
// -------------------------------------------------------
// (exemple)
$NbrLigne = 4;
// requete
$table = 'MATABLE';
$condition = 
' WHERE DONNEE LIKE \'b%\' ORDER BY DONNEE ASC';
$query = 'SELECT * FROM '.$table.$condition;
$result = mysql_query($query);
// -------------------------------------------------------
$NbreData = mysql_num_rows($result);
// ------------------------------------------------------- 
// creation d'un tableau array() par donnees
$k=0;
while ($val = mysql_fetch_array($result)) {
   $tableau1[$k] = $val['DONNEE'];
   $tableau2[$k] = $val['TYPE'];
   $k++;
}
// -------------------------------------------------------
// affichage
if ($NbreData != 0) {
$i = 0;
$NbrCol = 0;
echo '<table border="1">';
   for ($i=0; $i<$NbrLigne; $i++) {
      echo '<tr>';
      $j = 0;
      while (($i+($j*$NbrLigne))%$NbrLigne==$i && ($i+($j*$NbrLigne))<$NbreData) {
         echo '<td>';
          // --------------------------------------
          // AFFICHAGE de l'element
         $k = ($i+($j*$NbrLigne));
         echo $tableau1[$k];
         echo '<br>';
         echo '<i>'.$tableau2[$k].'</i>';
          // --------------------------------------
         echo '</td>';
         $j++;
         if ($NbrCol<$j) { $NbrCol=$j; }
      }
      echo '</tr>';
   }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?>
</body></html>
<?php
mysql_close(); 
?>

Astuce :
Au lieu de créer un tableau array() pour chaque donnée récupérée (tableau1, tableau2, ...),
il est possible de créer un seul tableau array() :
- en PHP, c'est très simple et très pratique.

<?php
// ...
// ------------------------------------------------------- 
// creation d'un seul array avec toutes les donnees
$k=0;
while ($val = mysql_fetch_array($result)) {
   $tableau[$k] = $val;
   $k++;
}
// -------------------------------------------------------
// affichage
// ...
          // --------------------------------------
          // AFFICHAGE de l'element
         $k = ($i+($j*$NbrLigne));
         echo $tableau[$k]['DONNEE'];
         echo '<br>';
         echo '<i>'.$tableau[$k]['TYPE'].'</i>';
          // --------------------------------------
// ...
?>

 

 Historique

26 août 2008 15:29:56 :
mise en page
26 août 2008 15:46:03 :
mise en page bis
26 août 2008 16:01:49 :
mise en page 3 (pas moyen !)
26 août 2008 16:06:02 :
Note aux ADMIN : c'est nul de devoir justifier a chaque fois l'"explication de la modification" AVANT la "prévisualisation" Ce serait bien mieux de le faire APRES : avant de "VALIDER la modification" A bon entendeur ...
26 août 2008 16:10:05 :
mise en page (encore!)

Commentaires

Commentaire de oumsofiane1 le 11/10/2008 21:13:11

merci pour ce tutorial que je trouve très interessant, je voudrais bien savoir si c'est possible comment avancer dans une base de donnée, avec des boutons suivants, et précédent, pour afficher par exemple tout les éléments d'une BDD à fure à a mesure que l'utilisateur regarde.

Commentaire de jreaux62 le 21/03/2009 19:19:39

PAGINATION
(affichage sur plusieurs pages)

Plusieurs tutos ici :
http://www.phpcs.com/r/global.aspx?r=Pagination+php

Autre sources :
- Pagination
http://www.asp-php.net/tutorial/asp-php/pagination.php
- Comment créer un système de navigation (pagination)
http://php.developpez.com/faq/?page=concepts#concepts-pagination
- Créer un système de pagination automatique en PHP (exemple sur un livre d'or!)
http://antoine-herault.developpez.com/tutoriels/php/pagination-automatique-en-php/

Commentaire de Firy le 27/03/2009 23:09:12

Merçi de votre aide c'est trés importants

Commentaire de hippolyte_only le 15/04/2009 14:37:05

je suis une debutante en developpement web et je voudrais que vous m apportiez de laide a ce niveau. svp pouvez vous mapprtez des docs de php et mysql. merci de votre bonne comprehension

Commentaire de gouri le 15/05/2009 21:46:26

je vous remercie pour ce doc. il m'a ete tres utile  

Commentaire de Sebounet31 le 01/06/2009 21:20:20

Je te mets 8 parce que le problèmes des boucles imbriquées est incompréhensible pour les débutants comme moi et un peu de démystification fait du bien. Plus les inser dans bdd qui peuvent être bien utiles... ++

Commentaire de NuDub le 17/10/2009 17:50:07

Merci beaucoup pour ce tutoriel.

Sa m'intéresse beaucoup en ce moment et je suis aussi débutant et moi aussi la boucle imbriqué pas tous pigé.

Donc j'ai enlevé 1 point pour ça.

Et l'autre point enlever c'est car c'est un tuto très utile je trouve mais les parit code sont difficilement lisible, je veux dire assez dense même si c'est pas un long code.

Mais je sais pas si c'est le site qui oblige a ça ou pas.

En tous cas très bien expliqué, juste ces boucle imbriqué encore obscure.

Mais bravo car celui sur la BDD va surement me servir car maintenant il y a un tuto la dessus.

Merci et encre bravo.

PS: j'ai mis 8

Commentaire de Sebounet31 le 21/10/2009 23:47:30

Un truc cependant,exemple sur le premier, mais je vois qu'il y en a d'autres... je vois pas l'utilité de revenir à un $j=1; alors que la boucle est terminée. Une explication ?

Commentaire de jreaux62 le 22/10/2009 01:29:02

Sebounet31,
i incremente chaque ligne,
j incremente chaque colonne.
a la fin de la boucle decrivant la ligne i, on remet j=1 pour revenir a la 1ere colonne (a la ligne suivante).
cqfd.

Commentaire de Sebounet31 le 25/10/2009 18:29:03

@jreaux62
Je veux pas dire une de betises. Mais, des l'instant ou tu blos par un <tr/>, tu reviens à la ligne et chez moi, un code comme celui ci fonctionne tres bien:


<html><body>
<?php
// $NbrCol : le nombre de colonnes
// $NbrLigne : le nombre de lignes
// -------------------------------------------------------
echo '<table>';
for ($i=1; $i<=$NbrLigne; $i++) {
   echo '<tr>';
   for ($j=1; $j<=$NbrCol; $j++) {
         echo '<td>';
          // ------------------------------------------
          // AFFICHAGE ligne $i, colonne $j
         echo $affichage;
          // ------------------------------------------
         echo '</td>';
   }
   echo '</tr>';
  // $j=1;
}
echo '</table>';
?>
</body></html>

Je respecte ton travail mais j'aimerai comprendre. Cordialement.

Commentaire de jreaux62 le 25/10/2009 19:59:58

Dans la boucle, on affiche dans la case (ligne i, colonne j) :
// ------------------------------
// AFFICHAGE ligne $i, colonne $j
echo $affichage;
// ------------------------------

En fait, je n'ai pas précisé que $affichage dépend de la case dans laquelle cette valeur est affichée, autrement dit, cela dépend de $i et de $j.
Par exemple (voir la table de multiplication) : $affichage = $i*$j
Ce qui explique pourquoi il faut ré-initialiser avec $j=1; quand on revient a la 1ere colonne.

Commentaire de Sebounet31 le 26/10/2009 15:32:27

:hello: Même cause et m^mes effets. Tu reviens à la premiere colonne puisque à chaque incrementation de $i dans ($i=1; $i<=$NbrLigne; $i++),  tu iteres en entier cette partie là: for ($j=1; $j<=$NbrCol; $j++) et donc $j=1...  
if ($j===1 pour chicaner ;-)

Commentaire de Sebounet31 le 05/11/2009 11:17:39

Pas de réponse?

Commentaire de MarcoMada le 23/10/2011 02:12:59

Bonjour à tous,

Mon problème:
j'affiche mes données sur 2 colonnes , sachant qu'il y a 22 enregistrements dans la base, à la sortie du tableau il m'en manque un.
Merci de votre aide.

Marco

<fieldset><legend>Liste des régions</legend>
<?php  // affichage
$NbrLigne = 0;
if ($NbreData != 0) {
$j = 1;
echo '<table border="0">';
while ($val = mysql_fetch_array($regions)) {
   if ($j%$NbrCol == 1) {
      $NbrLigne++;
      echo "<tr>";
      $fintr = 0;
   }
   echo '<td>';
    // ------------------------------------------
    // AFFICHAGE des DONNEES de la fiche
   echo $val['region_nom'];

    // ------------------------------------------
   echo '</td>';
   if ($j%$NbrCol == 0) {
      echo "</tr>";
      $fintr = 1;
   }
   $j++;

}
if ($fintr!=1) { echo '</tr>'; }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?> </fieldset>
<?php mysql_close(); // deconnexion de la BD ?>

Commentaire de jreaux62 le 23/10/2011 08:30:21

Bonjour,
vérifie que tu n'as pas fait AVANT le while (entre la requete et le while(...)) :
$val = mysql_fetch_array($regions);
Je ne vois rien d'autre.

Commentaire de MarcoMada le 24/10/2011 14:12:18

Merci de ta réponse.

Nom je n'ai rien avant.

Voici la requete seul dans une page.

<?php
$NbrCol = 2;
mysql_select_db($database_itymada, $itymada);
$query_regions = "SELECT region_nom FROM ity2011_regions ORDER BY region_nom ASC";
$regions = mysql_query($query_regions, $itymada) or die(mysql_error());
$row_regions = mysql_fetch_assoc($regions);
$NbreData = mysql_num_rows($regions);
?>


Puis la mise en forme seul dans une autre.


<fieldset><legend><?php echo $ACC_LI_REG ?></legend>
<?php  // affichage
$NbrLigne = 0;
if ($NbreData != 0) {
$j = 1;
echo '<table border="0">';
while ($val = mysql_fetch_array($regions)) {
   if ($j%$NbrCol == 1) {
      $NbrLigne++;
      echo "<tr>";
      $fintr = 0;
   }
   echo '<td>';
    // ------------------------------------------
    // AFFICHAGE des DONNEES de la fiche
echo '<a href="index.php?ity=region&region=';
echo $val['region_nom'];
echo '">';
echo $val['region_nom'];
echo '</a>';


    // ------------------------------------------
   echo '</td>';
   if ($j%$NbrCol == 0) {
      echo "</tr>";
      $fintr = 1;
   }
   $j++;

}
if ($fintr!=1) { echo '</tr>'; }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?> </fieldset>


et tous cela appeler par une troisième page.

<div class="ity-content-layout-wrapper layout-item-0">
  <div class="ity-content-layout layout-item-1">
    <div class="ity-content-layout-row">
      <div class="ity-layout-cell layout-item-2" style="width: 33%;">
<?php require_once('./modules/footer/form/region_form.php'); ?>

<div align="center" class="content">
<?php require_once('region_view.php'); ?>


</div>


Après quelque recherche sur le net il semblerais que j'ai un problème du genre.

Il y a bien 22 enregistrements.
Mais lorsque il affiche il commence à compter à partir de zéro et donc à 22 c'est vide!!!

Quand pense tu? mon niveau est bas est vus mon age (52 ans) c'est pas très facile de tous faire rentré dans mon vieux crane.

Marco

Commentaire de jreaux62 le 24/10/2011 15:50:30

J'avais donc raison :
-> enlève (juste après la requête) : $row_regions = mysql_fetch_assoc($regions);
Car il "sort" un 1er enregistrement de la base.

Commentaire de MarcoMada le 24/10/2011 17:01:35

Super sa marche.
Un milliard de merci.

Marco

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,109 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales