Votre question

[PHP] poo

Tags :
  • Base de données
  • Programmation
Dernière réponse : dans Programmation
20 Février 2010 02:07:17

Bonsoir,

J'ai un petit problème dans mon raisonnement et j'ai besoin de votre science pour comprendre et finir mon script
Donc voila je suis entrin de développer la partie authentification de mon site web.

J'ai une class mysql.class.php

  1. <?php
  2.  
  3. class Mysql {
  4.  
  5. private $tabMysql; // La variable qui s'initialisera sous forme de tableau
  6. private $link;
  7. private $test;
  8.  
  9.  
  10. public function __construct ($serveur,$login,$mdp,$database) {
  11.  
  12. $this->tabMysql=array("serv"=>$serveur,"log"=>$login,"pass"=>$mdp,"db"=>$database);
  13. $this->link= mysql_connect($this->tabMysql["serv"],$this->tabMysql["log"],$this->tabMysql["pass"]);
  14. mysql_select_db(($this->tabMysql["db"]));
  15.  
  16.  
  17. if(!$this->link) {
  18. throw new exception ('Impossible de se connecter à la base de donnée Petasse');
  19. }
  20. echo 'Connexion réussi à la base de donnée avec succès'; // a revoir
  21.  
  22. }
  23.  
  24. /*public function afficher () {
  25. echo $this->link;
  26. }*/
  27.  
  28. public function execRequete($query) {
  29. $resultat=mysql_query($query,$this->link);
  30. //$this->test=$obj=mysql_fetch_object($resultat);
  31. /*foreach ($obj as $valeur) {
  32. echo $valeur . '<br />';
  33. }*/
  34. while ($row = mysql_fetch_object($resultat)) {
  35. echo $row->login;
  36. echo $row->pseudo;
  37. }
  38. }
  39. }
  40. ?>


mon User.class.php
  1. class User{
  2.  
  3. private $a;
  4. private $b;
  5. private $lastLogin;
  6.  
  7. public function __construct ($l,$m){
  8. $this->a=$l;
  9. $this->b=md5($m);
  10. $this->lastLogin=time();
  11. }
  12. }
  13. ?>


mon idex1.php
  1. <?php
  2. //include ("./User.class.php");
  3. //include ("./Connexion.class.php");
  4. include ("./config.php");
  5. include ("./Mysql.class.php");
  6.  
  7. $_POST['login']="Admin";
  8. $_POST['pwd']="0000";
  9.  
  10. // Simulation d'utilisateurs... l'utilisateur tape ses identifiants!
  11.  
  12. if (isSet($_POST['login'])&& isSet($_POST['pwd'])){*/ //Si les champs login et pwd existent ....
  13.  
  14. $connexion= new Mysql ($serveur,$login,$mdp,$database); //On se connecte à la BDD en initialisant les variables avec les coordonnées du serveur.
  15. $connexion->execRequete
  16. ("SELECT *FROM tbl_user");
  17. ?>


Et donc moi ce que je souhaiterais réaliser c'est de comparer le login et le mot de passe entré par le client avec ceux qui sont stocké dans la base de données.
Or le problème est que j'ai deux class différentes User et Mysql.
Mysql contient les identifications stockés dans la bdd et User qui contient les identifiants tapés par le client au moment de son identification.
Je cherche à les comparer, comment on fait?
Merci de m'aider
Cordialement

Autres pages sur : php poo

a b L Programmation
20 Février 2010 11:40:28

Je crois qu'en PHP on ne peut pas surcharger l'opérateur ==, mais pour palier à ça tu peux toujours faire une méthode isEqual() dans chacune de tes classes et qui prend en paramètre une instance de l'autre classe.
m
0
l
20 Février 2010 20:29:42

Bonjour Ricky

Voici la fonction isEqual()

  1. <?php
  2. function isEqual($string1, $string2) {
  3. if ($string1==$string2) return true;
  4. else return false;
  5. }
  6. ?>


Donc d'après ce que j'ai compris dans mes deux class je doit inclure cette methode en incluant en paramètre l'objet de l'autre class?

en gros ca donne ca?:
  1. # <?php
  2. #
  3. # class Mysql {
  4. #
  5. # private $tabMysql; // La variable qui s'initialisera sous forme de tableau
  6. # private $link;
  7. # private $test;
  8. #
  9. #
  10. # public function __construct ($serveur,$login,$mdp,$database) {
  11. #
  12. # $this->tabMysql=array("serv"=>$serveur,"log"=>$login,"pass"=>$mdp,"db"=>$database);
  13. # $this->link= mysql_connect($this->tabMysql["serv"],$this->tabMysql["log"],$this->tabMysql["pass"]);
  14. # mysql_select_db(($this->tabMysql["db"]));
  15. #
  16. #
  17. # if(!$this->link) {
  18. # throw new exception ('Impossible de se connecter à la base de donnée Petasse');
  19. # }
  20. # echo 'Connexion réussi à la base de donnée avec succès';
  21. #
  22. # }
  23.  
  24. public function isEqual($connexion, $client) {
  25. if ($string1==$string2) return true;
  26. else return false;
  27. }
  28. }


