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

Petit nouveau ! | 3 Messages

09 sept. 2008, 17:03

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 :)
Modifié en dernier par tyjez le 11 sept. 2008, 07:28, modifié 1 fois.

Eléphant du PHP | 169 Messages

09 sept. 2008, 17:12

$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,

Petit nouveau ! | 3 Messages

09 sept. 2008, 17:16

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 ...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 sept. 2008, 19:04

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 3 Messages

10 sept. 2008, 12:22

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 :)

Eléphant du PHP | 447 Messages

10 sept. 2008, 14:39

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.
Probably (only a) Human Problem?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 sept. 2008, 14:55

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é.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène