Page 1 sur 1

Affichage des tables d'une bdd.

Posté : 21 mars 2006, 21:07
par Invité
Bonsoir,

Je souhaite faire une page d'administration des bdd qui permettra à plusieurs utilisateurs de les gérer.

Je n'en suis pour l'instant qu'à l'affichage de tout ceci, et je rencontre déjà des problèmes.

1- Concernant l'affichage des noms de colonnes, ça fonctionne mais j'obtiens une erreur qui me dit :

Warning: mysql_field_name() [function.mysql-field-name]: Field 5 is invalid for MySQL result index 6

C'est comme si ma boucle faisait un tour de plus, je ne comprends pas pourquoi.

2- Concernant l'affichage de toutes les données de la table sélectionnée, j'ai aussi un problème, sur par exemple une table à 5 colonnes, cela ne m'affiche que les trois premières entrées de l'id 1, et ensuite plus rien :shock:
Alors que la table en question contient beaucoup de données.

Voici mon code :
<?php
          // affichage du tableau représentant les tables
          if(isset($_POST['table']) && $_POST['table'] != 'defaut')
          {
              $nom_table = $_POST['table'];            
              // requete pour l'affichage des champs
              $sql_champs = 'SELECT * FROM ' . $nom_table;
              $result_champs = mysql_query($sql_champs);
              
              if(!$result_champs)
              {
                  echo 'Un problème est survenu lors de l\'affichage de la table veuillez en informer votre administrateur.<br />';
                  echo 'L\'erreur est la suivante : <br />' . mysql_error();
                  exit;
              }
              ?>
              <table>
                <tr>
              <?php
              // affichage des noms de colonnes de la table
              $nbr_col = 0;              
              while($nom_col = mysql_field_name($result_champs, $nbr_col))
              {
                  $nbr_col++;   
                  echo '<th>' . $nom_col . '</th>';
                  /*if($nbr_col > 30)
                  {
                      break;
                  }*/
              }
              ?>
              </tr>
              <tr>
              <?php
              // affichage des champs de la table
              $i = 0;
              while($champ = mysql_fetch_row($result_champs))
              {               
                  echo "<td>" . $champ[$i] . "</td>\n";
                  $i++;
                  if($i % $nbr_col == 0)
                  {
                      echo "</tr>\n<tr>\n";
                  }
                  /*if($i > 100)
                  {
                      break;
                  }*/
              }
              ?>
Merci de votre soutient :P

Re: Affichage des tables d'une bdd.

Posté : 22 mars 2006, 09:03
par jpaul
Ta première boucle (d'affichage des noms de colonnes) ne s'arrête pas à la dernière colonne et du coup elle demande le nom d'une colonne qui n'existe pas. Je te propose de la modifier ainsi :
//              while($nom_col = mysql_field_name($result_champs, $nbr_col))
              while($nbr_col <  mysql_num_fields($result_champs))
              {
					$nom_col = mysql_field_name($result_champs, $nbr_col);
                  $nbr_col++;   
                  echo '<th>' . $nom_col . '</th>';
                  /*if($nbr_col > 30)
                  {
                      break;
                  }*/
              }
Concernant la deuxième, tu n'affiches pas tous les champs (puisque tu n'as qu'une boucle pour lire les enregistrements, te manque une deuxième boucle pour afficher chaque champs. Je te propose :
              while($champ = mysql_fetch_row($result_champs))
              {       
for($i=0; $i <	mysql_num_fields($result_champs); $i++) {		  
                  echo "<td>" . $champ[$i] . "</td>\n";
                  $i++;
                  if($i % $nbr_col == 0)
                  {
                      echo "</tr>\n<tr>\n";
                  }
}
                  /*if($i > 100)
                  {
                      break;
                  }*/
              }

Posté : 22 mars 2006, 17:45
par Invité
J'ai appliqué ton code, et ça fonctionne !!!

Merci beaucoup de ton aide :D