et
  1. 1. class User{
  2. 2.
  3. 3. private $a;
  4. 4. private $b;
  5. 5. private $lastLogin;
  6. 6.
  7. 7. public function __construct ($l,$m){
  8. 8. $this->a=$l;
  9. 9. $this->b=md5($m);
  10. 10. $this->lastLogin=time();
  11. 11. }
  12. 12.
  13.  
  14. <?php
  15. public function isEqual($connexion, $client) {
  16. if ($string1==$string2) return true;
  17. else return false;
  18. }
  19. }
  20. 13. ?>


Je ne sais pas si j'ai bien saisi ce que tu voulais me dire? ;) 
Merci de m'avoir répondu
Cordialement
m
0
l
Contenus similaires
21 Février 2010 05:57:47

Bonjour,

dans idex1.php :

$loginuser = mysql_real_escape_string($_POST['login']);
$mdpuser = mysql_real_escape_string($_POST['mdp']);

$requete = ("select * from tbl_user WHERE login='$loginuser' and pdp='$mdpuser' ;");

Tu testes le résultat de la requête, si ok, tu instancies ton User...
(Si j'ai bien compris ta demande)

a+
m
0
l
21 Février 2010 22:42:57

Salut Flo

A l'heure actuelle j'ai refait mes class, mais il y a un problème, j'essaye d'afficher le résultat de ma requête dans l'index.php mais j'ai une page blanche qui s'affiche.
Quelqu'un pourrait m'aider svp?

Connexion.class.php
  1. <?php
  2. class Connexion {
  3.  
  4. private $tabConnexion;
  5. private $link;
  6. public function __construct ($serveur, $login, $mdp, $database){
  7. $this->tabConnexion=array("serveur"=>$serveur,"login"=>$login,"mdp"=>$mdp,"bdd"=>$database);
  8. $this->link=mysql_connect($this->tabConnexion['serveur'],$this->tabConnexion['login'],$this->tabConnexion['mdp']);
  9. mysql_select_db($this->tabConnexion['bdd']);
  10.  
  11. if (!$this->link){
  12. throw new exception ('Impossible de se connecter à la base de donnée');
  13. }
  14. }
  15. public function Deconnecter(){
  16. $test=mysql_close($this->link);
  17. if (!$test){
  18. echo "Deco impossible";
  19. }
  20. }
  21. }
  22.  
  23. ?>
Index1.php
  1. <?php
  2. include ("./connexion.class.php");
  3. include ("./config.php");
  4. include ("./verification.class.php");
  5.  
  6. $connexion=new Connexion($serveur,$login,$mdp,$database);
  7.  
  8. $dee=new verification();
  9. $dee->execRequete("SELECT* FROM tbl_user");
  10.  
  11. $connexion->Deconnecter();
  12.  
  13.  
  14. ?>
Verification.class.php
  1. <?php
  2.  
  3. class verification {
  4. private $loginDb;
  5. private $passDb;
  6.  
  7. public function execRequete($query){
  8. $result=mysql_query($query);
  9. while ($row=mysql_fetch_object($result));
  10. $this->passDb=$row->login;
  11. echo $this->passDb;
  12. }
  13. }
  14.  
  15. ?>
Config.php
  1. <?php
  2. $login='root';
  3. $mdp='';
  4. $serveur='localhost';
  5. $database='telesurveillance';
  6. ?>

PS: J'ai vérifier avec un var_dump a l'intérieur de la class verification tout marche, mais dans l'index j'ai rien.
m
0
l
21 Février 2010 22:56:56

Citation :
$dee->execRequete("SELECT* FROM tbl_user" );

$dee->execRequete("SELECT * FROM tbl_user" );
m
0
l
21 Février 2010 23:01:09

Mais non, ca ne marche pas, et puis j'ai fait un var_dump, lit ce que j'avais marqué
merci
m
0
l
22 Février 2010 05:17:15

bonjour,
chez moi, ça fonctionne... (le champ login est bien en minuscules dans ta table ?)
a+
m
0
l
22 Février 2010 11:40:54

en faite il manque une accolade dans la boucle while ^^
m
0
l
22 Février 2010 13:06:10

oui, j'avais rectifié et... oublié ma rectif :-)
m
0
l
22 Février 2010 17:52:26

hehe y a pas de mal, je te tiens a courant de l'avancement.
Cordialement
m
0
l
24 Février 2010 00:49:30

Bonsoir,
J'ai une petite question:est ce que en programmation, on a le droit de faire cette manipulation?
Par exemple dans ma class verification j'ai cette méthode
  1. public function comparer($a,$b){
  2. $this->loginPost=$a;
  3. $this->passPost=$b;
  4.  
  5. if($this->loginPost==$this->loginDb AND $this->passDb==$this->passPost){
  6. //echo "Les deux variables sont similaire";
  7. //echo"</br>";
  8. return TRUE;//$this->identifiant=TRUE;
  9. }
  10. else {
  11. //echo"Le couple Login Password est erroné";
  12. return FALSE;
  13. }
  14. }


et dans mon index.php peut faire une condition sur la méthode comparer(); si ca vaut TRUE, on instancie la class user?

  1. $dee=new verification();
  2. $dee->comparer($ide,$pwd);
  3.  
  4. if($dee->comparer()==TRUE){
  5. $client=new user($ide);
  6. }
  7. $connexion->Deconnecter();

Cordialement
m
0
l
24 Février 2010 04:38:29

Bonjour

je ne vois pas trop pourquoi tu pourrais pas... S'il y a quelque chose qui empêche de faire ça, je ne connais pas... Faudrait avoir l'avis des pros d'idn.

Sinon, dans l'index, tu fais 2 appels à la fonction. Un seul devrait suffire.
  1. $dee=new verification();
  2. if($dee->comparer($ide,$pwd)){
  3. $client=new user($ide);
  4. }


a+
m
0
l
24 Février 2010 09:12:22

Oui, exact ca marche
merci d'être présent =)
ciao
m
0
l
25 Février 2010 19:36:46

Bonsoir,

Voila maintenant j'ai un autre problème, lorsque la vérification est vraie, je créer l'utilisateur avec son login et son mot de pass dans deux variables $l et $md, et je démarre les sessions.
Lorsque j'assigne ma variable $l à $_SESSION['login'] et $md à $_SESSION['pwd']
j'ai un message d'erreur de ce type: Notice: Undefined index: login in D:\Programme\wamp\www\exo\user.class.php on line 22
et Notice: Undefined index: pwd in D:\Programme\wamp\www\exo\user.class.php on line 23
J'ai appeler la méthode getSession pour tester et c'est a ce moment la que le message se lance.

user.class.php
  1. <?php
  2.  
  3. class User{
  4. private $l;
  5. private $md;
  6. private $date;
  7. private $time;
  8. private $ip;
  9.  
  10. public function setNewUser($login,$pass){
  11. $this->l=$login;
  12. $this->md=$pass;
  13. }
  14.  
  15. public function rediriger(){
  16. header ('location: page_membre.php');
  17. }
  18.  
  19. public function startSession(){
  20. session_start();
  21. $this->l=$_SESSION['login'];
  22. $this->md=$_SESSION['pwd'];
  23. }
  24. public function getSession(){
  25. echo $this->l;
  26. }
  27.  
  28. public function getUserInfos(){
  29. $this->ip=$_SERVER['REMOTE_ADDR'];
  30. $this->date= date('Y-d-m');
  31. $this->time=date("H:i");
  32. }
  33.  
  34. public function verifierClient ($session1,$session2){
  35. if (isSet($session1) && isSet($session2)){
  36. echo "Les sessions sont bien présentes!!, on affichera la page";
  37. }
  38. else {
  39. return FALSE;
  40. }
  41.  
  42. }
  43. }
  44.  
  45. ?>

index1.php
  1. <?php
  2. include ("./connexion.class.php");
  3. include ("./verification.class.php");
  4. include ("./user.class.php");
  5. include ("./config.php");
  6.  
  7. if(!empty($_POST['login'])&& !empty($_POST['pwd'])){
  8.  
  9. $_POST['login'];
  10. $_POST['pwd'];
  11.  
  12. $connexion=new Connexion($serveur,$login,$mdp,$database);
  13. $dee=new verification();
  14. $dee->execRequete("SELECT login,pwd FROM tbl_user WHERE login='".$_POST['login']."' && pwd='".$_POST['pwd']."'"); // les identifiants stocké dans la bdd restent fixes.
  15. $connexion->Deconnecter();
  16.  
  17. if($dee->comparer($_POST['login'],$_POST['pwd'])==TRUE){
  18. $client=new User();
  19. $client->setNewUser($_POST['login'],$_POST['pwd']);
  20. $client->rediriger();
  21. }
  22.  
  23. else {
  24. return FALSE;
  25. }
  26. }
  27. else {
  28. throw new exception ('Les champs sont vides');
  29. }
  30.  
  31. ?>


et page_membre.php
  1. <?php
  2. include ("./user.class.php");
  3.  
  4. $client=new User();
  5. $client->startSession();
  6. $client->getSession();
  7. //$client->verifierClient($_SESSION['login'],$_SESSION['pwd']);
  8.  
  9.  
  10. ?>
m
0
l
26 Février 2010 05:40:43

Bonjour,

ce ne serait pas plutôt $_SESSION['login']= $this->l; au lieu de $this->l=$_SESSION['login'];

a+

m
0
l
26 Février 2010 20:28:08

Question con mais pourquoi se faire "chier" alors qu'il y a PDO dans PHP qui permet déjà de faire tout très bien et parfaitement objet et sécure ?
m
0
l
2 Mars 2010 22:56:52

C'est une très bonne remarque, mais simplement je doit faire les scripts moi même en vu du projet informatique, sans utiliser de librairie externe. Donc voila mais c'est vrai que je comprend mieux quand je fait tout seul. :) 
Ciao
m
0
l
3 Mars 2010 13:38:22

Ouai, sauf que ça n'a absolument rien d'externe. mysql* est ce qu'il y a de plus vieux dans PHP depuis il y a eu mysqli (qui existe en version objet ou non) qui est plutôt pas mal. Dans mysqli on trouvera par exemple de manière simple la gestion des transactions.

PDO est arrivé avec la version 5.1 de PHP si mes souvenirs sont bon. Bref, ça commence même à dater un peu.

Aller hop, je te fait ta classe :

  1. class MySQL extends PDO { }
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS