[SQL] Tableaux.

Tableaux. [SQL] - Programmation

Marsh Posté le 14-10-2001 à 10:45:13    

Salut !
 
J'ai un petit probleme pour mettre mes données de ma table sous forme de tableau !
 
Au lieu de faire un long discours, voici une image de ce que je sais faire et pas faire.
 
Bien sur, le but étant de m'aider a faire ce que je ne sais pas ! :D
 
http://www.kylesweb.com/sql.gif
 
Merci.

Reply

Marsh Posté le 14-10-2001 à 10:45:13   

Reply

Marsh Posté le 14-10-2001 à 12:40:25    

:??:
 
fais quand même un long discours

Reply

Marsh Posté le 14-10-2001 à 12:44:04    

En fait, je sais mettre mes données soit en ligne ou soit en colonne dans mon tableau de ma page html.
 
Mais moi, ce que je voudrais faire, c'est mettre mes données en ligne et en colonne comme le montre le dernier tableau de l'image.

 

[edtdd]--Message édité par kyle--[/edtdd]

Reply

Marsh Posté le 14-10-2001 à 13:02:51    

essaye un truc comme :
 
$i = 0;
$spaceRows = 3;
echo '<table border="1">';
while (mysql_fetch_array($result))
{
  if ($i % $spaceRows == 0) echo '<tr>';
  $i++;
  echo "<td> $row[blah]";
 
}
echo '</table>';

Reply

Marsh Posté le 14-10-2001 à 13:48:43    

Ca marche nikel ! ;)
 
Mais est-ce que tu pourrais me commenter les lignes car j'ai un peut de mal.  :??:  
 
Merci.

Reply

Marsh Posté le 14-10-2001 à 15:02:52    

ok, mode verbose didactique :)
 
tu veux créer des tableaux comportant N cellules par ligne.
 
* une nouvelle ligne est indiquée par <tr>
* une cellule dans cette ligne est indiquée par <td>
 
en affichant le résultat sortant de mysql entrée par entrée, il faut donc un moyen d'émettre un <tr> toutes les N entrées pour faire passer la table à la ligne.  
 
pour ça, le plus simple est de garder un compteur, qu'on va appeler $i, qui est incrémenté à chaque passage de la boucle. un moyen de savoir quand émettre <tr> est de diviser $i par N. si le reste de la division est égal à 0, on émet <tr>. pour cela, on utilise la fonction modulo (a % b) qui renvoie le reste de la division de a par b.
 
par ex, pour N=3 on a :
0 % 3 = 0   // on émet un <tr>, puis un <td>
1 % 3 = 1   // on émet un <td>
2 % 3 = 2   // on émet un <td>
3 % 3 = 0   // on émet un <tr>, puis un <td>
4 % 3 = 1   // on émet un <td>
5 % 3 = 2   // on émet un <td>
6 % 3 = 0   // on émet un <tr>, puis un <td>
7 % 3 = 1   // on émet un <td>
 
etc ...

Reply

Marsh Posté le 14-10-2001 à 15:49:53    

Merci, ca m'eclaire beaucoups !
 
Est-il possible de pousser ce petit script un peu plus loin afin que je puisse définir une couleur de cellule pour chaque colonne ?
 
Merci encore. :)

Reply

Marsh Posté le 14-10-2001 à 15:53:06    

oui. je te laisse chercher :), il faut utiliser à nouveau le modulo et se servir d'un tableau.

Reply

Marsh Posté le 14-10-2001 à 16:06:58    

Il y a juste un ptit truc qui me chagrine !
 
Ou sont les </td> et </tr> car apparement, netscape n'aime pas trops.  :(

Reply

Marsh Posté le 14-10-2001 à 16:38:31    

kyle a écrit a écrit :

Il y a juste un ptit truc qui me chagrine !
 
Ou sont les </td> et </tr> car apparement, netscape n'aime pas trops.  :(  



tu les rajoutes ! c'était un script minimal destiné à être clair.
 
rapidos :
 
while (..)
{
 if ($i % $spaceRows == 0) echo '<tr>';  
 $i++;  
 echo "<td> $row[blah] </td>";  
 if ($i % $spaceRows == 0) echo '</tr>';  
}

