IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Exemple de Connection a une DB !!!


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut [POO] Exemple de Connection a une DB !!!
    Je suis un être buté et j'insiste pour developper mon site actuel entièrement en POO. alors j'ai une DB qui a une table "experience", j'ai donc une classe experience.php avec un constructeur, des proriétés privés, des getter et des setter pour chaque propriété etc....

    je construis une classe DAO pour chaqu'un de ces objets, dans ce cas ci elle s'appelle MysqlExperienceDAO.php. cette classe utilise un objet connexion pour se connecter a ma DB et en outre elle possede une fonction pour chaque operation SQL sur la table experience(delete, select etc...). vous suivez....

    donc ma fonction connexion de mon DAO est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    require_once('config/constantes.php')	//pour CVDB
    require_once('class/connexion.php')
    .../...
    function getConnexion(){
    		$con = new connexion(CVDB);
    		return $con;
    	}
    .../...
    ce qui vous l'aurez compris appelle le constructeur de ma classe connexion qui est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function connexion($db)
    		{
    			$newcon->host = $this->setHost(HOST);
    			$newcon->login = $this->setLogin(LOGIN);
    			$newcon->pwd = $this->setPwd(PWD);
    			$newcon->db = $this->setDB($db);
    			$newcon->connexion = $this->setConnexion($this->connectToServer());
    			$this->connectToDB();
    			return $newcon;
    		}
    pour info connectToServer() ressemble a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function connectToServer()
    				{
    					//connection a la base de données retourne un objet connexion vers database
    					$connexion = mysql_connect($this->getHost(),$this->getLogin(),$this->getPwd())or exit(mysql_error());
    					if ($connexion){
    						echo ("connexion vers le SGBD Etablie !!!!!"); /*DEBUG ONLY*/
    						return $connexion;
    					}else {
    						echo ("un probleme a ete rencontre, la connexion vers le SGBD n\'a pas pu être etablie"); /*DEBUG ONLY*/
    						return false;
    					}
    				}
    et connectToDB() ressemble a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function connectToDB(){
    					//selection de la base de données
    					mysql_select_db ($this->getDB(), $this->getConnexion())or exit(mysql_error());
    					echo " connexion a la base ".$this->getDB()." ok"; //DEBUG ONLY
    				}
    mais voila quand mon fichier de test nomme testsql.php appelle mon DAO qui appelle ma connexion ca fait ca :
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in E:\WEB\fksite\class\MysqlExperienceDAO.php on line 90
    qu'en pensez vous, probleme de connexion ??? oui pour sûr car si je remplace la fonction connexion de mon DAO par un acces direct comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	function getConnexion(){
     
    		$con = mysql_connect('localhost','monlogin','monmotdepasse');
    		mysql_select_db("curriculum", $con); //CVDB = curriculum
    		return $con;
    	}
    Ca marche Nickel !

    Bon vraiment pardon pardon pour la longueur a cette heure ci mais comment puis-je expliquer autrement !!!

    ET Surtout WHY ???

    Wdionysos
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Dommage tu nétais pas loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_select_db ($this->getDB(), $this->getConnexion())or exit(mysql_error());
    versus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_select_db("curriculum", $con); //CVDB = curriculum
    Tu vois pas une différence ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut

    premierement si tu utilise php5 le constructeur c'est __construct et non le nom de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function connexion($db)
          {
             $newcon->host = $this->setHost(HOST);
             $newcon->login = $this->setLogin(LOGIN);
             $newcon->pwd = $this->setPwd(PWD);
             $newcon->db = $this->setDB($db);
             $newcon->connexion = $this->setConnexion($this->connectToServer());
             $this->connectToDB();
             return $newcon;
          }
    apres je ne comprens pas ca et c'est quoi l'objet CVDB

    pour moi ton contructeur devrai etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public function __construct(CVBD $db){
    $this->Host = $db->getHost();
    $this->Login = $db->getLogin();
    $this->pwd = $db->getPwd();
    $this->db = $db->getDb();
    $this->conn =null;
    $this->connectToServer();
    $this->selectDB();
    }
     
    private function connectToServer()
                {
                   //connection a la base de données retourne un objet connexion vers database
                   $$this->conn = mysql_connect($this->Host,$this->Login,$this->Pwd)or exit(mysql_error());
                   if ($this->conn){
                      echo ("connexion vers le SGBD Etablie !!!!!"); /*DEBUG ONLY*/
                   }else {
                      echo ("un probleme a ete rencontre, la connexion vers le SGBD n\'a pas pu être etablie"); /*DEBUG ONLY*/
                      return false;
                   }
                } 
     
    private function selectDb(){
     mysql_select_db ($this->Db, $this->conn)or exit(mysql_error());
                   echo " connexion a la base ".$this->getDB()." ok"; //DEBUG ONLY 
    }
    }
    j'ai pas tester mais je pense que c'est pas loin de fonctionner

  4. #4
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    salut a vous et merci d'avoir fait l'effort de vous pencher un peu sur mon prob,

    pour 2,
    CVDB et une constante qui est amené par le require du script constante.php

    pour 1,
    une apres midi a me cogner aux mur mais non je vois pas de diff !
    (meme que si tu l'a voit il doit en avoir une ! ) :

    WD
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  5. #5
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    oui je suis d'accord pour __construct, je l'avais mis comme ca et apres par depit j'ai changé en me disant "on ne sait jamais :o )

    mais dans ta proposition de constructeur cela veut dire que je concoive un objet DBpossedant comme propriété son nom, le serveur sur lequel elle est etc...

    en fait comme précision je vous ait epargner avant tout mon log mais en realité il y a aussi :
    debut script
    .../...
    instantiation objet experience
    test manuelle de la connexion
    connexion OK !!!

    instantiation objet DAO ok !!!
    .../...
    la requete est : INSERT INTO experience VALUES (100,3,1,'testeurdetitre','testeur de soustitre','1143756000','1143842400','CDI','cetait cool','cetait très cool');
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in E:\WEB\fksite\class\MysqlExperienceDAO.php on line 90
    ajout de experience
    Fin script ok
    mais voila ca n'insere rien dans la base meme s'il voit ma connexion Ok

    j'ai l'impression qu'il créer bien l'objet mais qu'il n'arrive pas a l'exploiter une fois appelé ailleurs.

    WD
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    j'avais pas fait trop attention CVDB, je te conseil soit de passer dans le constructeur ou dans setter les proprieters server,login, pass soit par un objet, tableau ou avec plusieur parametre
    parce que utiliser des constantes dans un constructeur c'est pas terrible
    (ou alors des constantes de class)

    ou en est tu ?
    arrive tu a te connecter a ta db??

  7. #7
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    pardon je suis partit diner (meme les dieux ont faim parfois :o )

    je suis en train de voir une scission de mon objet connexion actuel en un objet DB + un objet connexion et de voir pour réorganiser mon constructeur (pour le simplifier), ca te parait une bonne demarche ?

    EDIT : oui mon objet se connecte bien a la DB mais il ne joue pas son role lorsqu'il est instancier dans mon DAO ! ce que je voudrait faire c'est eventuellement avoir un objet connexion connect() ou pconnect() et que je pourrai utiliser par differents objets simultanement. la db reste une variable car je m'oriente sans doute vers 2 DB differente pour mon site + un ldap pour l'authentification et j'aimerai bien pouvoir instancier cette connexion vers la db de mon choix en fonction du contexte. FIN DE EDIT

    pour les getter et setter je l'ai pas mis dans le post mais chaque propriété de mon objet connexion est private et possede un getter et un setter

    je suis daccord pour l'utilisation de parametre de connexion en constante est finalement mauvaise car en plus en cas de piratage si on parvient a editer les constante on accede au passe de la base de données

    je vous propose de laisser ce post ouvert, si vous rester a l'ecoutes je vous dirai quoi

    WDionysos

    merci a vous

    REEDIT Pour Mr.N : c'est quoi cette difference ? si tu repasses par la peux tu m'aider , tu as lmancer une interogation qui peux m'empecher de dormir cette nuit Fin de REEDIT
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    C'est un petit fouilli pour bien te comprendre, poste nous donc la définition de la classe ou interface si tu préfères.

    Sinon je ne comprends pas, tu as une méthode connectToServer, qui initialise la connection. Puis tu as getConnexion qui réinitialise une connection à chaque appel. Je sais bien que php gère de manière transparente les doublons de connection à une base de donnée lorsque qu'il en détecte un, mais c'est... comment dire.. étrange.

    Amha que connectToserver devrait sauvegarder son résultat dans une des propriétés de sa classe, et que getconnexion devrait renvoyer cette propriété.

    Sinon j'ai vu cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function connexion($db) 
          { 
    ...........................
             return $newcon; 
          }
    J'ai cru comprendre que c'était ton constructeur. Si c'est bien le cas ton return est absolument inutile, un constructeur c'est muet (ce n'est peut être pas la traduction exacte du terme anglais mais c'est parlant), ou void en anglais.
    ce qui veut dire que cette fonction ne sait pas faire le renvoi de variable en sortie.

    Pour ce qui est d'avoir de multiples connexion à de multiple base, je te mettrait cela dans un manager transparent, qui garderait en mémoire les différentes connection et associerais une connection à une clé, par exemple.

    bye

    cf
    http://fr2.php.net/manual/fr/language.oop5.decon.php
    http://fr2.php.net/manual/fr/function.mysql-connect.php

  10. #10
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    Ben EPOX

    en fait non la methode getConnexion appartient à l'objet DAO et la methode ConnectToServer appartient à l'objet connexion

    EDIT4 : pour voir tout mon objet et epargné la taille de la base du forum je t'en remet a ce post de hier dans lequel je l'ai copier en entier :
    http://www.developpez.net/forums/vie...480&highlight=

    pour dire un gros mot en PHP, l'objet connexion est un
    javabean il definit une connexion. De la meme manière l'objet experience est construit sur le medele de la table experience de la db, il sert a definir la construction d'une experience.

    EDIT1: de cette manière pour ajouter une experience dans la DB apres on ne fait que create($newobjetexperience); et ca fait tout tout seul...

    L'objet DAO lui propose une fonction par operation SQL cad une fonction create() qui ajoute une experience dans la DB, une fonction load qui select etc..., les methode de l'objet DAO prennent en parametre un objet experience et utilise pour ce connecter un objet connexion.

    EDIT3 : puis-je dire que je cherche a creer un equivalent d'un datsource ou d'un pool de connexion..... enfin qq chose comme ca !

    C'est vrai que j'ai tendance a vouloir faire du java (ce que je fais au boulot) en PHP et que ca marche pas pareil, au depart je voulait faire un MVC et je l'implemente moi meme parce les framework que j'ai trouvé soit on fait planter mon install soit je les trouve trops complexe et je manque de temps pour les etudier...

    WD

    EDIT2 : OH MON DIEU, je n'ai pas trouvé beaucoups de piste pour mon pb dans ton post (auquel tu participes EPOX), mais une chose est sur maintenant que je l'ai lu : j'ai encore du boulot avant de vous talonner je m'incline surtout que je suis en train de comprendre que l'on peut faire en PHP tout ce que je fais en Java ....
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  11. #11
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    YO a tous !

    bon voila on dit que la nuit porte conseil mais ca n'a pas vraiment été le cas, j'ai modifier ma structure objet de la sorte mais ca ne resout rien

    j'ai donc implémenter un objet DB, je ne sais pas si c'est utile de le dissocier de la connexion sur le plan logique d'autannt qu'il serait préférable que ce type d'objet soit a terme statique car je n'ai pas non plus 15000 db pour me connecter.

    ca donne ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?php
    //ce fichier est une classe qui definit des objet de type base de donnees
     
    /**
    Author : Frédéric KESTENER
    Date : 05 Avril 2006
    Note : les objets de la classe database modelise des bases de données et leur parametres de connexion
    **/
    //TODO : CELA DEVRAIT ETRE UN OBJET STATIQUE A VOIR COMMENT?
     
    class database {
     
    		//declaration de propriétés
    			private $host;
    			private $login;
    			private $pwd;
    			private $dbname;
     
    		//constructeur de la classe
    		public function __construct($host,$login,$pwd,$dbname)
    		{
    			$this->setHost($host);
    			$this->setLogin($login);
    			$this->setPwd($pwd);
    			$this->setDB($dbname);
    		}
     
    		//destructeur de la classe
    		public function __destruct()
    		{
    			//ce qu'il faut faire pour liberer proprement la memoire
    		}
     
    		//methode d'acces GETTER
     
    		function getHost(){
    			return $this->host;
    		}
    		function getLogin(){
    			return $this->login;
    		}
    		function getPwd(){
    			return $this->pwd;
    		}
    		function getDB(){
    			return $this->dbname;
    		}	
    		//SETTERS
     
    		function setHost($host){
    			$this->host = $host;
    		}
    		function setLogin($lgn){
    			$this->login = $lgn;
    		}
    		function setPwd($pwd){
    			$this->pwd = $pwd;
    		}
    		function setDB($db){
    			$this->dbname = $db;
    		}	
    }//fin de class database
    ?>
    et a la suite de ca j'ai modifier en consequence mon objet connexion :
    ca donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?php
    //ce fichier contient la classe connectDB qui genere des connections a la base
     
    /**
    Author : Frédéric KESTENER
    Date : 25 mars 2006
    Note : les objets de la classe connexion etablissent testent et ferment les connections vers des objets de type databases
    **/
     
    class connexion {
     
    		//declaration de propriétés
    			private $db;
    			private $label;
    			private $ident;
     
    		//constructeur de la classe
    		public function __construct($db, $lab)  //param db = database object ; lib = string
    		{
    			$this->setDB($db);
    			$this->setLabel($lab);
    		}
     
    		//methodes et fonctions generale de connexion
     
    				function connectToServer()
    				{
    					//connection a la base de données retourne un objet connexion vers database
    					$this->ident = mysql_connect($this->db->getHost(),$this->db->getLogin(),$this->db->getPwd())or exit("Connection Server Impossible ".mysql_error());
    					if ($this->ident){
    						echo ("connexion vers le SGBD Etablie !!!!!"); /*DEBUG ONLY*/
    						//selection de la base de données
    						mysql_select_db ($this->db->dbname, $this->ident)or exit("database introuvable ou innaccessible sur ce serveur ".mysql_error());
    						echo " connexion a la base ".$this->db->getDB()." ok"; //DEBUG ONLY
    						return $this->ident;
    					}else {
    						echo ("un probleme a ete rencontre, la connexion vers le SGBD n\'a pas pu être etablie"); /*DEBUG ONLY*/
    						return false;
    					}
    				}
     
    				function close()
    				{
    				//ferme la connexion a la base de données return void
    					mysql_close($this->getIdent());
     
    				}
     
    				function testConnectDB()
    				{
    				//test la connexion a la base return bool + constante si connect DB est Ok
     
    				}
     
    		//methode d'acces GETTER
    		function getDB(){
    			return $this->db;
    		}
    		function getLabel(){
    			return $this->label;
    		}
    		function getIdent(){
    			return $this->ident;
    		}
     
    		// and SETTER
    		function setDB($db){
    			$this->db = $db;
    		}
    		function setLabel($lab){
    			$this->label = $lab;
    		}
    		function setIdent($id){
    			$this->ident = $id;
    		}	
    }//fin de class connexion
    ?>
    ca me donne toujours le meme resultat a l'appel test de mon DAO, a savoir :
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in E:\WEB\fksite\class\MysqlExperienceDAO.php on line 85
    ajout de experience
    je crois donc que le pb de mon code se passe dans

    mysql_query($requete, $connexion);

    la requete est bonne ca c'est sur, mais je crois quil ne veux pas en deuxième param un objet connexion mais un identifienant sur la connexion de cet objet, c'est pour cela que je ne comprends pas qu'il ne veux pas mon $c->getIdent()

    une idée pour me faire avancer ?

    WDionysos
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Désolé de t'avoir fait passer une mauvaise nuit, j'avais pas mes yeux en face des trous quand j'ai répondu ^^

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in E:\WEB\fksite\class\MysqlExperienceDAO.php on line 85
    ajout de experience
    On peut avoir un peu plus de contexte sur cette ligne 85 qui cause ton erreur ?

  14. #14
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    bien sur

    pardon pour la réactivité mais j'ai m'absenter...

    cette ligne est dans mon DAO qui pour le moment ne possede qu'une fonction ajout un objet experience dans la base via une requete insert into

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
    require_once('experience.php');
    require_once('connexion.php');
    require_once('database.php');
    require_once('config/constante.php');
     
    class MysqlExperienceDAO{
     
    	/**function getConnexion(){
    	
    		$con = mysql_connect('localhost','root','tokamac');
    		mysql_select_db("curriculum", $con);
    		return $con;
    	}**/
     
    	function getConnexion(){
    		$db = new database('localhost','root','tokamac','curriculum');
    		$con = new connexion($db, 'maconnexion');
    		return $con->getIdent();
    	}
     
    	function addExperience($exp){
     
    		//recupération de la connection
    		$c = $this->getConnexion();
     
    		//controle des champs
    .../... ici il y a un control pour chaque champs de la table .../...
     
    $exp->displayExperience();
    		$requete  = "INSERT INTO experience ";
    		$requete .= "VALUES (".$exp->getIdExp().",".$exp->getIdCat().",".$exp->getIdSoc().",'".$exp->getTitreExp()."','".$exp->getSousTitreExp()."','".$exp->getDateDebExp()."','";
    		$requete .= $exp->getDateFinExp()."','".$exp->getTypeContratExp()."','".$exp->getResumeExp()."','".$exp->getDetailExp()."');";
     
    		echo "<br /><br />".$requete;
    		[b]$sql=mysql_query($requete,$c);	[/b]  //C'est la fameuse ligne 85
    	}
    }//fin de classe MysqlExperienceDAO
    ?>
    mais si tu regarde au debut de ce post (qui est deja bien loin ) je t'explique que si j'effectue la connection directement dans mon DAO de maniere classique sans appellé d'objet connexion ca marche sans prob (cette connexion directe c'est la partie mise en commentaire en haut de la methode

    tout cela nous donne le resultat test suivant :

    debut script
    temps epoch est 1143756000
    la date est 2006-03-31
    temps epoch est 1143842400
    la date est 2006-04-01
    instantiation objet experience
    instantiation objet DAO

    c'est bien un integer
    c'est bien un integer
    c'est bien un integer
    c'est bien un string
    c'est bien un string
    c'est bien un int
    Fiche d'identification d'une experience :
    idexp : 100
    idcat : 3
    idsoc : 1
    titrexp : testeurdetitre
    soustitrexp :testeur de soustitre
    datedebexp : 1143756000
    datefinexp : 1143842400
    typcontratexp : CDI
    resumexp : cetait cool
    detailexp : cetait très cool
    Fin de fiche experience :

    la requete est : INSERT INTO experience VALUES (100,3,1,'testeurdetitre','testeur de soustitre','1143756000','1143842400','CDI','cetait cool','cetait très cool');
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in E:\WEB\fksite\class\MysqlExperienceDAO.php on line 85
    wdionysos
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Il est où l'appel à connectToServer ?

    EDIT: je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function getIdent(){
       if (!$this->ident) {
          $this->connectToServer();
       }
       return $this->ident;
    }

  16. #16
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    pardon pour mon langage chatié mais vraiment ....


    Oh PUTAIN t'es TROP FORT !!!!
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Restons poli s'il vous plait ^^

    'fallait bien que je me rattrape de ma bourde d'hier soir

    Pense au bouton en bas à gauche

  18. #18
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    bon sang ca me parait evident maintenant que je me demande pourquoi je n'y avait pas pansé

    il faut que je me l'explique en francais pour ne plus refaire cette erreur

    en fait je suis partit du postulat que la propriété ident de mon objet connexion représentait la connexion active mais en fait il n'en est rien il faut qu'a chaque fois qu'on en ait besoin la réactiver en appelant connecToServer() a ce moment si elle est active il l'utilise est si elle ne l'est pas il la réétablie, c'est ca !

    oh vraiment merci ca fait je ne sais combien de plombe que je suis dessus et je ne voyais plus mes erreur de logique a la fin !

    merci merci merci

    WDionysos

    EDIT :
    la suite : il me reste a implementer un destructeur propre qui close la connexion a la destruction de l'objet et une metnone qui clone la connexion et roule ma poule ...

    je change l'objet de ce post ca peut devenir un cas d'ecole qui sait ?

    WDio

    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  19. #19
    Membre habitué Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Points : 189
    Points
    189
    Par défaut
    je rajoute ceci pour la beauté du code :

    pour la fonction ConnectToServer() ne devrait pas pouvoir acceder directement à la propriété $ident qui est private mais devrait elle aussi passe par le setter meme si elle appartient à l'objet donc a la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->ident = mysql_connect($this->db->getHost(),$this->db->getLogin(),$this->db->getPwd())or exit("Connection Server Impossible ".mysql_error());
    ne devrais-je pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    					$id = mysql_connect($this->db->getHost(),$this->db->getLogin(),$this->db->getPwd())or exit("Connection Server Impossible ".mysql_error());
    					$this->setIdent($id);
    trouves tu que cela est inutile dans la mesure ou j'utilise une variable local supplémentaire ou que c'est mieux comme ca ?

    WD
    Je ne voudrais pas faire partie d'un club qui voudrait m'avoir moi pour membre.... [Grouchot Marx]
    Mais en tant que Marxiste, je playdoye pour le travail communautaire. C'est un paradoxe olympien ! Comprend qui peut !!!

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    un variable private est visible dans la class mais pas à l'exterieur , la premiere solution me parait la meilleur solution de plus qu'un setteur pour cette propriété est a mon avis inutile car c'est un resultat d'une operation possible normalement que dans cette classe

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/10/2006, 14h28
  2. [VB6]Connection à une base de données Oracle
    Par Zoilus dans le forum VB 6 et antérieur
    Réponses: 25
    Dernier message: 08/04/2004, 10h51
  3. Réponses: 5
    Dernier message: 22/12/2003, 14h18
  4. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 18h18
  5. Réponses: 3
    Dernier message: 22/05/2002, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo