salut,
alors "show full columns latable" retourne la description des tables (nom des champs, type, collation etc.) à quoi cela peux il bien servir pour afficher le contenu d'une table (en dehors d'application comme phpmyadmin ou heidisql)?
L'extension mysql étant supprimé de php7 (version courante) il est préférable de migrer vers mysqli (surtout si c'est du dev neuf, même en maintenance d'ailleurs c'est possible). Il y a un tuto la dessus :
faq-tutoriels/passer-mysql-mysqli-pdo-t276282.html
les colonnes tu dois les connaitre, c'ets un minimum de connaitre son modèle de données.
La ce que je vois c'est que t'attends à avoir des données que tu peux sélectionner dès le départ, au pire avec des subselects.
il ne faut pas faire de select *. ce n'est pas parlant (bonjour le select puis $data[42] derrière) et anti-performant, la tu ramènes toute les colonnes pour en utiliser une seule ...
la pour chaque colonne de la table qui ne sont pas id_rights ou profile tu affiches le nom de la colonne et le commentaire (est tu certains d'avoir des commentaires de colonne dans le script de création de la table ?).
ensuite tu fait quatre fois le même traitement avec juste le prédicat de la requête qui change => on fait une fonction fait cela et retourne le html, en paramètre le contenu de $info[0] et le prédicat.
y a moyen de gagner 60 lignes de code
$requete = mysql_query("SELECT * FROM dem_rights where profile LIKE '2%'");
$rv = mysql_fetch_array($requete) or (mysql_error());
if($rv[$info[0]]!=0)
{
récupération de toutes les lignes avec la colonne profile qui commence par 2 => plusieurs lignes possible mais on utilise que la première (utiliser la clause limit 1 de mysql semble une bonne idée ainsi qu'indiquer le nom de la colonne,

)
si le contenu de la colonne est !=0 on affiche d'un lien sinon un autre (au passage faudrait utiliser la même chose et juste changer le paramètre valeur et la classe css c'est réalisable de façon simple et lisible).
après avoir lu tous cela je pense que :
- tu as créé une table avec le nom des gens en nom de colonne
- que tu as mis des commentaires pour chaque personne parce que c'est pas claire d'avoir juste un nom ou un trigramme
- que la colonne profile correspond à un type de compte (admin ou autre)
- que tu dois avoir une ligne par type de profile
- que dans la colonne qui porte le nom de quelqu'un pour le profile qui va bien tu met 1 ou zéro en fonction du fait qu'il ai ou pas le droit
- que tu ne t'en sort pas parce que le modèle est foireux
cela implique que si tu as 400 utilisateurs tu as + de 400 colonnes, donc quand tu affiches la table des droits tu fais
- 1 requête pour les noms de colonnes
- 5 requêtes pour les cinq types de droit multiplié par le nombre de colonne => 2000
2001 requêtes pour afficher les données de 400 personnes
imagines avec phpfrance (21462 en ce moment) cela donne 107311 requêtes (oui je sais en vrai on affiche pas autant de données c'est inutile mais c'est pour l'exemple).
Bref ton modèle est foireux

en règle général il y a trois tables
- une table avec les utilisateurs (nom, prénom, mot de passe, id e connexion etc)
- une table avec les types de droits (admin,, tech etc).
- une table qui fait la liaison des deux
voici le MCD (Modèle Conceptuel de Données) correspondant
mcd_user_right.png
Le MPD (Modèle Physique de Données)
mpd_user_right.png
Le script des créations des tables de l'exemple
https://gist.github.com/anonymous/dfa98 ... 8747c5457e
avec un tel modèle il est possible de ne faire qu'une seule requête pour lister les droits utilisateurs.
suivant les cas d'usage
- il y a une hiérarchie des droits un seul est attribué et il inclus ceux du "dessous"
la requête est simple (j'ai ajouté des noms de colonne qui ne sont pas dans l'exemple de mcd minimal pour que cela soit parlant)
SELECT utilisateur_id,nom, prénom,droit_id, libelle_droit
FROM droits_utilisateurs
JOIN utilisateur USING(utilisateur_id)
JOIN droits USING(droits_id)
- pas de hiérarchie un utilisateur a plusieurs droits
la version n +1requête
select des utilisateur
pour chaque utilisateur on récupère ses droits
SELECT utilisateur_id, nom, droits_id,libelle_droit
FROM utilisateur
LEFT JOIN droits_utilisateurs USING(utilisateur_id)
LEFT JOIN droits USING(droits_id)
order by utilisateur_id asc, droits_id asc;
cela te donne tout les utilisateurs avec les lignes de droits qu'ils ont ou pas.
si un utilisateur n'as pas de droit avec les colonnes des droits sont null
pour l'affichage il faut changer de ligne de table html (</tr><tr>) quand l'utilisateur change dans le jeux de données.
donc garder l'id de l'utilisateur de la ligne précédente et comparer au courant. Il faut aussi savoir combien de colonne tu ajoutes à ta table pour afficher cela correctement.
la solution avec des subselect (possible si peux de droits)
SELECT utilisateur_id, nom,
(select count(1) from droits_utilisateurs d where droits_id=1 and d.utilisateur_id=u.utilisateur_id) as is_admin,
(select count(1) from droits_utilisateurs d where droits_id=2 and d.utilisateur_id=u.utilisateur_id) as is_tech,
(select count(1) from droits_utilisateurs d where droits_id=3 and d.utilisateur_id=u.utilisateur_id) as is_autre
FROM utilisateur u
order by utilisateur_id
la pour chaque utilisateur tu as l'information sur chaque droit 1 = accordé, zéro = non accordé
l'affichage est alors simple.
on peux aussi imaginer une construction dynamique de cette requête en fonction des droits en base
- une requête pour les droits => le résultat dans un tableau
- construction de la requête en fonction de ce qu'il y a dans le tableau
- pour l'affichage il faut affiche les colonnes classique de l'utilisateur pour parcourir le tableau des droits pour afficher les colonnes associer.
c'est assez simple et efficace pour arriver au même rendu que toi en deux requêtes sql
@+