Tableau PHP/MySQL avec noms des champs

Résolu/Fermé
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 - 30 avril 2012 à 15:15
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 - 3 mai 2012 à 14:11
Bonjour,

Je débute en php, et j'aimerai afficher sur une page le contenu d'une table ainsi que le nom de ses champs.

Je m'explique :

J'ai une base de donnée existante, je souhaite afficher le contenue de celle ci sur plusieurs page php selon les tables.

Mes tables ont un grand nombre de champs divers (suffisamment pour que je n'ai pas envie de les retaper en dur dans mon code php) et bien sur un grand nombre de ligne ou il est possible qu'il y est des champs qui soit NULL.

---
JE SOUHAITE
---

Afficher sur une ligne le nom de mes champs récupéré avec par une requête SQL
Afficher en dessous chaque ligne de ma base de donnée.

---
J'AI FAIT
---

Une fonction 1 qui affiche une ligne :

function draw_line($line) {
        if(isset($line) && count($line)>0) {
        echo '<tr>';
        for($i=0; $i<count($line); $i++) {
            echo '<td>'.$line[$i].'</td>';
        }
        echo '</tr>';
        }
    }


____

Une fonction 2 qui dessine le tableau en appelant la fonction 1 pour le remplir :

function draw_table ($column_names, $data) {
        if(isset($column_names) && count($column_names)>0) {
            echo '<table>';
            
            // les entêtes
            echo '<thead>';
            draw_line($column_names);
            echo '</thead>';
            
            // les données
            echo '<tbody>';
            if(isset($data) && count($data)>0) {
                for ($i=0; $i < count($data); $i++) {
                    draw_line($data[$i]);
                }
            }
            echo '</tbody>';
            echo '</table>';
        }
    }


___

Une fonction 3 qui contient mes requêtes SQL et appel la fonction 2 pour afficher le table

function ask_sql_and_draw ($table_name, $order_by, $database) {
        if (isset($database)) {
            $my_query = '';
            if (isset($table_name)) 
                {
                    $my_query = 'SELECT * FROM '.$table_name.' where rownum < 10 ' ;
                    if (isset($order_by)) 
                    {
                        $my_query.=' order by '.$order_by;
                    }
                    
                echo $my_query;
                $my_field = 'SHOW FIELDS FROM ' . $table_name;
                echo $my_field;
                
                mysql_connect('localhost', 'root', '') or die('Pas bien !!!');
                mysql_select_db($database) or die ('Je suis mauvais...');
                
                $data = mysql_query($my_query);
                
                $column_names = mysql_query($my_field);
                          
                mysql_close();
                
                // on dessine le tableau
                draw_table($column_names, $data);
            }
        }
    }


___

L'appel de ma fonction :

ask_sql_and_draw('$table', null, $data_base) ?>


---
MON PROBLÈME
---

En exécutant ça, j'affiche un point noire de 3px par 3... le contenu de mes variables est vide, visiblement mes fonctions ne me renvoient rien du tout.
A voir également:

5 réponses

Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
3 mai 2012 à 14:11
Bien, j'ai obtenu ma réponse sur le siteduzéro.

<?php

function draw_line($line)
{
if ( ! empty($line))
{
echo '<tr>';
foreach ($line as $cell)
{
echo utf8_encode("<td>$cell</td>");
}
echo '</tr>';
}
}

function draw_header($line)
{
if ( ! empty($line))
{
$cell = $line[0];
echo utf8_encode("<th>$cell</th>");
}
}

function draw_table($column_names, $data)
{
if ( ! empty($column_names))
{
echo '<table border=1 cellpadding=10>';

// les entêtes
echo '<thead>';
echo '<tr>';
while ($column_names_draw = mysql_fetch_row($column_names))
{
draw_header($column_names_draw);
}
echo '</tr>';
echo '</thead>';

// les données
echo '<tbody>';

if (isset($data))
{
while ($data_draw = mysql_fetch_row($data))
{
draw_line($data_draw);
}
}
echo '</tbody>';
echo '</table>';
}
}

function ask_sql_and_draw($table_name, $order_by, $database)
{
if ( ! empty($database))
{
$my_query = '';

if ( ! empty ($table_name))
{
$my_query = 'SELECT * FROM '.$table_name.' ';

if ( ! empty ($order_by))
{
$my_query.=' order by '.$order_by;
}

$my_field = 'SHOW columns FROM '.$table_name;

mysql_connect('localhost', 'root', 'root') or die('Pas bien !!!');
mysql_select_db($database) or die('Je suis mauvais...');

$data = mysql_query($my_query) or die(mysql_error());
$column_names = mysql_query($my_field) or die(mysql_error());

mysql_close();

// on dessine le tableau
draw_table($column_names, $data);
}
}
}

// requete
ask_sql_and_draw($db_table, null, $data_base);


Merci "le père" pour ton aide, tu m'as quand même bien aidé !
2
theshadoo Messages postés 786 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 3 mai 2016 123
1 mai 2012 à 00:17
ne mélange jamais html et php du moins jamais autant, il faut dissocier la prog du code déclaratif de rendu.

Cela sera bien plus simple pour toi à reprendre par la suite et à y voir plus clair ;)
0
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
2 mai 2012 à 09:08
Merci pour le conseil,


Enfin, là il s'agit de fonction permettant d'afficher un tableau, il y a 3 echo de balises html qui se battent en duel ^^

Aucune idée de ce qui peut être la cause de mon problème sinon ?
0
Bonjour

Plusieurs problèmes :
ask_sql_and_draw('$table', null, $data_base)

Si $table est vraiment le nom de ta table, alors OK, mais je n'y crois pas. Si c'est une variable, alors tu aurais dû écrire
ask_sql_and_draw($table, null, $data_base)
sans apostrophes autour de $table.

Ensuite, ta fonction draw_table attend visiblement comme paramètres deux tableaux.
Mais tu ne lui passe pas des tableaux, mais des ressources. Car le résultat de mysql_query n'est pas un tableau, mais une ressource.
Il faut modifier drawtable pour parcourir ces ressources avec mysql_fetch_array() au lieu d'un for. Ça devrait aller mieux après.
0
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
2 mai 2012 à 13:47
Merci je vais voir ça

En effet pour le problème dans ask_sql_and_draw le problème à enfait était du a une erreur de copier/coller -_-" pas vraiment un problème donc.

Pour ce qui est de parcourir les ressources avec mysql_fetch_array il va falloir que je me renseigne plus car je suis vraiment pas sur de son utilisation.
0
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
2 mai 2012 à 14:02
Je viens d'essayer avec un fetch array et il me dit que $data est un booleen... comprend pas.

Nouveau code de la fonction :

    function draw_table ($column_names, $data) {
        if(isset($column_names) && count($column_names)>0) {
            echo '<table>';
            
            // les entêtes
            echo '<thead>';
            draw_line($column_names);
            echo '</thead>';
            
            // les données
            echo '<tbody>';
            if(isset($data) && count($data)>0) {
                while ($data_draw = mysql_fetch_array($data))
                    {
                    $data_draw = draw_line($data);
                }
            }
            echo '</tbody>';
            echo '</table>';
        }
    }
0
Si $data est un booleen, c'est que ton mysql_query s'est mal passé. Pour avoir plus de détails :
  $data = mysql_query($my_query) or die(mysql_error());
  $column_names = mysql_query($my_field) or die(mysql_error());


D'autre part, count($column_names)>0, ne veut pas dire grand chose car $column_names n'est pas un tableau, et count compte les éléments d'un tableau. count appliqué à autre chose qu'un tableau (ou un objet) rend 1, ce qui n'a aucun rapport avec le nombre de réponses contenues dans $column_names : il faut utiliser mysql_num_rows($column_names). Idem pour $data, bien sûr.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
2 mai 2012 à 15:49
Merci pour l'explication, j'ai effectué les modifications et ça m'a permis de voir que la fonction rownum n'existe pas en MySQL : c'est du Oracle.

J'ai d'ailleurs retiré mes count, je testerai différemment plus tard, ce qui compte pour l'instant c'est afficher enfin ce tableau...

Si ce message à quelque jours, ça fait bien une semaine que je bute sur ce problème...
0