Page 1 sur 1

[RESOLU]Tableaux array ou foreach ou for ou while ???

Posté : 09 sept. 2008, 17:03
par tyjez
Bonjour à tous,
j'ai un petit soucis d'affichage en tableau.
J'ai une requête de ce type:
$sql="SELECT numéro FROM serie WHERE fraction='mafraction'";
$req=mysql_query($sql) OR DIE ("erreur de requête sql<br />".mysql_error());

Au niveau requête je n'ai aucun soucis mais je n'arrive pas a l'exploiter. Je m'explique:
En fait j'ai plusieurs numéro qui me sont retourné avec la requête et je souhaiterai les afficher dans un seul et meme tableau de 10 colonnes et avec autant de ligne que besoin.

J'ai essayé toute l'après midi mais je n'y arrive pas.
Quelqun peut il eclairer ma lanterne svp ?
Par avance Merci :)

Posté : 09 sept. 2008, 17:12
par _activmik
$array=mysql_fetch_array(mysql_query($req)) 
Tu auras toutes les données de ta requete sql dans ce tableau, une ligne valant un enregistrement de ta table.

En espérant t'avoir mis sur la piste,

Posté : 09 sept. 2008, 17:16
par tyjez
En fait ce que je pige pas c'est comment avoir ma reprséentation html avec les données du array:
a savoir:

Code : Tout sélectionner

<tr><td>donnée 1</td><td>donnée 2</td><td>donnée 3</td><td>donnée 4</td></tr> <tr><td>donnée 5</td><td>donnée 6</td><td>donnée 7</td><td>donnée 8</td></tr>
ETC ...

Posté : 09 sept. 2008, 19:04
par sadeq
Bonjour tyjez,

Sois très attentif je t'explique.

ça tu sais le faire :
$sql="SELECT numéro FROM serie WHERE fraction='mafraction'";
$req=mysql_query($sql) OR DIE ("erreur de requête sql<br />".mysql_error()); 
Et tu l'as bien fait. Tu sais aussi, je suppose, comment lire le résultat de ta requête ligne par ligne :
while ( $req && $row = mysql_fetch_array($req) ) {
       // récupérer un champ de $row
       $numero = $row["numéro"];
       // traitrement :
      ....
}
Alors, pour afficher les numéros lus sous forme de table HTML, il faut poser l'affichage de chaque cellule <td> dans la boucle while de lecture de $row. On est bien d'accord ? ok, comme ça :
while ( $req && $row = mysql_fetch_array($req) ) {
       // récupérer un champ de $row
       $numero = $row["numéro"];
       // traitrement  : afficher une cellule pour $numero
      echo "<td>" . $numero . "</td>";
}
Seulement, il faut bien encadrer le <td> imprimé par la bonne structure HTML d'une table. C'est à dire : une <td> se trouve dans une <tr> qui se trouve dans une <table>
Et sachant que toi tu veux imprimer 4 <td> par <tr> alors il faut que la boucle while fasse un petit comptage jusqu'à 4 avant de placer le <tr> à chaque fois.

Ceci dit, voici l'algorithme récap :
  • 1. afficher la balise <table> avant le while car ce dernier est sensé afficher des <tr> contenant chacune 4 <td>
    2. initialiser à 1 un compteur $col qui comptera jusqu'à 4 avant de se remettre à 1. Il sera utilisé pour placer une <tr>
    3. Dans la boucle while : afficher une <tr> si le compteur $col est = 1 (c'est normal, le <tr> doit être placé avant la première <td>
    4. Dans la boucle while : afficher une <td> portant la donnée $numero
    5. Dans la boucle while : incrémenter le compteur $col
    6. Dans la boucle while : afficher une </tr> si le compteur $col >4, puis le réinitialiser à 1
    7. Après la fin de la boucle while : fermer la table par </table>
As-tu compris ? si oui, écris le code PHP correspondant à cet algorithme.

Posté : 10 sept. 2008, 12:22
par tyjez
Et bien je te remercie. je savais que c'etait simple pourtant mais je me suis trituré le cerveau pour rien :p

Pour ceux que ca interesse voici ce que j'ai fait
$sql="SELECT monchamp FROM matable WHERE lechampquiminteresse='' ";
$req=mysql_query($sql) OR DIE ("Erreur de requête sql <br />".mysql_error());
$i=1;
echo "<table>";
while($var=mysql_fetch_array($req)) {
$monchamp=$var['monchamp'];

if ($i==1) { 
 echo "<tr>"; 
}

echo "<td>".$monchamp."</td>";
$i++;

if ($i>10) {
echo "</tr>";
$i=1;
}
}
echo "</table>";

Voila je l'ai fait pour un tableau de dix colonnes et ca marche :)

Posté : 10 sept. 2008, 14:39
par Stef
Les tableaux c'est pas beau... c'est c'que disent les pro des css; d'ailleurs ils disent que mettre des div's de partout n'est pas mieux!
C'était juste une réflexion en passant... mais des fois un bon vieux tableau règle bien des problèmes quand on a pas le choix.
Et une question en passant: on peut mettre des accents dans le nom d'un champ? -> cf le "numéro" dans la requête de tyjez.

Posté : 10 sept. 2008, 14:55
par sadeq
Et une question en passant: on peut mettre des accents dans le nom d'un champ? -> cf le "numéro" dans la requête de tyjez.
Oui, on peut utiliser les accents pour nommer des objets sous PHP et les bases de données (SQL). Sauf pour les noms de fichiers utilisés par PHP, là ça coince car PHP n'arrive pas à charger un fichier dont le nom est accentué.