samedi 21 mai 2005

Concevoir une application en PHP


Concevoir une application en PHP

Présentation

Lors de la réalisation d'une application le choix du langage de programmation est conditionné par l'utilisation qui sera faite du logiciel. PHP est donc utile si vos utilisateurs sont nombreux et réparti géographiquement, car il ne nécessite pas l'installation d'un logiciel client lourd, un simple navigateur internet suffit.

Dès lors qu'une application contient des données importantes, il est utile de pouvoir contrôler les accès à celles-ci, pour cela une identification de chaque utilisateur est nécessaire. Nous allons voir dans cet article comment structurer son code afin de réaliser une application de gestion complexe.

Création de la structure

Dans un premier temps, il est nécessaire de déterminer la structure de l'application, c'est-à-dire les différents utilisateurs ainsi que les fonctionnalités accessibles à chacun.
Par exemple, pour un logiciel de gestion de notes dans un établissement scolaire, on aura les types d'utilisateurs suivants :

Type utilisateur       Fonctionnalités
Administrateur
  • Ajout/modification/suppression d'utilisateurs
  • Ajout/modification/suppression de classes
Direction
  • Consultation des notes des élèves
Vie scolaire
  • Gestion des absences
  • Modification des classes des élèves
  • Modification des classes des enseignants
Enseignants
  • Saisie des notes
  • Edition de synthèses
  • Editions de bulletins de notes
Elèves
  • Consultation des notes personnelles
Pour faciliter la maintenance de l'application, il peut-être utile d'enregistrer tout cela dans une base de données, on aura donc la base de données suivante :

Nom de la table      Champs de la table
typeUtilisateur
  • num (identifiant)
  • libellé
utilisateur
  • login
  • mot de passe
  • nom
  • prénom
  • type (qui reprend une valeur de num de la table typeUtilisateur)
Chaque fonctionnalité correspond à un élément du menu de l'application, on peut donc les enregistrer dans une base de données :

Nom de la table       Champs de la table
fonctionnalités
  • type (qui reprend une valeur de num de la table typeUtilisateur)
  • menu (qui contient l'élément du menu)
  • action (qui indique l'action associée à la fonctionnalité)
  • libellé (libellé qui apparaît dans le menu)
  • ordre (ordre d'affichage dans le menu)
  • actif (permet de désactiver un élément du menu sans le supprimer)


Exemple de table fonctionnalités complétées :
type menu action libellé ordre actif
'administrateur' 'accueil' 'gestionUtilisateurs' 'Gestion des utilisateurs' 1 vrai
'administrateur' 'accueil' 'gestionClasses' 'Gestion des classes' 2 vrai
'direction' 'accueil' 'consultationNotes' 'ConsultationNotes' 1 vrai
'vie scolaire' 'accueil' 'gestionAbsences' 'Gestion des absences' 1 vrai
'vie scolaire' 'accueil' 'gestionEleves' 'Gestion des élèves' 2 vrai
'vie scolaire' 'accueil' 'gestionEnseignants' 'Gestion des enseignants' 3 vrai
'enseignant' 'accueil' 'saisieNotes' 'Saisie de notes' 1 vrai
'enseignant' 'accueil' 'editions' 'Editions' 2 vrai
'enseignant' 'editions' 'editionsSyntheses' 'Editions de synthèse' 1 vrai
'enseignant' 'editions' 'editionsBulletins' 'Editions de bulletins' 2 vrai

On remarque que cette structure permet de définir des menus et des sous-menus comme on le souhaite et donc de faciliter la maintenance de l'application, ajouter une fonctionnalité ne nécessite pas la relecture de tout le code pour refaire le menu, le menu sera modifié dynamiquement par l'ajout d'un élément dans la base.

Mise en place

Pour utiliser la structure créée, on utilise un fichier "index.php" qui doit définir le type de l'utilisateur et à partir de cela lui afficher le menu correspondant à l'aide d'une fonction menu :

function menu($menu){
        global $type;

        $query="select action,libelle from menu where menu='$menu' and type=$type and actif=1 and ordre>0  order by ordre";
        $result=mysql_query($query);
        $nbCaracteres=0;
        if(mysql_num_rows($result)>0){
                echo "<div id=\\"menu\\">\\n";
                echo "  <table border=0>\\n";
                echo "      <tr>\\n";
                while($row=mysql_fetch_row($result)){
                        echo "          <td>";
                        echo "<a href=\\"./.?action=$row[0]\\">stripslashes($row[1])</a>;
                        $nbCaracteres = $nbCaracteres + strlen($row[1]);
                        echo "       </td>\\n";
                }
                echo "      </tr>\\n";
                echo "  </table>\\n";
        }
}

un switch permet d'amener l'utilisateur sur l'élément souhaité selon la valeur de la variable $action.

Conclusion

Cette méthode permet d'améliorer la maintenabilité d'un logiciel écrit en PHP, il peut être utile de générer un outil de gestion des menus lorsque l'application devient très grosse avec de nombreux types d'utilisateurs différents.