par
Ajoloca » 28 déc. 2006, 02:10
Bonsoir,
Je crois que tu te compliques la vie pour rien.
La solution la plus simple est d'obtenir la connexion en dehors de la class et de la passer en paramètre soit au constructeur soit à l'appel des méthodes qui en on besoin.
config.inc.php
<?php
//fichier de configuration local config.inc.php
$username = "root";
$password = "";
$hostname = "localhost";
$nomBase = "essai";
$nomTable = "articles";
//création de l'objet mysqli
$nouvelleConnexion = new mysqli($hostname,$username,$password,$nomBase);
?>
Si tu le fais dans le constructeur
class article {
public $title;
public $text;
public $categorie;
public $currentDate;
public $messageUser;
public $sql;
public $stmt;
public $cnx;
function __construct($_cnx){
$this->title = "";
$this->text = "";
$this->categorie = "";
$this->sql = "";
$this->stmt = "";
$this->messageUser = "<ul id='msgtransmis'><li>Appel du constructeur</li>";//a modifier à la mise en ligne
$this->currentDate = date("F j, Y, g:i a");
$this->cnx = $_cnx;
}
Et dans tes méthodes tu utilises la connexion de l'objet
function creationArticle(){
//creation d'un article, insertion dans la BDD
$this->sql = "INSERT INTO `".$nomTable."` (`id`,`titre`,`texte`,`categorie`,`datepublication`) VALUES (``, `".$this->title."` ,`".$this->text."`,`".$this->categorie."`,`".$this->currentDate."`)";
echo $this->sql;
$this->stmt = $this->cnx->query($sql);
if($this->stmt === true){
$this->messageUser .= "<li>Les données ont été insérées.</li>";
echo $this->messageUser."</ul>";
}
else if($this->stmt === false){
$this->messageUser .= "<li>Les données n'ont pas été insérées.</li>";
echo $this->messageUser."</ul>";
exit();
}
}
ATTENTION :
Avec cette méthode la connexion ne sera pas conservée d'une page à l'autre (même en passant l'objet en session).
Ce que je te conseille c'est de passer la connexion en paramètre de chaque méthode qui en a besoin comme ceci.
Tu gardes ton fichier de connexion comme l'autre.
Ton constructeur devient comme au début
class article {
public $title;
public $text;
public $categorie;
public $currentDate;
public $messageUser;
public $sql;
public $stmt;
function __construct(){
$this->title = "";
$this->text = "";
$this->categorie = "";
$this->sql = "";
$this->stmt = "";
$this->messageUser = "<ul id='msgtransmis'><li>Appel du constructeur</li>";//a modifier à la mise en ligne
$this->currentDate = date("F j, Y, g:i a");
}
Dans tes méthodes qui ont un accès à MySQL
function creationArticle($_cnx){
//creation d'un article, insertion dans la BDD
$this->sql = "INSERT INTO `".$nomTable."` (`id`,`titre`,`texte`,`categorie`,`datepublication`) VALUES (``, `".$this->title."` ,`".$this->text."`,`".$this->categorie."`,`".$this->currentDate."`)";
echo $this->sql;
$this->stmt = $_cnx->query($sql);
if($this->stmt === true){
$this->messageUser .= "<li>Les données ont été insérées.</li>";
echo $this->messageUser."</ul>";
}
else if($this->stmt === false){
$this->messageUser .= "<li>Les données n'ont pas été insérées.</li>";
echo $this->messageUser."</ul>";
exit();
}
}
Bien que je l'ai pas fait, tu devrais tester si ta connexion existe avant son utilisation, quelle que soit la méthode
if(!$_cnx) die('La connexion à la base n\'est pas valide');