Page 1 sur 1

Tableau dynamique

Posté : 13 nov. 2007, 12:47
par seyb
Hello à tous,

Je suis en train de créer un système de gestion d'items pur un jeu, en php.
J'ai fait un formulaire d'ajout à la bdd qui est fonctionnel.
J'ai créé mon tableau en HTML qui affiche les données de la BDD.

Je vous mets deux impressions écran pour que vous compreniez ce que je souhaite faire.

Image

Image

Comme vous le voyez, certains champs n'ont pas été remplis, disons qu'il y a beaucoup d'items qui n'ont pas la totalité des champs remplis.

J'aimerai que quand ces fameux champs ne sont pas renseignés, une ligne du tableau HTML disparaisse, pour éviter ces grands espaces et raccourcir les fiches.

Je ne vois pas trop comment faire, et mon php n'est pas non plus au top, je commence juste depuis quelques temps.

Des idées ?

Bise,

seb

Posté : 13 nov. 2007, 12:53
par Ultim4T0m
Bonjour,

Il te suffit de tester si la ligne du tableau contient quelque chose.
Si c'est le cas, tu l'affiches, sinon, non.

Montre nous le code qui génère le tableau si tu n'y arrives pas ;)

Posté : 13 nov. 2007, 13:09
par seyb
En fait il n'y a pas de code qui génère le tableau, c'est un tableau HTML qui va chercher les infos dans la BDD.

seb

Posté : 13 nov. 2007, 13:20
par Ultim4T0m
Il faudrait en gros quelque chose dans cet ordre d'idées.
if(!empty($champ)) // Si le champ n'est pas vide
  echo '<tr><td>'.$champ.'</td></tr>'; // Alors on génère la ligne

Posté : 13 nov. 2007, 13:25
par seyb
Donc carrément recommencer mon tableau et le gérer en php ?
ET vais-je pouvoir le stylisé à coup de CSS ?

Hum, j'ai encore une fois fait ce que je devais à l'envers, j'ai perdu du temps pour rien à faire ce tableau en html..!

seb

Posté : 13 nov. 2007, 13:34
par h0_noMan
Il te faudras une variable pour determiner l'alternance des champs et affecter tes 2 styles.
for($i=0;i<20;$i++)
{
$color = ($i%2) ? 'BLUE' : 'RED' ;    // Si $i est impair alors ecrire BLUE sinon ecrire RED
echo $color."<br/>\n" ;
}

Posté : 13 nov. 2007, 13:36
par seyb
Hum ok je vois

Je vais tenter de faire ça dans l'aprem, si mon cerveau lag je viendrai vous demander un coup de main...!

seb

Posté : 13 nov. 2007, 13:39
par Ultim4T0m
Il peut être généré en une simple boucle, stylisé en CSS, avec une couleur de fond qui change une ligne sur deux. Bref, ce que tu veux ^^

Les champs sont donc stockés en bdd si je comprends bien, il te suffirait de faire quelque chose du style là (je ne connais pas trop la structure de ta bdd, mais le principe y est) :

$affichage = '<table>';

// On récupère les "lignes" dans la bdd
$requete = mysql_query("SELET nomChamp, contenuChamp FROM table");
for($i=0; $row=mysql_fetch_assoc($requete); $i++) {

 if(!empty($row['contenuChamp'])) { // On n'affiche la ligne que si elle contient quelque chose

  $class = ($i%2==0) ? 'fondClair' : 'fondSombre'; // On affiche une ligne sur deux avec une couleur différente (styles situés dans ta feuille de styles)

  $affichage .= '
    <tr>
     <td class="'.$class.'">'.$row['contenuChamp'].'</td>
    </tr>';
 }

}

$affichage .=  '</table>';

echo $affichage;


Posté : 13 nov. 2007, 16:37
par Invité
Je ne comprends pas ton code là

$requete = mysql_query("SELET nomChamp, contenuChamp FROM table");

Je traite les données de cette manière moi :

$reponse = mysql_query("SELECT * FROM items");

Posté : 13 nov. 2007, 16:50
par seyb
Ma bdd ressemble à ça :

Image

Posté : 13 nov. 2007, 18:13
par Ryle
Je ne comprends pas ton code là
$requete = mysql_query("SELET nomChamp, contenuChamp FROM table");
Je traite les données de cette manière moi :
$reponse = mysql_query("SELECT * FROM items");
Et ben c'est pas bien du tout comme façon de traiter les données !

Lister les champs permet non seulement de ne ramener que les colonnes souhaité sans s'encombrer de valeurs inutiles (et avec 20 champs textes, quand tout ce qu'on veut c'est un id et un libellé, faut vraiment en profiter) ainsi que garder le contrôle sur l'ordre dans lequel les champs sont retournés, indispensable si la fonction mysql_fetch_row() est utilisée.
(Ok, vous ne l'utilisez pas et préférez un _assoc() ou un _object() et vous avez sans doute raison, mais vous ne travaillerez peut être pas toujours seul et probablement pas toujours uniquement sur votre propre code à vous, alors prenez de bonnes habitudes :))

Par ailleurs, tout ces champs textes sont ils vraiment indispensables ? ne pourrais-tu pas utiliser des varchar (255 caractères seulement, mais du coup plus légers) des int ou tinyint (pour des données numériques), etc.