Afficher le contenu d'une BDD MySQL sous forme de tableau

Petit nouveau ! | 6 Messages

30 juin 2016, 14:46

Bonjour à tous,

Je viens de mettre en place un premier script basique PHP qui implémente une base MySQL (Base de gestion de stock).

J'aimerai maintenant, que cette base, puisse être consulter par un utilisateur lambda avec la possibilité de :

- la consulter aisément donc (avec une mise en page type formulaire pour que ce soit user friendly)
- effectuer des tris par colonnes
- mais également intégrer du nouveau contenu dedans sans avoir a passer par l'import dont je parlais plus haut.

Ca peut faire un peu usine à gaz dit comme ça, mais je tente...

Bref, quelles pistes me préconisez vous ?

Merci d'avance pour vos lumières.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2016, 15:09

salut,

plusieurs solutions sont envisageables :
- Tout HTML : un affichage simple des données dans une table html avec des bouton / lien permettant les actions dont la pagination. Un formulaire au dessus pour permettre le tri. Coté php c'est un "simple" traitement de formulaire
- super user friendly : avec plein de JS partout et un service REST exposé par php pour alimenter la chose.
Il te faudra un Framework Js qui fournit une data grid (ExtJs le fait, je crois qu'il existe des choses pour angular avec bootstrap voir le module matérial).
Ensuite c'est de l'agrégation de techno.

Dit nous ce que tu préfères et l'on pourra t'orienter un peu mieux

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

30 juin 2016, 15:20

Merci pour ton retour Moogli, niveau compétence, la solution HTML me conviendrait mieux. Après je vais faire quand même le point avec un collègue qui a des compétences Js.

Je reviendrais vers vous ASAP.

Merci pour ton retour en tout cas.

Mammouth du PHP | 2703 Messages

30 juin 2016, 15:21

https://datatables.net/
donc il n'y a vraiment pas grand chose à rajouter en js pour avoir certaines demandes.

Petit nouveau ! | 6 Messages

01 juil. 2016, 08:10

Merci également or1, mais n'ayant pas de compétence js j' ai peur d'y passer plus de temps que la normale.

Du coup Moogli, je suis preneur de toute piste pour partir sur une solution "tout HTML", merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 juil. 2016, 12:12

la solution html :
pour ce qui est de la connexion à une base mysql Ryle à fait un zoli POSt faq-tutoriels/passer-mysql-mysqli-pdo-t276282.html

le principe de base c'est de faire un affichage de la dite table :
un peu de sql : select mes, champs from laTable
et de l'afficher
while($result = $resultSet->fetch()) {}
tu commences la table html avant le début du while et la finit après ;)
dans le while tu affiches une ligne (<tr><td>col1</td><td>col2</td></tr>).

Une fois que cela fonction on va ajouter la pagination
pour cela il faut :
- Le nombre d'élément sur une page
- La page que l'on souhaite afficher
- le nombre d’élément total dans la table (select count(1) from Latable)

pour afficher la barre de pagination (par exemple dans des ul / li affichés en ligne) une "simple" boucle for de 1 jusqu'au nombre de page déterminés (nombre total d'élément divisé par le nombre d'élément par page, le tout avec une arrondis supérieur pour ne pas perdre la dernière page incomplète. )
Pour faire bien un petit if pour affiche d'un couleur différente (voir sans lien) la page active.

Le numéro de la page active doit être dans l'url (au final $_GET['page']). s'il n'y ai pas on considère que le N° de page est 1. et même mieux s'il dépasse le nombre de page maximal calculé on peu le forcer à la dernière page (histoire de pas avoir des erreurs ensuite dans les requêtes sql).

Voilà pour l'affichage, maintenant au filtrage.

Pour cela il faut un formulaire dans lequel tu va mettre autant de champs que de colonne qui peuvent être filtrées.
Lorsque c'est fait il faut construire le prédicat de la requête (par where ) avec les infos du formulaire (ou sans rien si le formulaire n'est pas posté).
on vois parfois en astuce une requête qui contient un where 1=1. cela permet de faire une concaténation pour les autres éléments sans se poser la question : est ce qu'il y a déjà un where ?

Pour l'ordre de tri il faut voir comment veux que ce soit trié.
Le plus simple une combo avec la liste des colonnes et une autre avec le sens (asc / desc). Cela implique un tri sur une seule colonne.
La version de compète pouvoir indiquer l'ordre de tri sur chaque colonne (ou pas de tri) avec l'ordre du tri (0 à x) pour ensuite construire la partie 'order by' de la requête a partir de ces infos.

ton code aura trois parties :
1/ initialisation des variables
$nombreParPage = 42; // enfin ce que tu veux ça peu même provenir du formulaire, pense à une valeur par défaut
$cnx : la connexion à la base
2/ "Calcule" des données / traitement du formulaire
traitement du formulaire pour construire
- une variable "$where" qui va contenir le prédicat de la requête
- une variable order by

$nombreDelement; // issue du compte indiqué avant en tenant compte du prédicat calculé avant
$nombreDePage : nombreDelement / nombreParPage avec arrondis supérieur.
$page = 1 ou le nombre définie dans l'url, ou 1 si pas indiqué (ou zéro) ou la dernière page si le nombre indiqué est plus grand que le nombre maximal de page calculé.

3/ affichage de la table et de la barre de pagination


Voilà tu as la fonctionnalité souhaité ;)

Alors oui pas de code, moi je sais faire et le but c'est que le sache aussi (promotion de l'apprentissage du langage, tous ça).

Commence dans l'ordre indiqué, si tu as des soucis pas de problème on te répondra (code à l'appui sur la question) pour t'aider à avancer.

ce que tu demande est réalisable même pour un débutant, il faut avoir les bases des langages php et SQL (voir mysql dans ton cas pour la clause limit ;) ).


juste en passant : la solution de or1 peux ce mettre relativement facilement en place
par exemple https://datatables.net/examples/data_sources/ajax.html
il 'suffit' de replacer le serveur par un script php qui récupère les données et fournie le json qui va bien.
c'est "une" solution rapide.
Après si tu as beaucoup de données il est préférable d'avoir une pagination coté serveur. Il y a un exemple sur le sujet : https://datatables.net/examples/data_so ... _side.html

je n'ai pas regardé plus que cela ce script js, il semble juste répondre à tes besoin ;)

bon courage

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

01 juil. 2016, 14:56

Super ! merci pour ton temps et tes explications, je vais ingurgiter tout ceci et vous proposerez du code si besoin :)