probleme avec mysql passer à l'objet ...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme avec mysql passer à l'objet ...

par BeRoots » 09 sept. 2007, 19:48

j'ai regarder dans des classes existantes de gestion de MySQL et c'est pareil... il appel tous mysql_close depuis une fonction autre que le destructeur (peut être une incompatibilité des deux fonctions, je sait pas...).

enfin cela fonctionne donc je continu sur ma lancer...

par BeRoots » 07 sept. 2007, 09:09

J'ai fini par trouver :)

en faite il y avait un problème lorsque j'appelai ma methode close depuis mon destructeur...
en gros, quand mysql_close est appeler au destructeur, on pert $this->link et je ne comprend toujour pas pourquoi :?

j'ai fait ainsi et tout fonctionne:
<?php
require("../../nowww/data.php");
/**
 * Classe de connection aux base de données MySQL
 *
 * CONNEXION SERVER MySQL:    $connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db);
 * SELECTION DB:              $connecteur_db->select_db($identifiant_db);
 * REQUETE:                   $result = $connecteur_db->query($query);
 * DECONNECTION SERVER MySQL: $connecteur_db->close();
 */
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;
      $this->connect();
   }
   /**
   * Destructeur
   *
   * On efface les propriétés de la 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->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 et on appel le destructeur
   */
   public function close()
   {
      mysql_close($this->link);
      $this->__destruct();
   }
   /**
   * 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 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 $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)
   {
      parent::__construct($host_db, $user_db, $pass_db, $beroots_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->table_beroots);
      unset($this->table_client);
      unset($this->table_options);
   }
   /**
   * NOM DE LA FONCTION: close()
   *
   * On appel la fonction close de la classe mère pour destruction de celle-ci et on appel le destructeur
   */
   public function close()
   {
      parent::close();
      $this->__destruct();
   }
   /**
   * 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::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);
      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::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_client."` WHERE id = 1");
      $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 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");
      $var = mysql_fetch_assoc($result);
      return $var;
   }
}

// on effectue des requetes depuis la classe
$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("OPTIMIZE TABLE private_table_membre");
$connecteur_db->close();

// 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->close(); 

// on affiche
print_r($_BRTS);
echo '<br />';
print_r($_CLIENT);
echo '<br />';
print_r($_OPTIONS);
echo '<br />';
?>
un destructeur est pratique pour fermer les ressources ouvertes: fichiers, connexions vers des server de bases de données...
1°) si quelqu'un peut me dire pourquoi je pert $this->link quand je passe par le destructeur et pourquoi il ne se pert pas lorsque je l'appel dans une fonction close() public?
Ps. si quelqu'un voit un moyen de definir un destructeur digne de ce nom pour fermer cette connexion au server mysql sans génerer d'erreur? (regarder uniquement pour ce qui est de la classe mère car le problème est similaire pour la classe fille ;) )

2°) quelqu'un peut il ne dire si la syntaxe de mes classes est maintenant correct (surtout au niveau de la nom definition de certains attibut passer à la classe fille pour le constructeur de la classe mère)?

Merci d'avance ;)

par Sékiltoyai » 06 sept. 2007, 21:08

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…

par BeRoots » 06 sept. 2007, 19:18

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

par Sékiltoyai » 06 sept. 2007, 16:17

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.

par BeRoots » 06 sept. 2007, 15:39

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 ;)

par Sékiltoyai » 06 sept. 2007, 15:18

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.

par BeRoots » 06 sept. 2007, 15:14

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:

par BeRoots » 03 sept. 2007, 21:50

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 ;)

par momox » 03 sept. 2007, 15:06

Ou sinon faire la config sous forme d'un tableau et utilier le mot clé global ;)
@+

par Jules Petibidon » 03 sept. 2007, 15:06

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 ! :)

par Sékiltoyai » 03 sept. 2007, 14:50

Je pense que tu es obligé de le faire à mano dans ton __construct().

par BeRoots » 03 sept. 2007, 14:38

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 :)

par Sékiltoyai » 02 sept. 2007, 23:00

Essaye comme te le dit Jules Petibidon de déclarer les attributs dans ta classe. Autant tout faire dans les règles.

par BeRoots » 02 sept. 2007, 20:10

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 :)