Forum Programmation.php Récupérer le contenu d'une table mysql dans un tableau

Posté par  (site web personnel) .
Étiquettes : aucune
0
4
jan.
2005
Je débute en PHP...

Je voudrais afficher le résultat d'une requete sous forme d'un tableau.

Le truc c'est que je ne connais pas le nombre de colones de la requete ni les libellés.

J'aimerai que la premiere ligne du tableau contiennent les libellés.

En gros, j'ai créé une boucle avec mysql_fetch_assoc pour récupérer les
valeurs, mais comment faire pour récupérer et afficher la premiere ligne
des libellés des colones ?

J'ai finalement fait un code que je trouve
assez caca. Je fais un premier fetch puis je fait un array_keys pour récupérer
les clés qui sont les libellés des colones. Puis je crée la 1ère ligne qui contient ces libellés, mais je peux pas directement l'envoyer sur ma boucle car celle ci fais un fetch au début et donc, je perdrais les valeurs du premier fetch. j'ai donc recopié une fois le contenu de ma boucle avant celle-ci. en gros je trouve ça moche, et j'aimerai vos avis.

merci !!!
nicolas.
  • # oubli

    Posté par  (site web personnel) . Évalué à 2.

    j'ai oublié de préciser qu'il s'agit bien d'un tableau en HTML, pas d'un tableau PHP...

    merci :)
    • [^] # Re: oubli

      Posté par  . Évalué à 2.

      Je n'utilise pas mysql mais postgreSQL. Peu importe, voici un bout de code qui devrait répondre à tes attentes :

      // Tout le blabla de connexion à la base et la requête suit :
      $req = "select ...";
      $connId = mysql_connect("...");
      $resId = mysql_query ($req, $connId);
      $x = 0;

      // On obtient le premier enregistrement.
      $rSet = mysql_fetch_assoc ($resId, $x);
      reset ($rSet); // se place au début du tableau d'enregistrements
      while (list($key, $val) = each ($rSet)) {
      $ligneLib.="<th>{$key}</th>";
      $ligneTab[$x] .= "<td>{$val}</td>"; }
      $x++;
      // A ce point, on a la ligne d'en-têtes de colonnes, et la première ligne du tableau. Poursuivons donc le remplissage du tableau html !
      while ($rSet = @mysql_fetch_assoc($resId, $x++)) {
      reset ($rSet);
      while (list ($key) = each ($rSet))
      $ligneTab[$x-1] .= sprintf ("<td>%s</td>", $rSet[$k]); }
      mysql_close ($connId);
      // Notre tableau est fini, il ne reste plus qu'à l'afficher
      print ("<table>\n");
      printf ("<tr>%s</tr>\n", $ligneLib);
      reset ($ligneTab);
      while (list ($k) = each ($ligneTab))
      printf ("<tr>%s</tr>", $ligneTab[$k]);
      echo "</table>";

      Voilà, ce code n'est certainement pas parfait, mais c'est ma façon de faire. J'ai fait ce choix, car il sépare la récupération des données de leur affichage. C'est assez pratique pour faire une approche de front d'un problème, qui n'exclut pas ensuite de passer le tout en bibliothèques, sous forme d'objet (pour lancer un troll sur la poophp), ou tout simplement pour changer ensuite la façon de représenter les données.
      J'ai volontairement cadré le tout dans la première boucle pour obtenir du code html dans ligneTab, mais ce n'est pas obligatoire. On peut facilement virer l'encadrement html et le faire après. J'ai aussi volontairement utilisé plusieures fonctions d'affichages et d'affectations pour montrer les possibilités de php. Voilà, j'espère n'être pas trop à côté de la plaque et que cet exemple inclomplet sera utile.
      Ah, j'oubliais : le @ devant l'appel à mysql_fetch_assoc n'est pas une erreur, c'est simplement pour éviter à cette fonction d'afficher une erreur quand il n'y a plus d'enregistrements. Ca fonctionne évidement avec toutes les fonctions php....
  • # probleme courant = solution generique

    Posté par  . Évalué à 1.

    c'est le cas de base qui arrive tout le temps dans les applis php. je pense qu'il est tres important de ne pas melanger la recuperation des données avec la generation de HTML. je te conseille de completement separer ces 2 traitements. par exemple:
    function mysqlQuery($db,$query)
    {
        // Performing SQL query
        $result = mysql_query($query) or die('Query failed: ' . mysql_error());
    
        $rows=array();
        while ($row = mysql_fetch_assoc($result)) $rows[]=$row;
        
        // Free resultset
        mysql_free_result($result);
    
        return $rows;
    }
    
    
    function htmlTable($rows,$titre=null)
    {
        if (!count($rows)) return false;
    
        echo "<table>";
        if ($titre) echo "<caption>$titre</caption>";
        
        echo "<tr>";
        foreach (array_keys($rows[0]) as $key) echo "<th>$key</th>";
        echo "</tr>";
        
        foreach ($rows as $row) {
            echo "<tr>";
            foreach ($row as $key=>$val) echo "<td>$key</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    
    //donc a utiliser comme ca:
    $rows = mysqlQuery($db,$query);
    htmlTable($rows,"resultat de ma requete");
    
    en plus il y a plein de fonctions puissantes pour manipuler les tableaux en php.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.