Tableau PHP/MySQL avec noms des champs
Résolu
Leinox
Messages postés
227
Date d'inscription
Statut
Membre
Dernière intervention
-
Leinox Messages postés 227 Date d'inscription Statut Membre Dernière intervention -
Leinox Messages postés 227 Date d'inscription Statut Membre Dernière intervention -
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 :
____
Une fonction 2 qui dessine le tableau en appelant la fonction 1 pour le remplir :
___
Une fonction 3 qui contient mes requêtes SQL et appel la fonction 2 pour afficher le table
___
L'appel de ma fonction :
---
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.
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:
- Tableau PHP/MySQL avec noms des champs
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Les noms des animaux - Télécharger - Études & Formations
- Tableau croisé dynamique - Guide
5 réponses
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é !
<?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é !
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 ;)
Cela sera bien plus simple pour toi à reprendre par la suite et à y voir plus clair ;)
Bonjour
Plusieurs problèmes :
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
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.
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.
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.
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.
Je viens d'essayer avec un fetch array et il me dit que $data est un booleen... comprend pas.
Nouveau code de la fonction :
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>'; } }
Si $data est un booleen, c'est que ton mysql_query s'est mal passé. Pour avoir plus de détails :
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.
$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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...