Identification (class+session+mysql)

Soyez le premier à donner votre avis sur cette source.

Vue 18 111 fois - Téléchargée 1 770 fois


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

Ajouter un commentaire Commentaires
patric31 Messages postés 30 Date d'inscription mardi 15 août 2006 Statut Membre Dernière intervention 11 février 2014
28 nov. 2008 à 08:59
Bonjour à tous,

Je suis un tout petit débutant, je ne sais pas si il y a un niveau en dessous . . .

Je viens de tester le code et j'ai créé dans Mysql un user.

Seulement j'ai cette erreur qui s'affiche :
Ligne : 19
Car : 7
Erreur : 'document.accessform' a la valeur Null ou n'est pas un obje
Code 0
URL : http://127.0.0.1/irp/access.html

La ligne 19 : else document.accesform.submit();

Merci beaucoup pour votre aide.
Patrick
titou_hello Messages postés 24 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 10 novembre 2008
5 nov. 2007 à 10:33
Belle source :)
yotamanga Messages postés 9 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 29 mai 2007
29 mai 2007 à 16:46
Le message d'erreur retourné concerne la session ^^
session_start() doit toujours etre en début de code ^^

fais plutot :
<?php session_start();
include "access.php";
include "entete.php";
include "menu.php";?>

et pas de session_start(); dans access.php

en espérant que cela marche
cs_yonel Messages postés 7 Date d'inscription mardi 1 avril 2003 Statut Membre Dernière intervention 8 novembre 2006
14 mars 2007 à 11:43
Eh bien non ça ne marche pas mieux en fait:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/139/sdc/e/3/magetyo/securise/access.php:1) in /mnt/139/sdc/e/3/magetyo/securise/access.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/139/sdc/e/3/magetyo/securise/access.php:1) in /mnt/139/sdc/e/3/magetyo/securise/access.php on line 3

Voici le début du code de access.php:

<?
// Ouverture de session
session_start();
include "access.php";

Et voici le début de mes pages:

<?php include "access.php";?>
<?php include "entete.php";?>
<?php include "menu.php";?>


Aidez-moi svp... ;-(
cs_yonel Messages postés 7 Date d'inscription mardi 1 avril 2003 Statut Membre Dernière intervention 8 novembre 2006
14 mars 2007 à 11:05
C'est bon j'ai trouvé tout seul.
C'est parce que j'utilisait une meta de redirection...

débutant ;-)

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.