Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage dynamique de BDD

    16 juillet 2019 à 10:53:55

    Bonjour,

    Mon soucis est le suivant. J'ai un tableau excel à 2 entrées (postes, activités; avec comme liens une case coché quand le poste participe à l'activité). J'aimerais savoir s'il est possible d'afficher cette modélisation dynamiquement sur un site web, s'il y a déjà des logiciels qui le font ou s'il faut tout coder soit même (HTML, Javascript, ou PHP). Le but est que le rendu soit facile à utiliser pour quelqu'un de lambda, qu'il n'ait juste qu'à cliquer sur un poste pour voir avec qui il travaille, et sur quelles activités.

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2019 à 11:48:00

      Bonjour,

      Dans une logique de base de données relationnelle, ton tableau n'est pas adapté.

      Même dans Excel tu as dévoyé la logique de la feuille de calcul. Tu aurais dû utiliser un tableau croisé dynamique ...

      Faisons une analyse entités/relations.

      Tu as des personnes, des postes et des activités. Ce sont trois entités, donc trois tables (ou feuille de calcul ou plage de données).

      Une personne est liée à un poste, et un poste peut être lié à plusieurs personnes. Relation 1,n.

      Un poste peut être lié à plusieurs activités, et une activité peut être liée à plusieurs postes. Relation n,n.

      Le modèle de données et donc le suivant :

      • poste ( id_poste [pk], libelle )
      • activite ( id_activite [pk], libelle )
      • personne ( id_personne [pk], id_poste [fk], nom, prenom, etc. )
      • poste_activite ( id_poste [pk][fk], id_activite [pk][fk] )

      Une table pour lister les postes, une table pour lister les activités, une table pour lister les personnes (liées à leur poste), et une table pour enregistrer les liens entre postes et activités.

      Tout cela serait matérialisé dans Excel comme des tableaux droits (une entrée), et tu construis ton tableau à deux entrées avec l'outil tableau croisé dynamique et utilisant la table (ou feuille ou plage) poste_activite ...

      RaphaëlHervé1 a écrit:

      J'aimerais savoir s'il est possible d'afficher cette modélisation dynamiquement sur un site web, s'il y a déjà des logiciels qui le font ou s'il faut tout coder soit même

      Pour répondre à ta question, je ne pense pas qu'il existe des outils tout prêt qui font cela directement ... par contre si tu as des bases en programmation HTML/PHP/JS, ce sera relativement facile à mettre en ligne ...

      Le sujet est déplacé de la section Base de données vers la section Discussions développement

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        16 juillet 2019 à 13:13:23

        Enfaite je ne traite pas les personnes ici. e vois le raisonnement côté BDD. Que l'on soit d'accord, il n'y a bien aucun moyen de le faire avec seulement 2 tables postes et activité ? La table poste_activite est bien nécessaire ? J'ai un petit dote, cela fait un moment que je n'ai pas fait de BDD.

        Concernant le développement, j'ai bien quelques bases en HTML/PHP/JS, mais je ne sais pas trop par où commencer. Quel serait l'approche la plus simple pour mon problème ? Renseigner la BDD puis créer un site où j'interroge la BDD grâce à du PHP ?

        • Partager sur Facebook
        • Partager sur Twitter
          16 juillet 2019 à 14:22:39

          RaphaëlHervé1 a écrit:

          il n'y a bien aucun moyen de le faire avec seulement 2 tables postes et activité ? La table poste_activite est bien nécessaire ?

          Il y a des moyens de faire sans, mais ce ne seront pas des solutions évolutive et maintenable facilement ... La méthode présentée juste avant est LA méthode :D

          RaphaëlHervé1 a écrit:

          J'aimerais savoir s'il est possible d'afficher cette modélisation dynamiquement sur un site web

          RaphaëlHervé1 a écrit:

          j'ai bien quelques bases en HTML/PHP/JS, mais je ne sais pas trop par où commencer

          Qui dit site web dit serveur web. Il faut donc commencer par créer ce serveur. Soit en local (si tous les utilisateurs sont sur le même réseau) en installant par exemple WAMP, soit à distance par exemple avec un hébergement mutualisé (1&1, OVH, etc.).

          Sur ce serveur tu crées une base de données avec tes 3 tables : poste, activite et poste_activite (comme vu précédemment).

          Sur ce serveur tu crées un fichier PHP qui se connecte à cette base et qui va permettre les actions suivantes :

          • gérer la liste des postes
          • gérer la liste des activités
          • gérer la matrice poste/activité avec un système de case à cocher (ou autre interface de ton choix)

          Pour gérer la matrice, il suffit de récupérer tous les couples poste/activité possibles :

          SELECT
          	P.id_poste,
          	P.libelle AS lib_poste,
          	A.id_activite,
          	A.libelle AS lib_activite
          FROM
          	poste P CROSS JOIN activite A
          ORDER BY lib_poste, lib_activite

          Côté PHP il faut faire une boucle pour afficher ta matrice, genre :

          <?php
          	try {
          		// Connexion MySQL
          		$pdoOptions[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
          		$pdoOptions[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;
          		$bdd = new PDO( 'mysql:host=localhost;dbname=exemple;charset=utf8', 'root', '', $pdoOptions);
          		
          		// Liste des postes
          		$requete = $bdd->query( '
          			SELECT id_activite, libelle
          			FROM activite
          			ORDER BY id_activite;'
          		);
          		$activites = $requete->fetchAll();
          		
          		// Liste des activités
          		$requete = $bdd->query( '
          			SELECT id_poste, libelle
          			FROM poste
          			ORDER BY id_poste;'
          		);
          		$postes = $requete->fetchAll();
          		
          		// Liste des couples
          		$requete = $bdd->query( '
          			SELECT id_poste, id_activite
          			FROM poste_activite
          			ORDER BY id_poste, id_activite;'
          		);
          		$couples = $requete->fetchAll();
          		
          		// Entête de colonnes du tableau avec les activités
          		$html = '<table><thead><tr><th>Activités</th>';
          		foreach( $activites as $activite ) {
          			$html .= '<th rowspan="2">'.$activite->libelle.'</th>';
          		}
          		$html .= '</tr><tr><th>Postes</th></tr></thead><tbody>';
          		
          		// Lignes du tableau (une par poste)
          		foreach( $postes as $poste ) {
          			$html .= '<tr><td>'.$poste->libelle.'</td>';
          			
          			// Colonnes du tableau (une par activité)
          			foreach( $activites as $activite ) {
          				$html .= '<td>';
          				// Test si le couple est coché ou non
          				foreach( $couples as $couple ) {
          					if( $couple->id_poste == $poste->id_poste && $couple->id_activite == $activite->id_activite ) {
          						$html .= 'X';
          						break;
          					}
          				}
          				$html .= '</td>';
          			}
          			
          			$html .= '</tr>';
          		}
          		
          		$html .= '</tbody></table>';
          		
          		echo $html;
          	}
          	catch(Exception $e) {
          		var_dump( $e );
          	}

          Après je te laisse approfondir pour la gestion de la mise à jour de la matrice avec des input du genre :

          <input type="checkbox" name="choix[x][y]" selected="selected" />

          Courage !

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            16 juillet 2019 à 16:09:02

            Merci !

            Pour ce qui est de l'affichage, j'aurais aimé avoir quelque chose de fluide, et du type :

            On a une "image de bonhomme" avec son nom de poste, on clique dessus et on voit toutes ses relations apparaître sans rafraichir la page. Puis si l'on veut voir les relations avec une de ces relations, on peut cliquer dessus et ainsi de suite. Cela est il possible ?

            • Partager sur Facebook
            • Partager sur Twitter
              16 juillet 2019 à 16:43:10

              RaphaëlHervé1 a écrit:

              Cela est il possible ?

              Avec du temps et de la persévérance tout est possible :D

              Mais il va falloir mettre les mains dans le cambouis, et te former sûrement beaucoup ...

              RaphaëlHervé1 a écrit:

              On a une "image de bonhomme" avec son nom de poste, on clique dessus et on voit toutes ses relations apparaître sans rafraichir la page. Puis si l'on veut voir les relations avec une de ces relations, on peut cliquer dessus et ainsi de suite

              Du coup tu vas avoir besoin de JavaScript et AJAX pour satisfaire le "sans rafraîchir la page".

              Je ne vois là rien d'impossible, c'est même plutôt accessible comme ergonomie ...

              Je te propose de commencer par créer ta base de données et de la remplir à l'image de ton fichier Excel.

              Une fois cela fait, crée un fichier PHP côté serveur qui va te servir à communiquer avec ta base, avec les fonctions de base :

              • se connecter à la base
              • récupérer toutes les activités
              • créer une activité
              • récupérer tous les postes
              • créer un poste
              • associer une activité à un poste
              • récupérer toutes les activités liées à un poste
              • récupérer tous les postes liés à une activité

              Une fois cela fait, tu vas pouvoir développer ta partie "site", en HTML/CSS/JS/AJAX, pour gérer l'appel à tes fonctions PHP et l'affichage des informations retournées.

              -
              Edité par Benzouye 16 juillet 2019 à 16:43:59

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Affichage dynamique de BDD

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown