Identification (class+session+mysql)


Description

Voici une identification simple, un bon moyen par la même occasion pour faire une approche des class en php:
Dans cette exemple nous utiliserons comme méthodes :
- Les Class pour une gestion plus aisée des fonctionnalités du projet.
- La Base de données MySQL pour la gestion et le stockage des informations
- Les Sessions pour un maintient de l'etat d'identification.

IL se décompose de 4 fichiers
- access.inc.php
- access.php
- access.html
- index.php

Nous allons mettre en place une certaine discipline de codage afin que ce code soit comprehensible en plus facilement transportable:

- Précéder toujours les variables ,les constantes et les fonctions de l'abréviation de leur type ou du type qu'il retourne pour les fonctions.
int_ : integer
str_ : string
flo_ : float
arr_ : array
boo_ : boolean
cls_ : class
sess_ : session
var_ : variant
exemple
la variable bdd est de type integer donc je l'écris int_bdd
la fonction access me renvoie un type boolean donc j'écris function boo_access()

- Mettre toujours les constantes en majuscule.
STR_BDNAME

- Donner des nom de variables, constantes et fonctions le plus court possible et le plus représentatif de son utilisation.

- Commenter le code ni trop ni trop peu.

Source / Exemple :


Pour l'exemple, nous allons procéder par étape:

A] Création de la base de données :
    - Créez une table - tbl_user -
    - Créez 3 champs : user_iduser  : INT(11) NOT NULL PRIMARY AUTO INCR
                                user_user    :  varchar(12) NOT NULL
                                user_pass    :  varchar(12) NOT NULL

B] Création du fichier access.inc.php :
    1) Définition les constantes de connection BDD:
    <?
    // Constante de connection à la base de données
    define(STR_DBHOTE,"nom_de_l_hote_serveur_mysql");
    define(STR_DBNAME,"nom_de_la_base_de_données");
    define(STR_DBUSER,"user_de_la_base_de_données");
    define(STR_DBPASS,"pass_de_la_base_de_données");
    ?>
    2) Création de la class access :
    <?
    // Class access
    class access()
    {
      // Ce que vous appelez variables se nomme dans une Class - Attribut -
      // (Lorsqu'elles se situent à ce niveau dans la class)
      // Utilisation d'un attribut : $this->nomdelavariable
      // Ce que vous appelez fonction se nomme dans une Class - Méthode -
      // Utilisation d'une methode : $this->nomdelamethode($var)

      /* -------------------------------------------------------------------------- */
      // Liste des attributs de la class
      /* --------------------------------------------------------------------------- */
      var int_bdd;
      var str_user;
      var str_pass;

      /* --------------------------------------------------------------------------- */
      // Initialisation de la class (ou Constructeur)
      /* --------------------------------------------------------------------------- */
      function access()
      {
        // Ouverture de session
        session_start();
      }

      /* --------------------------------------------------------------------------- */
      // Création de la méthode d'identification
      // paramètres entrants : $str_user     ;string    ;def: ""     : Login
      //                                 $str_pass    ;string    ;def: ""     : Mot de passe
      // paramètres sortants : vrai ou faux ;boolean ;def: faux : resultat
      /* --------------------------------------------------------------------------- */
      function boo_identification($str_user = "", $str_pass = "")
      {
        // Acces aux variables de session
        global $sess_user, $sess_pass;

        // Connection au serveur MySQL + gestion d'erreur.
        if( !($this->bdd=@mysql_connect(STR_DBHOTE, STR_DBUSER,STR_DBPASS)) ) return false;

        // Connection à la Bdd + gestion d'erreur.
        if( !(@mysql_select_db("STR_DBNAME",$this->bdd)) ) return false;

        // Récupération des paramètres entrants
        if($str_user=="" || $str_pass=="")
        {
           // Récupération des paramètres de sessions
           $str_user=$sess_user;
           $str_pass=$sess_pass;
           if($str_user=="" || $str_pass=="") return false;
        }

        // Vérification des identifiants dans la base de données
        $arr_data = mysql_query("SELECT * FROM tbl_user WHERE LCASE(user_user) = '".strtolower($str_user)."' AND LCASE(user_pass) = '".strtolower($str_pass)."'");
        if(mysql_num_rows($arr_data)>0)
        {
           // Enregistrement des informations dans les variables de sessions
           $sess_user = $str_user;
           session_register("sess_user");
           $sess_pass = $str_pass;
           session_register("sess_pass");
           return true;
        } else return false;
      }

    }
    ?>

C] Création du fichier access.php :
    Ce fichier va servir de filtre d'identification, Il sera à inclure dans tous les pages nécessitant une identification (appel: include("access.php"); )
    <?
    // Ouverture de session
    session_start();

    // Initialisation de la class access (ou Instance)
    $cls_access = new access();

    // Vérification des identifiants par appel de la méthode boo_identification
    if( !$cls_access->boo_identification($str_frm_user, $str_frm_pass) )
    {
       // Destruction de la session
       @session_destroy();

       // Vérification que l'url de redirection n'est pas vide
       if($str_url=="") $str_url = $_SERVER['SERVER_NAME'];

       // Script javascript de redirection à la page d'identification
       // (En dehors des balise PHP)
       ?>
       <script>
         alert("Problème d'identification!\nVeuillez vous identifier.\nMerci");
         top.document.location.href = "http://<? print($str_url); ?>";
       </script>
       <?
    }
    ?>

D] Création du fichier access.html
    Ce fichier est le formulaire d'identification. Les informations saisie seront envoyées à la première page de l'acces privé - index.php - ).
<html>
<head>
  <title>Identification</title>
</head>
<script>
  // Vérification des champs vides
  function IsEmpty(chaine,err) {
    if(chaine=="") return true;
    else return err;
  }

  // Envois des informations
  function send() {
    var vide = false;
    vide = IsEmpty(document.frmaccess.str_frm_user.value,vide);
    vide = IsEmpty(document.frmaccess.str_frm_pass.value,vide);
    if(vide) alert("Tous les champs obligatoires (*) ne sont pas remplis.");
    else  document.accesform.submit();
  }
</script>
<body>
<center>
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%">
  <tr>
    <td align="center" class="titre1">IDENTIFICATION</b></td>
  </tr>
  <tr>
    <td align="center"><table border="1" cellpadding="0" cellspacing="0" width="30%" height="50%">
    <form name="frmaccess" action="index.php" method="post">
        <tr>
          <td width="15%" align="center" bgcolor="#FFFCEB">Login*&nbsp;:</td>
          <td width="15%" align="center" bgcolor="#CEBFFF"><input type="text" name="str_frm_user" value="" maxlength="12"></td>
        </tr>
        <tr>
          <td width="15%" align="center" bgcolor="#FFFCEB">Mot de passe*&nbsp;:</td>
          <td width="15%" align="center" bgcolor="#CEBFFF"><input type="password" name="str_frm_pass" value="" maxlength="12"></td>
        </tr>
        <tr>
          <td colspan="2" align="center"><a href="javascript:send()">Valider</a></td>
        </tr>
    </form>
    </table></td>
   </tr>
   <tr>
     <td align="centerby <a href="http://www.apxa.com" target="_blank">ApxA</a></td>
   </tr>
</table>
</center>
</body>
</html>

E] Création du fichier index.php
<?
include("access.php");
?>
<html>
<head>
  <title>Identification</title>
</head>
<body>
<center>
<h1>Bonjour et bienvenue dans un accés nécessitant une identification.
Ce code vous est proposé par <a href="http://www.apxa.com" target="_blank">ApxA</a></h1>
</center>
</body>
</html>

Conclusion :


Ce projet n'a pas été testé.
Théoriquement il devrait fonctionner.
Bonne programmation et have fun ;)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.