1 Exercice POO (1) On se propose de réaliser un formulaire d’authentification dans un site web, un formulaire d’inscription pour les nouveaux utilisateurs et un formulaire de modification du profil Une table Personne est attribué. Créer une classe connexion qui gère les connexions à la base de données en utilisant les méthodes suivantes : Connexion (): qui sert à établir une connexion avec le serveur de la base de données et à sélectionner la base de données closeBase() : qui sert à fermer la connexion avec le serveur de base de données. execRq($rq) : qui permet d’exécuter une requête de sélection $rq . execMaj($rq) : qui permet d’exécuter les autres types de requêtes. Année universitaire 2012-2013 © Boudriga Imed 2 Exercice POO (2) Connexion.php <?php // class connexion class Connexion { private $serveur ="localhost"; private $user="root"; private $pass=""; private $base="phpoo"; private $con; private $c; public function Connexion() { $this->c=mysql_connect($this->serveur,$this->user,$this->pass); $this->con=mysql_select_db($this->base,$this->c); if(! $this->con)echo "Erreur connexion base <br>" ; } Année universitaire 2012-2013 © Boudriga Imed 3 Exercice POO (3) Connexion.php (suite) public function closeBase() { mysql_close($this->c); } public function execRq($rq) { $res=mysql_query($rq); return $res; } } ?> public function execMaj($rq) { $res=mysql_query($rq); return $res!=null; } Année universitaire 2012-2013 © Boudriga Imed 4 Exercice POO (4) Créer une classe personne qui permet de définir une personne en utilisant les méthodes suivantes : La méthode personneInit() : qui permet d’initialiser une personne les méthodes « Set » de chaque attribut d’une personne les méthodes « Get » de chaque attribut d’une personne La méthode ajouterPersonne() : qui permet d’ajouter une personne La méthode MAJPersonne() : qui permet de mettre à jour une personne La méthode chargerPersonne($login,$mp) : qui permet de charger les informations d’une personne en utilisant son login et son mot de passe La méthode chargerPersonneId($id) qui permet de charger les informations d’une personne en utilisant son identificateur La méthode supprimerPersonne($id) : qui permet de supprimer une personne en utilisant son identificateur Année universitaire 2012-2013 © Boudriga Imed 5 Exercice POO (5) Personne.php <?php //class Personne include_once 'Connexion.php'; class Personne { private $id=NULL; private $nom=""; private $prenom=""; private $login=""; private $pass=""; private $dateNaiss=""; private $sexe=""; private $email=""; private $adres=""; private $type="utilisateur"; Année universitaire 2012-2013 © Boudriga Imed 6 Exercice POO (6) Personne.php (suite) public function __construct(){} public function personneInit($id,$login,$pass,$nom,$prenom,$dateNaiss, $sexe, $email, $adres, $type) { $this->id=$id; $this->nom=$nom; $this->prenom=$prenom; $this->login=$login; $this->pass=$pass; $this->dateNaiss=$dateNaiss; $this->sexe=$sexe; $this->email=$email; $this->adres=$adres; $this->type=$type; } Année universitaire 2012-2013 © Boudriga Imed 7 Exercice POO (7) Personne.php (suite) //les setteurs public function setId($id){$this->id=$id;} public function setNom($nom){$this->nom=$nom;} public function setPrenom($pren){$this->prenom=$pren;} public function setLogin($login){$this->login=$login;} public function setPass($pass){$this->pass=$pass;} public function setDatNaiss($d){$this->dateNaiss=$d;} public function setSexe($s){$this->sexe=$s;} public function setEmail($e){$this->email=$e;} public function setAdr($a){$this->adres=$a;} public function setType($t){$this->type=$t;} Année universitaire 2012-2013 © Boudriga Imed 8 Exercice POO (8) Personne.php (suite) //Les getteurs public function getId(){return $this->id;} public function getNom(){return $this->nom;} public function getPrenom(){return $this->prenom;} public function getLogin(){return $this->login;} public function getPass(){return $this->pass;} public function getDateNaiss(){return $this->dateNaiss;} public function getSexe(){return $this->sexe;} public function getEmail(){return $this->email;} public function getAdres(){return $this->adres;} public function getType(){return $this->type;} Année universitaire 2012-2013 © Boudriga Imed 9 Exercice POO (9) Personne.php (suite) public function ajouterPersonne() { $c=new Connexion(); if (!$c->execMaj("insert into personne values(NULL,'$this>login','$this->pass','$this->nom','$this->prenom','$this->dateNaiss','$this>sexe','$this->email','$this->adres','$this->type')")) echo "Erreur ajout personne <br>" ; $res=$c->execRq("select max(id_cl) from personne"); if ($row = mysql_fetch_array($res)) { $this->setId($row[0]);; } } $c->closeBase(); Année universitaire 2012-2013 © Boudriga Imed 10 Exercice POO (10) Personne.php (suite) public function MAJPersonne() { $c=new Connexion(); if (!$c->execMaj("update personne set nom='$this->nom' ,prenom='$this->prenom' ,login='$this->login' ,pass='$this->pass' ,date_naiss='$this->dateNaiss' ,sexe='$this->sexe' ,email='$this->email' ,adresse='$this->adres' ,type='$this->type' where id_cl=$this->id")) echo "Erreur Modif personne <br>" ; $c->closeBase(); } Année universitaire 2012-2013 © Boudriga Imed 11 Exercice POO (11) Personne.php (suite) public function chargerPersonne($login,$mp) { $c=new Connexion(); $res=$c->execRq("select * from personne where login='$login' and pass='$mp'") ; if ($row = mysql_fetch_array($res)) { $this->id=$row[0]; $this->login=$row[1]; $this->pass=$row[2]; $this->nom=$row[3]; $this->prenom=$row[4]; $this->dateNaiss=$row[5]; $this->sexe=$row[6]; $this->email=$row[7]; $this->adres=$row[8]; $this->type=$row[9]; return (true); }else{return(false);} $c->closeBase(); Année universitaire 2012-2013 © Boudriga Imed 12 } Exercice POO (12) Personne.php (suite) public function chargerPersonneId($id) { $c=new Connexion(); $res=$c->execRq("select * from personne where id_cl=$id") ; if ($row = mysql_fetch_array($res)) { $this->id=$row[0]; $this->login=$row[1]; $this->pass=$row[2]; $this->nom=$row[3]; $this->prenom=$row[4]; $this->dateNaiss=$row[5]; $this->sexe=$row[6]; $this->email=$row[7]; $this->adres=$row[8]; $this->type=$row[9]; return (true); }else{ return(false); } $c->closeBase(); Année universitaire 2012-2013 © Boudriga Imed } 13 Exercice POO (13) Personne.php (suite) public function supprimerPersonne($id) { $c=new Connexion(); if (!$c->execMaj("delete from personne where id_cl=$id ")) echo "Erreur supp. personne <br>" ; $c->closeBase(); } } ?> Année universitaire 2012-2013 © Boudriga Imed 14 Exercice POO (14) Créer une classe Core qui permet de gérer la session d’une personne La méthode connexion($login,$pass) : qui permet de créer une session pour une personne La méthode deconnexion() : qui permet de fermer une session d’une personne La méthode getIdSession() : qui permet de récupérer une session d’une personne Année universitaire 2012-2013 © Boudriga Imed 15 Exercice POO (15) class Core { public static function connexion($login,$pass) { include_once 'Personne.php'; if (Core::getIdSession()!=null)return ; $p=new Personne() ; if ($p->chargerPersonne($login,$pass)==true) { //session_start(); $_SESSION['login']=$login; $_SESSION['id_client']=$p->getId();; $_SESSION['client']=$p->getNom()." ".$p->getPrenom()." "; $_SESSION['clientType']=$p->getType(); return (true); } else { return(false); } } Année universitaire 2012-2013 © Boudriga Imed 16 Exercice POO (16) Core.php (suite) <?php public static function deconnexion() { if(isset($_SESSION['id_client'])) { session_destroy(); unset($_SESSION); } } public static function getIdSession() { if(isset($_SESSION['id_client'])) return ($_SESSION['id_client']); else return (null); } } ?> Année universitaire 2012-2013 © Boudriga Imed 17 Exercice POO (17) Toutes ces classes sont classées dans un répertoire dans la racine du site nommé « class » On voudrait créer une page d’authentification d’une personne « index.php », cette page va gérer la totalité de notre site web en incluant des fichiers à la demande L’utilisateur non inscrit pourra cliquer sur le lien « s’inscrire » pour faire une inscription en utilisant un formulaire qui va être affiché dans la même page en incluant la page «profil.php » Année universitaire 2012-2013 © Boudriga Imed 18 Exercice POO (18) Lorsque l’utilisateur s’authentifie, il reste dans la même page « index.php » L’utilisateur pourra cliquer sur le lien « changer les informations personnelles» pour faire une modification de son profil en utilisant un formulaire qui va être affiché dans la même page en incluant la page «profil.php » Année universitaire 2012-2013 © Boudriga Imed 19 Exercice POO (19) index.php <?php include_once 'class/connexion.php'; include_once 'class/Core.php'; session_start(); echo" <form method='post' action='' >" ; if(Core::getIdSession()==null) { echo "<input name='nu' type='text' placeholder='Nom utilisateur'> <input name='mp' type='password' placeholder='Mot de passe'> <input name='connexion' type='submit' value='Connexion'><br> <a href='index.php?inscri'>S'inscrire</a>" ; } else { echo "Bienvenu ".$_SESSION['client'] ; echo "<a href='index.php?profil'>Changer les informations personnelles</a><br> <input type='submit' value='Deconnexion' name=deconnexion> "; } echo "</form>"; Année universitaire 2012-2013 © Boudriga Imed 20 Exercice POO (20) index.php (suite) if(isset($_POST['connexion'])) { if (! Core::connexion($_POST['nu'],$_POST['mp'])) { echo"<script type='text/javascript' >alert('Login et mot de passe sont invalides ')</script>" ; } } if(isset($_POST['deconnexion'])) { Core::deconnexion(); header("location:index.php"); } if(isset($_GET['inscri'] ) || isset($_GET['profil'] ) ) { include 'profil.php'; } Année universitaire 2012-2013 © Boudriga Imed ?> 21 Exercice POO (21) profil.php <?php include_once 'class/Core.php'; include_once 'class/Personne.php'; $t=Core::getIdSession()!=null; $p=new Personne(); if($t==true) { $p->chargerPersonneId(Core::getIdSession()); echo "Modifier mon profil :<br><br>" ; } else { echo "S'inscrire :<br><br>" ; } echo " <form action='' method='get'> <table width=100%> <tr> <td>Login : </td> <td><input type='text' name='login' value='".$p->getLogin()."' /></td> </tr> Année universitaire 2012-2013 © Boudriga Imed 22 Exercice POO (22) profil.php(suite) <tr> <td>Mot de passe : </td> <td><input type='text'name='pass' value='".$p->getPass()."' /></td> </tr> <tr> <td>Nom :</td> <td><input type='text' name='nom' value='".$p->getNom()."' /></td> </tr> <tr> <td>Prénom : </td> <td><input type='text' name='prenom' value='".$p->getPrenom()."' /></td> </tr> <tr> <td>Date naissance : </td> <td><input type='text' name='datn' value='".$p->getDateNaiss()."' /></td> </tr> <tr> <td>Sexe : </td> <td> Année universitaire 2012-2013 © Boudriga Imed 23 Exercice POO (23) profil.php(suite) <select name='sexe'> <option value=homme "; if($p->getSexe()=="homme")echo 'selected' ; echo ">Homme</option> <option value=femme "; if($p->getSexe()=="femme")echo 'selected' ; echo " >Femme</option> </select> </td> </tr> <tr> <td>Email : </td> <td><input type='text' name='email' value='".$p->getEmail()."' /></td> </tr> <tr> <td>Adresse :</td> <td><textarea name='adrs'>".$p->getAdres()."</textarea></td> </tr> </table>"; Année universitaire 2012-2013 © Boudriga Imed 24 Exercice POO (24) profil.php(suite) if($t) echo "<input type='submit' name='MAJ' value='Mettre à jour '>" ; else echo "<input type='submit' name='inscription' value=S'inscrire>" ; echo "<input type='hidden' name='profil'>"; echo "</form>"; //modification /mise a jour if ( isset($_GET['MAJ']) || isset($_GET['inscription'])) { $p->setId(Core::getIdSession()); /* $p->personneInit(Core::getIdSession(),$_GET['login'],$_GET['pass'], $_GET['nom'],$_GET['prenom'] ,$_GET['datn'],$_GET['sexe'],$_GET['email'], $_GET['adrs'],"utilisateur"); */ Année universitaire 2012-2013 © Boudriga Imed 25 Exercice POO (25) profil.php(suite) $p->setNom($_GET['nom']); $p->setPrenom($_GET['prenom']); $p->setLogin($_GET['login']); $p->setPass($_GET['pass']); $p->setDatNaiss($_GET['datn']); $p->setSexe($_GET['sexe']); $p->setEmail($_GET['email']); $p->setAdr($_GET['adrs']); if(isset($_GET['MAJ'])) { $p->MAJPersonne(); } elseif (isset($_GET['inscription'])) { $p->ajouterPersonne(); Core::connexion($_GET['login'],$_GET['pass']); } Année universitaire 2012-2013 © Boudriga Imed 26 Exercice POO (26) profil.php(suite) $_SESSION['login']=$_GET['login']; $_SESSION['client']=$_GET['nom']." ".$_GET['prenom']." "; echo"<script type='text/javascript' >alert('Vos données personnelles ont été enregisté. ') ; window.location = 'index.php'; </script>" ; //retour au profil :p } ?> Année universitaire 2012-2013 © Boudriga Imed 27