Reply

Marsh Posté le 14-10-2001 à 16:38:31   

Reply

Marsh Posté le 14-10-2001 à 17:08:00    

Ok, merci pour tous, t'es un boss ! :)
 
Par contre, si tu pouvais m'eclairer pour mettre de la couleur, ce serais sympa. ;)

 

[edtdd]--Message édité par kyle--[/edtdd]

Reply

Marsh Posté le 14-10-2001 à 17:21:16    

kyle a écrit a écrit :

Ok, merci pour tous, t'es un boss ! :)
 
Par contre, si tu pouvais m'eclairer pour mettre de la couleur, ce serais sympa. ;)  



:lol: comme je t'ai dit plus haut, t'utilises un tableau et le modulo. tu mets les couleurs dans ton tableau, et tu utilises le modulo comme index.
 
$myColors = array('#ffff00', '#ff0000', '#0000ff';);
while (..)  
{  
  $idx = $i % spaceRows;
  if (!$idx) echo '<tr>';  
  $i++;  
  echo "<td bgcolor='" . $myColors[$idx] . "'>$row[blah] </td>";  
  if (!$idx) echo '</tr>';  
}

 

[edtdd]--Message édité par youdontcare--[/edtdd]

Reply

Marsh Posté le 14-10-2001 à 18:17:31    

J'ai un probleme avec :(
 
Voici le script final :
 
$i = 0;
$spaceRows = 3;
$myColors = array("#D9D9D9", "#F2F2F2", "#FFCD5F" );
echo "<table border=\"1\" cellspacing=\"10\" cellpadding=\"0\" width=\"450\" align=\"center\">";
while ($row = mysql_fetch_array($resultat))
{
 $idx = $i % $spaceRows;
 if (!$idx) echo "<tr>";
 $i++;
 echo "<td class=\"menu\" bgcolor='" . $myColors[$idx] . "'><div align=\"center\"><a href=\"$row[url]\">$row[modele]</a></div></td>";
 if (!$idx) echo "</tr>";
}
echo "</table>";
 
Mais il me fais un truc bizzare, c'est a dire qu'il me met les données en 2 colonnes dont 4 données sur 5 dans la 1ere colonne et la 5e donnée dans la 2e colonne et sur la 2e ligne  :??:  
 
HELP  :cry:

Reply

Marsh Posté le 14-10-2001 à 19:09:21    

yep yé mé souis trompé comme une merde :D
 
si tu regardes bien le code, il teste la valeur de $idx pour insérer un <tr>. il fait le même test pour insérer </tr>. C'EST MAL :D
ça produit
<tr><td></tr><td><td> etc ...
 
donc il faut modifier le second test, savoir quand la prochaine itération vérifiera $idx == 0, soit $i % $spaceRows == 0, soit en fait tester si $i % $spaceRows == $spaceRows-1
 
if ($idx == $spaceRows-1) echo "</tr>";  
 
voilà ... tu remarqueras que pour un nombre d'entrés de ta table non divisible par $spaceRows, le dernier </tr> ne sera jamais émis. à toi de tester ...

Reply

Marsh Posté le 14-10-2001 à 20:44:30    

Ca marche terrible ! :)
 
Tu es developpeur, non ? Car ca te parait si simple !
 
Merci encore !

Reply

Marsh Posté le 14-10-2001 à 21:42:07    

vi je développe ... t'en fais pas, ça te paraîtra aussi simple après une bonne expérience php / html. ça va déjà mieux d'ailleurs, non ? :)

Reply

Marsh Posté le 14-10-2001 à 21:56:01    

En effet, a force d'en faire, ca rentre ! :D
 
Ca ne fais que qques mois que je me suis mis au PHP et je m'y fais petit a petit ! ;)
 
Si ca t'interresse, je te filerais mon adresse web pour voir ce que ca donne ! :D
 
A+

Reply

Marsh Posté le 14-10-2001 à 22:41:41    

yep, hésite pas à laisser un ptit message "que pensez-vous de mon site", c'est pratique commune ici & sur graphisme !

Reply

Marsh Posté le 14-10-2001 à 23:25:26    

OK, et encore merci ! :)
A+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed