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
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.

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]<?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();
?>[/php]
Ce script m'affiche ceci:
[quote]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
[/quote]
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: