AFFICHAGE D'UNE TABLE MYSQL DANS UN TABLEAU HTM AVEC LES TITRES DES CHAMPS
cs_plopman
Messages postés67Date d'inscriptiondimanche 29 février 2004StatutMembreDernière intervention13 septembre 2006
-
29 sept. 2004 à 18:36
nounou057
Messages postés1Date d'inscriptionvendredi 19 mai 2017StatutMembreDernière intervention19 mai 2017
-
19 mai 2017 à 12:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
nounou057
Messages postés1Date d'inscriptionvendredi 19 mai 2017StatutMembreDernière intervention19 mai 2017 19 mai 2017 à 12:21
comment je paramettrai ("./Commun/connexion.php")
hamadi003
Messages postés1Date d'inscriptionlundi 17 novembre 2008StatutMembreDernière intervention 8 mai 2009 8 mai 2009 à 17:35
IL Y A PAS UN CODE SIMPLE QUI afficher Mysql TABLE dans un TABLEAU SUR UNE page web
ehmarc
Messages postés393Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention29 septembre 2008 19 févr. 2008 à 17:08
salut,
il faut que tu remplisse le fichier connexion.php avec les paramètres de ta bdd ...
Cko4
Messages postés2Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention19 février 2008 19 févr. 2008 à 16:54
Bonjour,
Étant dans le très débutant en PHP, j'ai une question bête pour vous:
Comment utilise t'on ce code. J'ai séparré les pages afin de réflèter les indications du script plus haut mais j'ai toujours un problème de connexion à la db. Je ne vois pas l'endroit ou indiqué le nom.
Merci et désolé pour cette question.
Cko4
ehmarc
Messages postés393Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention29 septembre 2008 25 mai 2007 à 18:14
Moi dans mes pages je n'affichais pas les champs de ID de mes tables que j'ecrivais : ID_NOMCHAMP donc des que ca commence par ID_ je n'affichais pas la colonne (ca peut donner des idées)
Sinon si tu veut avoir des nom de colonnes (en affichage) originaux tu peut faire une correspondance dans une table annexe structuré comme suit :
NOMCHAMP NOMCOLONNE_FR NOMCOLONNE_ENG
comme ca tu peut meme gerer plusieurs langue si il le faut!
Sinon pour les # devant chaque ligne j'en ai aucunne idée ...
Par contre si tu as ultraedit il y a une option "mode colonne" qui te permet de selectionner verticalement et donc d'eliminer chaque debut de ligne tres facilement!
sinon : à la ligne 4, le terme $adresse est assez mal approprié car tu utlises partout ailleurs $host ...
# $choix = new $SQL($identifiant,$password,$Adresse,$NomTable);
# $choix2 = new $SQL($identifiant,$password,$Adresse,$NomTable);
J'utilise $host dans mes class mais a l'instanciation de ma classe j'appelle bien $adresse
Et pour $table c'est bien le nom de ma table que je veut!
bbeenn007
Messages postés33Date d'inscriptionmercredi 21 septembre 2005StatutMembreDernière intervention27 mars 2007 25 mai 2007 à 17:56
Ok, c'est sympa,
En tous cas je te remercie, car ton code m'est utile.
Je transforme un fichier csv en table myqsl, et ne sachant pas forcement quel est le contenu de la table rempli, et bien je l'affiche.
j'aurais pu le faire tout seul mais c'est toujours bon de s'inspirer des réflexions de chacun
je vais juste rajouter à ton script un peu de css et un tableau de nom de champs à ne pas afficher.
Comme ça lors de l'affichage, je regarde si le nom de champs est ds mon mini tableau en fonction j'affiche ou non.
Sinon, puisque tu as l'air d'etre assez receptif,
petite question:
comment fait on pour copier les codes postés sans avoir les # devant chaque ligne dans le presse papier ... ?
ciao
ehmarc
Messages postés393Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention29 septembre 2008 25 mai 2007 à 17:32
c'est vrai ce que tu dit les commentaires ne sont pas vraiment adapter seulement ce n'est pas une confusion vu que ma table etait une table qui stockait le nom des tables (j'espere etre clair)
cependant pour etre cohérent avec l'exmple je vais quand meme modifier mes commentaires la lisibilités du code doit etre une priorité!!!!
bbeenn007
Messages postés33Date d'inscriptionmercredi 21 septembre 2005StatutMembreDernière intervention27 mars 2007 25 mai 2007 à 16:27
Salut,
Merci pour le script c'est assez sympa,
par contre, il y a quelques confusions avec les termes (tables, base, champs ...) qui ne risquent pas d'aider les newbies ...
par exemple ligne 122: ce n'est pas liste des tables, mais la listes des champs de la table (ce qui n'a rien à voir ...) ...
à la ligne 5, dans la variables $NomTable n'est pas approprié car il faut mettre ici le nom de la base de données que l'on veut attaquer ...
à la ligne 4, le terme $adresse est assez mal approprié car tu utlises partout ailleurs $host ...
(...)
ce sont des détails mais bon ... ça valait le coup d'être noté
bon en m temps ce code commence à dater ... mais il est toujours bon d'être préci ...
Je compte utiliser ce script en le customisant pour masquer certains champs de bases (id par exemple) et en faisant des requetes "select * from $table"
aller merci
et a+
ehmarc
Messages postés393Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention29 septembre 2008 30 sept. 2004 à 11:39
resalut
jai adapter mon code pour qu'il tienne encompte toute les requete mais apperemment j'arrive pas à modifier.... byzarre....
enfin bref jenvoie la sauce
<table width="100%" border="1" cellspacing="1" cellpadding="1" name="head">
<tr>
<?php
/*--------------------declaration--------------------*/
// Inclusion de la classe mère
include ("./Commun/SGBD/SGBD.class.php");
/* Initialisation de la variable du SGBD correspondant */
$SQL = "MySQL";
// Inclusion de la classe fille du SGBD correspondant
include ("./Commun/SGBD/".$SQL.".SGBD.class.php");
//Inclusion des paramêtres de connexion
include ("./Commun/connexion.php");
//initialisation des objets
$choix = new $SQL($identifiant,$password,$Adresse,$NomTable);
$choix2 = new $SQL($identifiant,$password,$Adresse,$NomTable);
$requete = "select * from `$nom_table` where $condition";
/*---------------------Fin de déclaration----------------------*/
/*---------------------Debut script-----------------------------*/
//connexion
$choix->connect();
//on récupère les noms des tables
$choix->requete($requete);
$choix->deconnect();
$i = 0;
while($row = mysql_fetch_field($choix->requete)){
//on affiche le nom des tables
$i++;
echo "<td>$row->name</td>";
$pipo[$i] = "$row->name";
}
echo "</tr>";
//on passe à l'affichage des données en elle meme
//on commence la boucle pour afficher tout
while($row2 = mysql_fetch_assoc($choix->requete)){
echo "<tr>";
//on affiche le résultat de la requete en respectant l'ordre
foreach($pipo as $pipo2){
echo "<td>$row2[$pipo2] </td>";
}
echo "</tr>";
}
?>
ca fait plus simple que ton code mais ca tien pas en compte tout ce qui est insert update (c pas un requeteur que je cherche a faire juste un bout de script pour simplifier la vie de tout le monde)
donc maintenant c bon on voie tout c propre c beau .... c pas mis à jour snif snif
++
cs_fredst
Messages postés3Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention30 septembre 2004 30 sept. 2004 à 11:26
Merci pour une 1ère fois sur le forum
De plus, je me suis planté, je n'ai que 30 jours en PHP et ce forum m'a d'ailleurs bien aidé dans certaines recherches.
Avec l'utilisation de classe, cela serait vraiment amélioré. Je n'ai pas beaucoup de temps pour effectier un livrable sur le développement de l'application intranet sur laquelle je travaille et qui contient ce requêteur. Quand le livrable sera fini, je pourrais me pencher pour améliorer ce requêteur. Je rajouterais d'ailleurs deux zones de liste afin de visualiser les tables et les champs associés pour l'aide à la constitution des requêtes. Peu d'utilisateurs auront accés à cela.Et surtout j'attends avec impatience les procédures stockées sous MySQL qui vont apporter un confort certain.
Fred
ehmarc
Messages postés393Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention29 septembre 2008 30 sept. 2004 à 10:01
Salut
Pour n'importe quel requete, modification accepter!!!!
ya plus simple que ce que tu propose mais c une tres bonne idée j'avais pas penser à ca j'en avais pas besoin.
Donc ca roule.
++
cs_fredst
Messages postés3Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention30 septembre 2004 30 sept. 2004 à 08:58
Je livre quand même la totalité de la page :
Dans le cas d'une requête update, insert et delete, il faudrait rajouter un test pour savoir s'il s'agit d'une requete INSERT, UPDATE, DELETE ou toutes autres types de commandes ( SELECT et commandes MySQL). Pour ma part, dans la partie de test du clic de lancement de la requête, je vérifie la requête saisie ainsi :
if ( isset ($HTTP_POST_VARS["lancer"]) ) {
$requete = $HTTP_POST_VARS["requete"];
$type_requete = split( " ", $requete);
switch ( strtolower( $type_requete[0]) ) {
case "delete" :
case "insert" :
case "update" : $type_requete = 1;
break;
default : $type_requete = 0;
break;
}
} // FIN DE if ( isset ($HTTP_POST_VARS["lancer"]) )
Dans ma pârtie programme, il suffit après le test
if ( mysql_error()) {
}
else{
if ( $type_requete == 0) {
// PARTIE SELECT et COMMANDES MySQL
}
else{
// PARTIE INSERT, UPDATE, DELETE
echo "\";
echo \"----
\";
echo \"";
echo "";
echo "La requête ".$type_requete." a
affectée ".mysql_affected_rows()." enregistrement(s)";
echo "";
echo ", \";
echo \"\";
echo "
<!-- FIN TABLEAU AFFICHAGE DU RESULTAT -->";
} // FIN PARTIE INSERT, UPDATE, DELETE
} // FIN DE if ( mysql_error()) partie ELSE
?>
On peux faire mieux...
Fred
cs_fredst
Messages postés3Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention30 septembre 2004 30 sept. 2004 à 08:39
Cela ne fonctionne que pour un select * from nom_table.
Pour ma part, j'ai développé une page requêteur qui permet de lancer toutes les requêtes souhaitées. Je ne livre ici que la partie SELECT. La page complète fonctionne aussi avec les INSERT, UPDATE, DELETE ainsi que toutes commandes appartenant à MySQL (ces dernières fonctionne comme pour les commandes SELECT). Restant un débutant ( 3 mois) sous PHP et MySQL, je n'ai pas encore créé de classe. Voici le code qui n'est pas vraiment parfait.
echo "\";
echo \"----
\";
// Ecriture des en-têtes des colonnes
while ( $cptColonne != mysql_num_fields($result))
{
echo \"".mysql_field_name($result, $cptColonne).", \";
$cptColonne++;
} // FIN DE while ( $cptColonne != $nb_colonne)
echo \"\";
// Lecture de chaque ligne du RECORDSET
while( $row = mysql_fetch_row($result))
{
echo \"----
\";
$cptColonne = 0;
while ( $cptColonne != mysql_num_fields($result))
{
if ( $row[$cptColonne]) {
echo \"";
echo $row[$cptColonne];
echo ", \";
}
else{
echo \", \";
}
$cptColonne++;
}
echo \"\";
} // FIN DU while( $row = mysql_fetch_row($result))
if ( mysql_num_rows($result) == 0 ) {
echo \"----
\";
echo \"";
echo "AUCUNE LIGNE RETOURNEE";
echo ", \";
echo \"\";
} // FIN DE if ( mysql_num_rows($result) == 0 )
echo "
<!-- FIN TABLEAU AFFICHAGE DU RESULTAT -->";
} // FIN DE if ( mysql_error())
} // FIN DE if ( $HTTP_POST_VARS["requete"] != "")
?>
Dans le cas d'un INSERT, UPDATE, DELETE, il suffit de tester la valeur de mysql_affected_rows().
Pour rappel, cela fonctionne avec des requêtes SELECT et les commandes MySQL comme DESCRIBE...
Les commentaires sont attendus et espérés
Fred
cs_plopman
Messages postés67Date d'inscriptiondimanche 29 février 2004StatutMembreDernière intervention13 septembre 2006 29 sept. 2004 à 18:36
J'aime bien comme code :o) Ca a l'air de bien marcher, je vois pas de bug à priori ;)
Plopman
8/10
19 mai 2017 à 12:21
8 mai 2009 à 17:35
19 févr. 2008 à 17:08
il faut que tu remplisse le fichier connexion.php avec les paramètres de ta bdd ...
19 févr. 2008 à 16:54
Étant dans le très débutant en PHP, j'ai une question bête pour vous:
Comment utilise t'on ce code. J'ai séparré les pages afin de réflèter les indications du script plus haut mais j'ai toujours un problème de connexion à la db. Je ne vois pas l'endroit ou indiqué le nom.
Merci et désolé pour cette question.
Cko4
25 mai 2007 à 18:14
Sinon si tu veut avoir des nom de colonnes (en affichage) originaux tu peut faire une correspondance dans une table annexe structuré comme suit :
NOMCHAMP NOMCOLONNE_FR NOMCOLONNE_ENG
comme ca tu peut meme gerer plusieurs langue si il le faut!
Sinon pour les # devant chaque ligne j'en ai aucunne idée ...
Par contre si tu as ultraedit il y a une option "mode colonne" qui te permet de selectionner verticalement et donc d'eliminer chaque debut de ligne tres facilement!
sinon : à la ligne 4, le terme $adresse est assez mal approprié car tu utlises partout ailleurs $host ...
# $choix = new $SQL($identifiant,$password,$Adresse,$NomTable);
# $choix2 = new $SQL($identifiant,$password,$Adresse,$NomTable);
J'utilise $host dans mes class mais a l'instanciation de ma classe j'appelle bien $adresse
Et pour $table c'est bien le nom de ma table que je veut!
25 mai 2007 à 17:56
En tous cas je te remercie, car ton code m'est utile.
Je transforme un fichier csv en table myqsl, et ne sachant pas forcement quel est le contenu de la table rempli, et bien je l'affiche.
j'aurais pu le faire tout seul mais c'est toujours bon de s'inspirer des réflexions de chacun
je vais juste rajouter à ton script un peu de css et un tableau de nom de champs à ne pas afficher.
Comme ça lors de l'affichage, je regarde si le nom de champs est ds mon mini tableau en fonction j'affiche ou non.
Sinon, puisque tu as l'air d'etre assez receptif,
petite question:
comment fait on pour copier les codes postés sans avoir les # devant chaque ligne dans le presse papier ... ?
ciao
25 mai 2007 à 17:32
cependant pour etre cohérent avec l'exmple je vais quand meme modifier mes commentaires la lisibilités du code doit etre une priorité!!!!
25 mai 2007 à 16:27
Merci pour le script c'est assez sympa,
par contre, il y a quelques confusions avec les termes (tables, base, champs ...) qui ne risquent pas d'aider les newbies ...
par exemple ligne 122: ce n'est pas liste des tables, mais la listes des champs de la table (ce qui n'a rien à voir ...) ...
à la ligne 5, dans la variables $NomTable n'est pas approprié car il faut mettre ici le nom de la base de données que l'on veut attaquer ...
à la ligne 4, le terme $adresse est assez mal approprié car tu utlises partout ailleurs $host ...
(...)
ce sont des détails mais bon ... ça valait le coup d'être noté
bon en m temps ce code commence à dater ... mais il est toujours bon d'être préci ...
Je compte utiliser ce script en le customisant pour masquer certains champs de bases (id par exemple) et en faisant des requetes "select * from $table"
aller merci
et a+
30 sept. 2004 à 11:39
jai adapter mon code pour qu'il tienne encompte toute les requete mais apperemment j'arrive pas à modifier.... byzarre....
enfin bref jenvoie la sauce
<table width="100%" border="1" cellspacing="1" cellpadding="1" name="head">
<tr>
<?php
/*--------------------declaration--------------------*/
// Inclusion de la classe mère
include ("./Commun/SGBD/SGBD.class.php");
/* Initialisation de la variable du SGBD correspondant */
$SQL = "MySQL";
// Inclusion de la classe fille du SGBD correspondant
include ("./Commun/SGBD/".$SQL.".SGBD.class.php");
//Inclusion des paramêtres de connexion
include ("./Commun/connexion.php");
//initialisation des objets
$choix = new $SQL($identifiant,$password,$Adresse,$NomTable);
$choix2 = new $SQL($identifiant,$password,$Adresse,$NomTable);
$requete = "select * from `$nom_table` where $condition";
/*---------------------Fin de déclaration----------------------*/
/*---------------------Debut script-----------------------------*/
//connexion
$choix->connect();
//on récupère les noms des tables
$choix->requete($requete);
$choix->deconnect();
$i = 0;
while($row = mysql_fetch_field($choix->requete)){
//on affiche le nom des tables
$i++;
echo "<td>$row->name</td>";
$pipo[$i] = "$row->name";
}
echo "</tr>";
//on passe à l'affichage des données en elle meme
//on commence la boucle pour afficher tout
while($row2 = mysql_fetch_assoc($choix->requete)){
echo "<tr>";
//on affiche le résultat de la requete en respectant l'ordre
foreach($pipo as $pipo2){
echo "<td>$row2[$pipo2] </td>";
}
echo "</tr>";
}
?>
ca fait plus simple que ton code mais ca tien pas en compte tout ce qui est insert update (c pas un requeteur que je cherche a faire juste un bout de script pour simplifier la vie de tout le monde)
donc maintenant c bon on voie tout c propre c beau .... c pas mis à jour snif snif
++
30 sept. 2004 à 11:26
De plus, je me suis planté, je n'ai que 30 jours en PHP et ce forum m'a d'ailleurs bien aidé dans certaines recherches.
Avec l'utilisation de classe, cela serait vraiment amélioré. Je n'ai pas beaucoup de temps pour effectier un livrable sur le développement de l'application intranet sur laquelle je travaille et qui contient ce requêteur. Quand le livrable sera fini, je pourrais me pencher pour améliorer ce requêteur. Je rajouterais d'ailleurs deux zones de liste afin de visualiser les tables et les champs associés pour l'aide à la constitution des requêtes. Peu d'utilisateurs auront accés à cela.Et surtout j'attends avec impatience les procédures stockées sous MySQL qui vont apporter un confort certain.
Fred
30 sept. 2004 à 10:01
Pour n'importe quel requete, modification accepter!!!!
ya plus simple que ce que tu propose mais c une tres bonne idée j'avais pas penser à ca j'en avais pas besoin.
Donc ca roule.
++
30 sept. 2004 à 08:58
Dans le cas d'une requête update, insert et delete, il faudrait rajouter un test pour savoir s'il s'agit d'une requete INSERT, UPDATE, DELETE ou toutes autres types de commandes ( SELECT et commandes MySQL). Pour ma part, dans la partie de test du clic de lancement de la requête, je vérifie la requête saisie ainsi :
if ( isset ($HTTP_POST_VARS["lancer"]) ) {
$requete = $HTTP_POST_VARS["requete"];
$type_requete = split( " ", $requete);
switch ( strtolower( $type_requete[0]) ) {
case "delete" :
case "insert" :
case "update" : $type_requete = 1;
break;
default : $type_requete = 0;
break;
}
} // FIN DE if ( isset ($HTTP_POST_VARS["lancer"]) )
Dans ma pârtie programme, il suffit après le test
if ( mysql_error()) {
}
else{
if ( $type_requete == 0) {
// PARTIE SELECT et COMMANDES MySQL
}
else{
// PARTIE INSERT, UPDATE, DELETE
echo "\";
echo \"----
\";
echo \"";
echo "";
echo "La requête ".$type_requete." a
affectée ".mysql_affected_rows()." enregistrement(s)";
echo "";
echo ", \";
echo \"\";
echo "
<!-- FIN TABLEAU AFFICHAGE DU RESULTAT -->";
} // FIN PARTIE INSERT, UPDATE, DELETE
} // FIN DE if ( mysql_error()) partie ELSE
?>
On peux faire mieux...
Fred
30 sept. 2004 à 08:39
Pour ma part, j'ai développé une page requêteur qui permet de lancer toutes les requêtes souhaitées. Je ne livre ici que la partie SELECT. La page complète fonctionne aussi avec les INSERT, UPDATE, DELETE ainsi que toutes commandes appartenant à MySQL (ces dernières fonctionne comme pour les commandes SELECT). Restant un débutant ( 3 mois) sous PHP et MySQL, je n'ai pas encore créé de classe. Voici le code qui n'est pas vraiment parfait.
La requête est saisie dans un TEXTAREA.
<?
if ( $HTTP_POST_VARS["requete"] != "") {
echo "<!-- TABLEAU AFFICHAGE DU RESULTAT -->";
$result = mysql_query( stripslashes( $requete) );
echo "
";
echo "
";
if ( mysql_error()) {
echo "\";
echo \"----
";
echo "ERREUR";
echo ", \";
echo \"----
";
echo "".mysql_error()."";
echo ", \";
echo "
<!-- FIN TABLEAU AFFICHAGE DU RESULTAT -->";
$nbLigne = 0;
}
else{
$nb_colonne = mysql_num_fields( $result);
$nbLigne = mysql_num_rows( $result);
$cptColonne = 0;
echo "\";
echo \"----
\";
// Ecriture des en-têtes des colonnes
while ( $cptColonne != mysql_num_fields($result))
{
echo \"".mysql_field_name($result, $cptColonne).", \";
$cptColonne++;
} // FIN DE while ( $cptColonne != $nb_colonne)
echo \"\";
// Lecture de chaque ligne du RECORDSET
while( $row = mysql_fetch_row($result))
{
echo \"----
\";
$cptColonne = 0;
while ( $cptColonne != mysql_num_fields($result))
{
if ( $row[$cptColonne]) {
echo \"";
echo $row[$cptColonne];
echo ", \";
}
else{
echo \", \";
}
$cptColonne++;
}
echo \"\";
} // FIN DU while( $row = mysql_fetch_row($result))
if ( mysql_num_rows($result) == 0 ) {
echo \"----
\";
echo \"";
echo "AUCUNE LIGNE RETOURNEE";
echo ", \";
echo \"\";
} // FIN DE if ( mysql_num_rows($result) == 0 )
echo "
<!-- FIN TABLEAU AFFICHAGE DU RESULTAT -->";
} // FIN DE if ( mysql_error())
} // FIN DE if ( $HTTP_POST_VARS["requete"] != "")
?>
Dans le cas d'un INSERT, UPDATE, DELETE, il suffit de tester la valeur de mysql_affected_rows().
Pour rappel, cela fonctionne avec des requêtes SELECT et les commandes MySQL comme DESCRIBE...
Les commentaires sont attendus et espérés
Fred
29 sept. 2004 à 18:36
Plopman
8/10