Page 1 sur 2

probleme avec mysql passer à l'objet ...

Posté : 02 sept. 2007, 13:19
par BeRoots
salut à tous :)

j'ai un erreur que je ne m'explique pas...
Notice: Undefined property: brts_info::$link in C:\Program Files\EasyPHP 2.0b1\www\0_lib\php\class_brts_system.php on line 168

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\Program Files\EasyPHP 2.0b1\www\0_lib\php\class_brts_system.php on line 168
Erreur SQL !
voici mes deux class avec la ligne ou est l'erreur en commenter afin de vous preciser la ligne 168 ;)
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
 * Classe de connection aux base de données
 *
 * INSTANCE (connection auto):       $connecteur_db = new brts_connecteur_db();
 * CONNECTION:                       $connecteur_db->connect_db($use_db);
 * REQUETE:                          $result = $connecteur_db->query($ma_requete);
 * DECONNECTION (destructeur):       $connecteur_db->__destruct();
 */
class brts_connecteur_db
{
   /*
   * on definit le constructeur suivant les propriétés recuperer par à la dite classe afin de se connecter au server MySQL
   */
   public function __construct()
   {
      require("../../nowww/data.php");
      $this->host_db = $data_host_db;
      $this->user_db = $data_user_db;
      $this->pass_db = $data_pass_db;
      $this->link = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die('Erreur SQL !<br />'.$this->link.'<br />'.mysql_error());
   }
   /*
   * on definit le destructeur suivant les propriétés definit par la dite classe
   */
   public function __destruct()
   {
      $this->close();
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->use_db);
      unset($this->link);
      unset($this->db);
      unset($this->query);
   }
   /*
   * NOM DE LA FONCTION: close()
   *
   * on génere une clé et un vecteur aléatoire 32 bit
   */
   private function close()
   {
      mysql_close($this->link);
   }
   /*
   * NOM DE LA FONCTION: connect_db($use_db)
   *
   * ENTREE:
   * on fournie un nom de base de données.
   *
   * SORTIE:
   * on est connecté à la db.
   */
   public function connect_db($use_db)
   {
      require("../../nowww/data.php");
      if($use_db == 'beroots')
      {
         $this->use_db = $data_brtsdb;
      }
      elseif($use_db == 'client')
      {
         $this->use_db = $data_clientdb;
      }
 //ICI L'ERREUR LIGNE 168
      $this->db = mysql_select_db($this->use_db, $this->link) or die('Erreur SQL !<br />'.$this->db.'<br />'.mysql_error());
   }
   /*
   * NOM DE LA FONCTION: query($query)
   *
   * ENTREE:
   * on fournie une requete à effectuer.
   *
   * SORTIE:
   * on recupère le resultat de cette requete.
   */
   public function query($query)
   {
      $this->query = $query;
      $var = mysql_query($this->query) or die('Erreur SQL !<br />'.$this->query.'<br />'.mysql_error());
      return $var;
   }
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
 * Classe de récuperation des infos webmaster et client
 *
 * INSTANCE (connection auto):       $brts_info = new brts_info();
 * RECUP INFOS BEROOTS:              $_BRTS = $brts_info->recup_info_brts();
 * RECUP INFOS CLIENT:               $_CLIENT = $brts_info->recup_info_client();
 * RECUP INFOS CRONS:                $_CRONS = $brts_info->recup_info_crons();
 * RECUP INFOS OPTIONS:              $_OPTIONS = $brts_info->recup_info_options();
 * DESTRUCTEUR:                      $brts_info->__destruct();
 */
class brts_info extends brts_connecteur_db
{
   /*
   * on definit le constructeur suivant les propriétés de la dite classe
   */
   public function __construct()
   {
      require("../../nowww/data.php");
      $this->table_beroots  = $data_table_beroots;
      $this->table_client   = $data_table_client;
      $this->table_options  = $data_table_options;
      $this->table_crons    = $data_table_crons;
      // on se connecte au server MySQL
      parent::__construct();
   }
   /*
   * on definit le destructeur suivant les propriétés definit par la dite classe
   */
   public function __destruct()
   {
      unset($this->table_beroots);
      unset($this->table_client);
      unset($this->table_options);
      unset($this->table_crons);
   }
   /*
   * NOM DE LA FONCTION: recup_info_brts()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table beroots de la base beroots.
   */
   public function recup_info_brts()
   {
      // on ce connecte à la db beroots
      parent::connect_db('beroots');
      // on recupere tout le contenu de la table beroots
      $result = parent::query("SELECT * FROM `".$this->table_beroots."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      parent::__destruct();
      return $var;
   }
   /*
   * NOM DE LA FONCTION: recup_info_client()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table client de la base client.
   */
   public function recup_info_client()
   {
      // on ce connecte à la db client
      parent::connect_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_client."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
}
si quelqu'un a une idée sur cette erreur :-k

merci d'avance pour votre aide précieuse ;)

Posté : 02 sept. 2007, 13:31
par Jules Petibidon
hello,

Je dois avoir des problèmes aux yeux, je ne vois nulle part les déclarations des membres... Certes en PHP tu peux les faire à la volée, mais c'est pas super clair.

De même les require dans les fonctions avec des chemins relatifs, c'est bizarre. Tout autant que la manière d'initialiser les membres... Bref, je dirais pas qu'il y a de grosses fautes de conception dans ton système, mais j'en pense pas plus ;)

Une classe, dans l'idéal, doit se suffire à elle même, et les arguments d'initialisation ou des fonctions devraient lui être passés de manière explicite par ton script (je suis pas sur d'être clair là).

Bon courage !

Posté : 02 sept. 2007, 20:10
par BeRoots
quelqu'un de genereux pour me corriger mes fautes de debutant afin que je progresse dans la bonne direction ;)

Pour ce qui est de l'erreur, on dirais que le faite de definir $this->link fait que ça génerer l'erreur sql ... :-k
Pourtant un echo $this->link m'affiche Resource id #7
Mon echo $this->use_db par contre m'affiche berootsclient alors qu'il ne devrai m'afficher que beroots :-k


j'en pert mon latin :(

je remet le code avec les deux echo pour vous guider:
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
 * Classe de connection aux base de données
 *
 * INSTANCE (connection auto):       $connecteur_db = new brts_connecteur_db();
 * CONNECTION:                       $connecteur_db->connect_db($use_db);
 * REQUETE:                          $result = $connecteur_db->query($ma_requete);
 * DECONNECTION (destructeur):       $connecteur_db->__destruct();
 */
class brts_connecteur_db
{
   /*
   * on definit le constructeur suivant les propriétés recuperer par à la dite classe afin de se connecter au server MySQL
   */
   public function __construct()
   {
      require("../../nowww/data.php");
      $this->host_db = $data_host_db;
      $this->user_db = $data_user_db;
      $this->pass_db = $data_pass_db;
      $this->link = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die('Erreur SQL !<br />'.$this->link.'<br />'.mysql_error());
   }
   /*
   * on definit le destructeur suivant les propriétés definit par la dite classe
   */
   public function __destruct()
   {
      $this->close();
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->use_db);
      unset($this->link);
      unset($this->db);
      unset($this->query);
   }
   /*
   * NOM DE LA FONCTION: close()
   *
   * on génere une clé et un vecteur aléatoire 32 bit
   */
   private function close()
   {
      mysql_close($this->link);
   }
   /*
   * NOM DE LA FONCTION: connect_db($use_db)
   *
   * ENTREE:
   * on fournie un nom de base de données.
   *
   * SORTIE:
   * on est connecté à la db.
   */
   public function connect_db($use_db)
   {
      require("../../nowww/data.php");
      if($use_db == 'beroots')
      {
         $this->use_db = $data_brtsdb;
      }
      elseif($use_db == 'client')
      {
         $this->use_db = $data_clientdb;
      }
//----------------------------------------------------
//ICI MES 2 ECHO DE TEST
//remarque: on entre dans les 2 boucle ci-dessus alors que cela est inpossible en soit
echo $this->link.'<br />'.$this->use_db;
// sa m'affiche ceci:
//
// Resource id #7
// berootsclient
//ICI L'ERREUR LIGNE 168
//----------------------------------------------------
      $this->db = mysql_select_db($this->use_db, $this->link) or die('Erreur SQL !<br />'.$this->db.'<br />'.mysql_error());
   }
   /*
   * NOM DE LA FONCTION: query($query)
   *
   * ENTREE:
   * on fournie une requete à effectuer.
   *
   * SORTIE:
   * on recupère le resultat de cette requete.
   */
   public function query($query)
   {
      $this->query = $query;
      $var = mysql_query($this->query) or die('Erreur SQL !<br />'.$this->query.'<br />'.mysql_error());
      return $var;
   }
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
 * Classe de récuperation des infos webmaster et client
 *
 * INSTANCE (connection auto):       $brts_info = new brts_info();
 * RECUP INFOS BEROOTS:              $_BRTS = $brts_info->recup_info_brts();
 * RECUP INFOS CLIENT:               $_CLIENT = $brts_info->recup_info_client();
 * RECUP INFOS CRONS:                $_CRONS = $brts_info->recup_info_crons();
 * RECUP INFOS OPTIONS:              $_OPTIONS = $brts_info->recup_info_options();
 * DESTRUCTEUR:                      $brts_info->__destruct();
 */
class brts_info extends brts_connecteur_db
{
   /*
   * on definit le constructeur suivant les propriétés de la dite classe
   */
   public function __construct()
   {
      require("../../nowww/data.php");
      $this->table_beroots  = $data_table_beroots;
      $this->table_client   = $data_table_client;
      $this->table_options  = $data_table_options;
      $this->table_crons    = $data_table_crons;
      // on se connecte au server MySQL
      parent::__construct();
   }
   /*
   * on definit le destructeur suivant les propriétés definit par la dite classe
   */
   public function __destruct()
   {
      unset($this->table_beroots);
      unset($this->table_client);
      unset($this->table_options);
      unset($this->table_crons);
   }
   /*
   * NOM DE LA FONCTION: recup_info_brts()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table beroots de la base beroots.
   */
   public function recup_info_brts()
   {
      // on ce connecte à la db beroots
      parent::connect_db('beroots');
      // on recupere tout le contenu de la table beroots
      $result = parent::query("SELECT * FROM `".$this->table_beroots."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      parent::__destruct();
      return $var;
   }
   /*
   * NOM DE LA FONCTION: recup_info_client()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table client de la base client.
   */
   public function recup_info_client()
   {
      // on ce connecte à la db client
      parent::connect_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_client."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
}
merci d'avance pour votre aide :)

Posté : 02 sept. 2007, 23:00
par Sékiltoyai
Essaye comme te le dit Jules Petibidon de déclarer les attributs dans ta classe. Autant tout faire dans les règles.

Posté : 03 sept. 2007, 14:38
par BeRoots
oki j'ai fait ainsi:
/**
 * Classe de connection aux base de données
 *
 * INSTANCE (connection auto):       $connecteur_db = new brts_connecteur_db();
 * CONNECTION:                       $connecteur_db->select_db($identifiant_db);
 * REQUETE:                          $result = $connecteur_db->query($query);
 * DECONNECTION (destructeur):       $connecteur_db->__destruct();
 */
class brts_connecteur_db
{
   /**
   * on definit les propriétés associer à la dite classe
   */
   require("../../nowww/data.php");

   /**
   * Nom d'hote MySQL
   *
   * @staticvar string
   */
   private $host_db = $data_host_db;

   /**
   * Nom d'utilisateur MySQL (login)
   *
   * @staticvar string
   */
   private $user_db = $data_user_db;

   /**
   * Mot de pass MySQL
   *
   * @staticvar string
   */
   private $pass_db = $data_pass_db;

   /**
   * Nom de db beroots
   *
   * @staticvar string
   */
   private $beroots_db = $data_brtsdb;

   /**
   * Nom de db client
   *
   * @staticvar string
   */
   private $client_db = $data_clientdb;

   /**
   * Connection active au server MySQL
   *
   * @var Float
   */
   protected $link;

   /**
   * Constructeur
   *
   * Definit les propriété de connection au server MySQL
   *
   * @param string $var1
   * @param string $var2
   * @param string $var3
   * @param string $var4
   * @param string $var5
   */
   public function __construct($var1, $var2, $var3, $var4, $var5)
   {
      $this->host_db      = $var1;
      $this->user_db      = $var2;
      $this->pass_db      = $var3;
      $this->beroots_db   = $var4;
      $this->client_db    = $var5;
      self::connect();
   }
   /**
   * Destructeur
   *
   * On ferme la connexion active au server MySQL et on efface les propriétés de la classe
   */
   public function __destruct()
   {
      self::close();
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->beroots_db);
      unset($this->client_db);
      unset($this->link);
   }
   /**
   * NOM DE LA FONCTION: connect()
   *
   * On établit une connexion au server MySQL
   */
   private function connect()
   {
      $this->link = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die('Erreur SQL !<br />'.$this->link.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: close()
   *
   * On ferme la connexion au server MySQL
   */
   private function close()
   {
      mysql_close($this->link);
   }
   /**
   * NOM DE LA FONCTION: select_db($identifiant_db)
   *
   * On fournie un identifiant de base de données (beroots ou client), et on est connecté à cette db.
   *
   * @param string $use_db
   */
   public function select_db($identifiant_db)
   {
      if($identifiant_db == 'beroots')
      {
         $use_db = $this->beroots_db;
      }
      elseif($identifiant_db == 'client')
      {
         $use_db = $this->client_db;
      }
      $selected_db = mysql_select_db($use_db, $this->link) or die('Erreur SQL !<br />'.$selected_db.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: query($query)
   *
   * on fournit une requete MySQL et on retourne le resultat de celle-ci.
   *
   * @param string $query
   * @return float $result_mysql
   */
   public function query($query)
   {
      $result_mysql = mysql_query($query) or die('Erreur SQL !<br />'.$result_mysql.'<br />'.mysql_error());
      return $result_mysql;
   }
}
mon problème est au niveau des require qui fonctionne dans les méthodes mais pas dans ma classe

j'aimerai savoir comment faire pour inclure à une classe des variables predefinit dans un fichier.php de façon propre et securisé :-k

doit-je les mettre en propriété à l'instanciation de cette classe comme suit :-k
require("../../nowww/data.php");
$connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_brtsdb);
merci d'avance :)

Posté : 03 sept. 2007, 14:50
par Sékiltoyai
Je pense que tu es obligé de le faire à mano dans ton __construct().

Posté : 03 sept. 2007, 15:06
par Jules Petibidon
Hello,

doit-je les mettre en propriété à l'instanciation de cette classe comme suit :-k
require("../../nowww/data.php");
$connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_brtsdb);
merci d'avance :)
Ca beaucoup meilleur en effet :)
Une classe est une structure indépendante que tu pourras réutiliser à ton aise. Si tu lui programme des dépendance (là par exemple elle est dépendante d'un fichier externe) tu lui retire tout intérêt.

Maintenant autres questions métaphysiques à se poser lorsqu'on crée une classe : A quoi sert elle ? A quoi vont servir les membres (ou attributs, les variables de la classe quoi) ? Suis je sur qu'il est utile que telle ou telle variable devienne un membre de la classe ? L'équilibre entre abstraction et concret( heu... titude ? :D) est il bon ? etc.

Même si je devine que cette classe te sert d'apprentissage, réfléchis à ces questions, cela t'évitera de te rendre compte après que tu viens de faire un truc inutile (j'ai fait pareil, je peux témoigner... c'est frustrant ;) ). Si tu veux un truc sympa pour te former, lis la doc de PDO, et essaye de refaire le système, c'est pas très compliqué mais te posera quelques problèmes très formateurs ;) Et comme PDO est bien pratique et pas présent chez tous les hébergeurs, tu n'auras pas fait un truc inutile.

Bon courage ! :)

Posté : 03 sept. 2007, 15:06
par momox
Ou sinon faire la config sous forme d'un tableau et utilier le mot clé global ;)
@+

Posté : 03 sept. 2007, 21:50
par BeRoots
merci à tous pour votre aide.... j'ai fini par trouver d'ou venai le problème :)

par contre j'ai refait les deux classe en spécifiant les attribut et methode et en les commentant en vue d'une future utilisation de phpdoc...

voila ce que ça donne:
/**
 * Classe de connection aux base de données
 *
 * INSTANCE (connection auto):       $connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db);
 * CONNECTION:                       $connecteur_db->select_db($identifiant_db);
 * REQUETE:                          $result = $connecteur_db->query($query);
 * DECONNECTION (destructeur):       $connecteur_db->__destruct();
 */
class brts_connecteur_db
{
   /**
   * on definit les propriétés associer à la dite classe
   */

   /**
   * Nom d'hote MySQL
   *
   * @staticvar string
   */
   private $host_db;

   /**
   * Nom d'utilisateur MySQL (login)
   *
   * @staticvar string
   */
   private $user_db;

   /**
   * Mot de pass MySQL
   *
   * @staticvar string
   */
   private $pass_db;

   /**
   * Nom de db beroots
   *
   * @staticvar string
   */
   private $beroots_db;

   /**
   * Nom de db client
   *
   * @staticvar string
   */
   private $client_db;

   /**
   * Connection active au server MySQL
   *
   * @var Float
   */
   protected $link;

   /**
   * Constructeur
   *
   * Definit les propriété de connection au server MySQL
   *
   * @param string $host_db
   * @param string $user_db
   * @param string $pass_db
   * @param string $beroots_db
   * @param string $client_db
   */
   public function __construct($host_db, $user_db, $pass_db, $beroots_db, $client_db)
   {
      $this->host_db      = $host_db;
      $this->user_db      = $user_db;
      $this->pass_db      = $pass_db;
      $this->beroots_db   = $beroots_db;
      $this->client_db    = $client_db;
      self::connect();
   }
   /**
   * Destructeur
   *
   * On ferme la connexion active au server MySQL et on efface les propriétés de la classe
   */
   public function __destruct()
   {
      self::close();
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->beroots_db);
      unset($this->client_db);
      unset($this->link);
   }
   /**
   * NOM DE LA FONCTION: connect()
   *
   * On établit une connexion au server MySQL
   */
   private function connect()
   {
      $this->link = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die('Erreur SQL !<br />'.$this->link.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: close()
   *
   * On ferme la connexion au server MySQL
   */
   private function close()
   {
      mysql_close($this->link);
   }
   /**
   * NOM DE LA FONCTION: select_db($identifiant_db)
   *
   * On fournie un identifiant de base de données (beroots ou client), et on est connecté à cette db.
   *
   * @param string $use_db
   */
   public function select_db($identifiant_db)
   {
      if($identifiant_db == 'beroots')
      {
         $use_db = $this->beroots_db;
      }
      elseif($identifiant_db == 'client')
      {
         $use_db = $this->client_db;
      }
      $selected_db = mysql_select_db($use_db, $this->link) or die('Erreur SQL !<br />'.$selected_db.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: query($query)
   *
   * on fournit une requete MySQL et on retourne le resultat de celle-ci.
   *
   * @param string $query
   * @return float $result_mysql
   */
   public function query($query)
   {
      $result_mysql = mysql_query($query) or die('Erreur SQL !<br />'.$result_mysql.'<br />'.mysql_error());
      return $result_mysql;
   }
}
/**
 * Classe de récuperation des infos webmaster et client
 *
 * INSTANCE (connection auto):       $brts_info = new brts_info($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db, $data_table_beroots, $data_table_client, $data_table_options, $data_table_crons);
 * RECUP INFOS BEROOTS:              $_BRTS = $brts_info->recup_info_brts();
 * RECUP INFOS CLIENT:               $_CLIENT = $brts_info->recup_info_client();
 * RECUP INFOS CRONS:                $_CRONS = $brts_info->recup_info_crons();
 * RECUP INFOS OPTIONS:              $_OPTIONS = $brts_info->recup_info_options();
 * DESTRUCTEUR:                      $brts_info->__destruct();
 */
class brts_info extends brts_connecteur_db
{
   /**
   * on definit les propriétés associer à la dite classe
   */

   /**
   * Nom d'hote MySQL
   *
   * @staticvar string
   */
   private $host_db;

   /**
   * Nom d'utilisateur MySQL (login)
   *
   * @staticvar string
   */
   private $user_db;

   /**
   * Mot de pass MySQL
   *
   * @staticvar string
   */
   private $pass_db;

   /**
   * Nom de db beroots
   *
   * @staticvar string
   */
   private $beroots_db;

   /**
   * Nom de db client
   *
   * @staticvar string
   */
   private $client_db;

   /**
   * Nom de table beroots
   *
   * @staticvar string
   */
   private $table_beroots;

   /**
   * Nom de table client
   *
   * @staticvar string
   */
   private $table_client;

   /**
   * Nom de table options
   *
   * @staticvar string
   */
   private $table_options;

   /**
   * Nom de table crons
   *
   * @staticvar string
   */
   private $table_crons;

   /**
   * on definit le constructeur suivant les propriétés de la dite classe
   */
   public function __construct($host_db, $user_db, $pass_db, $beroots_db, $client_db, $table_beroots, $table_client, $table_options, $table_crons)
   {
      $this->host_db        = $host_db;
      $this->user_db        = $user_db;
      $this->pass_db        = $pass_db;
      $this->beroots_db     = $beroots_db;
      $this->client_db      = $client_db;
      $this->table_beroots  = $table_beroots;
      $this->table_client   = $table_client;
      $this->table_options  = $table_options;
      $this->table_crons    = $table_crons;
   }
   /**
   * on definit le destructeur suivant les propriétés definit par la dite classe
   */
   public function __destruct()
   {
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->beroots_db);
      unset($this->client_db);
      unset($this->table_beroots);
      unset($this->table_client);
      unset($this->table_options);
      unset($this->table_crons);
   }
   /**
   * NOM DE LA FONCTION: recup_info_brts()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table beroots de la base beroots.
   */
   public function recup_info_brts()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db beroots
      parent::select_db('beroots');
      // on recupere tout le contenu de la table beroots
      $result = parent::query("SELECT * FROM `".$this->table_beroots."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      parent::__destruct();
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_client()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table client de la base client.
   */
   public function recup_info_client()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_client."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_options()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table option de la base client.
   */
   public function recup_info_options()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_options."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_crons()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table crons de la base client.
   */
   public function recup_info_crons()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_crons."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
}
si quelqu'un pouvait me donner sont avis sur ma façon de codé, sur les rajout et conseils sur les var de phpdocumentator.... ce serai vraiment sympa :)

à rearquer d'ailleur que je suppose qu'il y à mieux à faire du coter des deux commentaire de presentation de la classe avec des chose comme @author, @todo... (si quelqu'un ce sent de reprendre un de ces commentaire pour en faire un propre et me l'expliquer, j'en rêve la nuit :p )

par contre merci de ne pas insister sur le pourquoi d'une telle classe ou methode mais de rester sur le point de vue methodologie de la chose ;)

Merci d'avance pour vos conseils éclairés ;)

Posté : 06 sept. 2007, 15:14
par BeRoots
encore le même soucis avec mes classes :?

j'ai pourtant tout revu mais maintenant ce n'est plus ma classe etendu mais ma classe mere qui me genere une erreur comme si on perdait la ressources link comme par enchantement :-k

j'ai simplifier à l'extreme le script pour vous montrez:
<?php
require("../../nowww/data.php");
/**
 * Classe de connection aux base de données
 *
 * INSTANCE (connection auto):       $connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db);
 * CONNECTION:                       $connecteur_db->select_db($identifiant_db);
 * REQUETE:                          $result = $connecteur_db->query($query);
 * DECONNECTION (destructeur):       $connecteur_db->__destruct();
 */
class brts_connecteur_db
{
   /**
   * on definit les propriétés passées à la dite classe
   */

   /**
   * Nom d'hote MySQL
   *
   * @staticvar string
   */
   private $host_db;

   /**
   * Nom d'utilisateur MySQL (login)
   *
   * @staticvar string
   */
   private $user_db;

   /**
   * Mot de pass MySQL
   *
   * @staticvar string
   */
   private $pass_db;

   /**
   * Nom de db beroots
   *
   * @staticvar string
   */
   private $beroots_db;

   /**
   * Nom de db client
   *
   * @staticvar string
   */
   private $client_db;

   /**
   * Connection active au server MySQL
   *
   * @var Float
   */
   private $link;

   /**
   * Constructeur
   *
   * Definit les propriété de connection au server MySQL
   *
   * @param string $host_db
   * @param string $user_db
   * @param string $pass_db
   * @param string $beroots_db
   * @param string $client_db
   */
   public function __construct($host_db, $user_db, $pass_db, $beroots_db, $client_db)
   {
      $this->host_db      = $host_db;
      $this->user_db      = $user_db;
      $this->pass_db      = $pass_db;
      $this->beroots_db   = $beroots_db;
      $this->client_db    = $client_db;
      self::connect();
   }
   /**
   * Destructeur
   *
   * On ferme la connexion active au server MySQL et on efface les propriétés de la classe
   */
   public function __destruct()
   {
      self::close();
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->beroots_db);
      unset($this->client_db);
      unset($this->link);
   }
   /**
   * NOM DE LA FONCTION: connect()
   *
   * On établit une connexion au server MySQL
   */
   private function connect()
   {
      $this->link = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die('Erreur SQL !<br />'.$this->link.'<br />'.mysql_error());
echo $this->link.'--->variable $link en echo dans methode connect<br />';
   }
   /**
   * NOM DE LA FONCTION: close()
   *
   * On ferme la connexion au server MySQL
   */
   private function close()
   {
echo $this->link.'--->variable $link en echo dans methode close<br />';
      mysql_close($this->link);
   }
   /**
   * NOM DE LA FONCTION: select_db($identifiant_db)
   *
   * On fournie un identifiant de base de données (beroots ou client), et on est connecté à cette db.
   *
   * @param string $use_db
   */
   public function select_db($identifiant_db)
   {
      if($identifiant_db == 'beroots')
      {
         $use_db = $this->beroots_db;
      }
      elseif($identifiant_db == 'client')
      {
         $use_db = $this->client_db;
      }
      $selected_db = mysql_select_db($use_db, $this->link) or die('Erreur SQL !<br />'.$selected_db.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: query($query)
   *
   * on fournit une requete MySQL et on retourne le resultat de celle-ci.
   *
   * @param string $query
   * @return float $result_mysql
   */
   public function query($query)
   {
      $result_mysql = mysql_query($query) or die('Erreur SQL !<br />'.$result_mysql.'<br />'.mysql_error());
      return $result_mysql;
   }
}
/**
 * Classe de récuperation des infos webmaster, client, et des options du site
 *
 * INSTANCE (connection auto):       $brts_info = new brts_info($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db, $data_table_beroots, $data_table_client, $data_table_options);
 * RECUP INFOS BEROOTS:              $_BRTS = $brts_info->recup_info_brts();
 * RECUP INFOS CLIENT:               $_CLIENT = $brts_info->recup_info_client();
 * RECUP INFOS OPTIONS:              $_OPTIONS = $brts_info->recup_info_options();
 * DESTRUCTEUR:                      $brts_info->__destruct();
 */
class brts_info extends brts_connecteur_db
{
   /**
   * on definit les propriétés passées à la dite classe
   */

   /**
   * Nom d'hote MySQL
   *
   * @staticvar string
   */
   private $host_db;

   /**
   * Nom d'utilisateur MySQL (login)
   *
   * @staticvar string
   */
   private $user_db;

   /**
   * Mot de pass MySQL
   *
   * @staticvar string
   */
   private $pass_db;

   /**
   * Nom de db beroots
   *
   * @staticvar string
   */
   private $beroots_db;

   /**
   * Nom de db client
   *
   * @staticvar string
   */
   private $client_db;

   /**
   * Nom de table beroots
   *
   * @staticvar string
   */
   private $table_beroots;

   /**
   * Nom de table client
   *
   * @staticvar string
   */
   private $table_client;

   /**
   * Nom de table options
   *
   * @staticvar string
   */
   private $table_options;

   /**
   * Constructeur
   *
   * Definit les propriété de connection au server MySQL et les noms des tables system
   *
   * @param string $host_db
   * @param string $user_db
   * @param string $pass_db
   * @param string $beroots_db
   * @param string $client_db
   * @param string $table_beroots
   * @param string $table_client
   * @param string $table_options
   */
   public function __construct($host_db, $user_db, $pass_db, $beroots_db, $client_db, $table_beroots, $table_client, $table_options)
   {
      $this->host_db        = $host_db;
      $this->user_db        = $user_db;
      $this->pass_db        = $pass_db;
      $this->beroots_db     = $beroots_db;
      $this->client_db      = $client_db;
      $this->table_beroots  = $table_beroots;
      $this->table_client   = $table_client;
      $this->table_options  = $table_options;
   }
   /**
   * Destructeur
   *
   * Efface les propriétés passer à la dite classe
   */
   public function __destruct()
   {
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->beroots_db);
      unset($this->client_db);
      unset($this->table_beroots);
      unset($this->table_client);
      unset($this->table_options);
   }
   /**
   * NOM DE LA FONCTION: recup_info_brts()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table beroots de la base beroots.
   */
   public function recup_info_brts()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db beroots
      parent::select_db('beroots');
      // on recupere tout le contenu de la table beroots
      $result = parent::query("SELECT * FROM `".$this->table_beroots."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      parent::__destruct();
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_client()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table client de la base client.
   */
   public function recup_info_client()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_client."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_options()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table option de la base client.
   */
   public function recup_info_options()
   {
      // on se connecte au server MySQL
      parent::__construct($this->host_db, $this->user_db, $this->pass_db, $this->beroots_db, $this->client_db);
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_options."` WHERE id = 1");
      parent::__destruct();
      $var = mysql_fetch_assoc($result);
      return $var;
   }
}

// on effectue des requetes depuis la clase mere
$connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db);
$connecteur_db->select_db('client');
$result = $connecteur_db->query("DELETE FROM `private_table_membre` WHERE inscription <= CURRENT_DATE -2 AND activ != 'true'");
$result = $connecteur_db->query("OPTIMIZE TABLE private_table_membre");
$connecteur_db->__destruct();

// on effectue des requetes depuis la classe fille
$brts_info = new brts_info($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db, $data_table_beroots, $data_table_client, $data_table_options);
$_BRTS = $brts_info->recup_info_brts();
$_CLIENT = $brts_info->recup_info_client();
$_OPTIONS = $brts_info->recup_info_options();
$brts_info->__destruct();
?>
Ce script m'affiche ceci:
Resource id #3--->variable $link en echo dans methode connect
Resource id #3--->variable $link en echo dans methode close
Resource id #5--->variable $link en echo dans methode connect
Resource id #5--->variable $link en echo dans methode close
Resource id #7--->variable $link en echo dans methode connect
Resource id #7--->variable $link en echo dans methode close
Resource id #9--->variable $link en echo dans methode connect
Resource id #9--->variable $link en echo dans methode close

Notice: Undefined property: brts_connecteur_db::$link in C:\Program Files\EasyPHP 2.0b1\www\restaurant-lachartreuse\ztest.php on line 111
--->variable $link en echo dans methode close

Notice: Undefined property: brts_connecteur_db::$link in C:\Program Files\EasyPHP 2.0b1\www\restaurant-lachartreuse\ztest.php on line 112

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in C:\Program Files\EasyPHP 2.0b1\www\restaurant-lachartreuse\ztest.php on line 112
si quelqu'un arrive à me dire pourquoi, pour une action identique à celle effectuer par la classes fille sur la classe mere, cela ne fonctionne pas en faisant pareille depuis la classe mere uniquement :?

à l'affichage on remarque de suite que link n'est plus definit à l'utilisation de la classe mere toute seul...

Merci d'avance pour vos reponse à cette appel au secour :)

EDIT: si je compte bien, mes echo sont afficher 4 fois chacun donc normalement on devrai s'arreter là ce qui prouve que tout fonctionne :?
par contre apres on remarque une notice et un autre echo (donc un autre appel de la fonction close() de la classe mère)... c'est comme si on appelait 2 fois le destructeur pour l'utilisation de la classe mère...
je pense qu'il faut vraiment regarder de ce coté la car tout semble fonctionner sinon. :idea:

Posté : 06 sept. 2007, 15:18
par Sékiltoyai
Au lieu de self::connect(); , utilise $this->connect(). Tu es dans un contexte dynamique et non statique, tes méthodes sont donc des méthodes d'objet et non de classe.

Posté : 06 sept. 2007, 15:39
par BeRoots
j'ai mis self::connect(); à $this->connect(); mais c'est toujour pareille... j'ai fait de même avec self::close(); passer à $this->close(); est rien de mieux :?

Si quelqu'un voit autre chose ;)

Posté : 06 sept. 2007, 16:17
par Sékiltoyai
Ah oui, le truc con, t'as mis tes attributs en private, ils ne sont pas hérités, pour les hériter, tu dois les mettre en protected…
Et tu ne dois pas redéclarer les attributs déclarés dans la classe mère.

Posté : 06 sept. 2007, 19:18
par BeRoots
oui mais la en faite, mes deux classes on une utilisation completment independante... soit j'utilise directement la classe mere soit j'utilise la classe fille...

la classe fille est une classe etendu uniquement pour utilisation des methode de la classe mere :?

en gros je pense serai de tout refaire en utilisant en ne definisant que des methode public dans la classes fille et en instanciant la clase mere pour ce qui est de la connection et de la selection de db....

je vais voir sous peu et vous tient au jus ... ;)


QUESTION: Peut on enchainer les mysql_select_db();mysql_query();mysql_select_db();mysql_query(); sans faire un mysql_close();mysql_connect(); à chaque nouvelle selection de db?
(donc sous la même connexion au server MySQL) :-k

Posté : 06 sept. 2007, 21:08
par Sékiltoyai
oui mais la en faite, mes deux classes on une utilisation completment independante... soit j'utilise directement la classe mere soit j'utilise la classe fille...

la classe fille est une classe etendu uniquement pour utilisation des methode de la classe mere :?
Et alors ? Tu peux très bien utiliser l'une ou l'autre, c'est juste que si tu hérites, ca ne sert à rien de redéclarer des attributs que tu as déjà déclaré, même si tu les utilises un peu différemment.
Peut on enchainer les mysql_select_db();mysql_query();mysql_select_db();mysql_query(); sans faire un mysql_close();mysql_connect(); à chaque nouvelle selection de db?
(donc sous la même connexion au server MySQL) :-k
Bah oui…