JeuWeb - Crée ton jeu par navigateur
[POO]comment faire pour sortir la db? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [POO]comment faire pour sortir la db? (/showthread.php?tid=232)



[POO]comment faire pour sortir la db? - joshua - 20-09-2006

bonsoir les petits amis,
J'ai un immense probleme: j'ai une classe qui permet de faire des insertions en base de données de mes ressources.... le soucis, c'est que je suis obligé de passer ma base de données en paramètre a chaque création d'un objet ressource_db....
une petite présentation valant mieux qu'un long discours, voici mon code:
Code PHP :
<?php 
/*
* fichier ressource.db.class.php du projet starwars
* Créé le 20 août 2006 à 22:08:48
*
* TODO
*
*
* Pour changer le template de ce fichier généré aller sous
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/

require_once '../model/mysql.class.php';

class
ressource_db
{
protected
$element = "";
protected
$value = "";


function
__construct($db) //constructeur de la ressource
{
$this->db = $db;
$this->id = "0";
$this->nom = "0";
$this->categorie = "0";
}

function
get($element) //permet de recuperer les valeurs de l'objet'
{
switch(
$element)
{
case
'id':
return
$this->id;
case
'nom':
return
$this->nom;
case
'croissance':
return
$this->croissance;
case
'categorie':
return
$this->categorie;
}
}

function
set($element,$value) // permet de seter les elements de l'objet
{
switch(
$element)
{
case
'id':
$this->id = $value;
case
'nom':
$this->nom = $value;
case
'croissance':
$this->croissance = $value;
case
'categorie':
$this->categorie = $value;
}
}

function
check () //valide que tout est bon pour insérer en base
{
$response = "0";
if (
$this->id != "0")
{
if (
$this->nom != "0")
{
if (
$this->croissance != "0")
{
if (
$this->categorie != "0")
{
$response = "1";
}
}
}
}
return
$response;
}

function
save () //insere en base
{
$ret = $this->check();
if (
$ret == "1")
{
$contenu="INSERT INTO `tbl_ressource` VALUES ('".$this->id."','".$this->nom."','".$this->croissance."','".$this->categorie."')";
$res = $this->db->query($contenu);
}
}

function
load ($id) //charge un élement depuis la base
{

$res = $this->db->query("SELECT * FROM tbl_ressource WHERE id ='".$id."'");
if (
$res != 0)
{
$table = $this->db->getObject($res);
$this->id = $table->id;
$this->nom = $table->nom;
$this->croissance = $table->croissance;
$this->categorie = $table->categorie;
}
else
{
die (
"unable to load object");
}
}

}

?>
une personne plus douée que moi en objet saurait elle comment je peux faire pour ne pas devoir rappeler ma base a chaque fois dans le constructeur?


RE: [POO]comment faire pour sortir la db? - pascal - 21-09-2006

si tu sors ton objet $db du constructeur, tu devras le mettre dans chaque méthode utilisant du SQL ( save, load ), soit en parametre, soit en variable locale dans la méthode.

en quoi est-ce génant d'avoir cette variable dans le constructeur?

A+

Pascal


RE: [POO]comment faire pour sortir la db? - joshua - 21-09-2006

ce qui m'ennuie c'est que je n'ai qu'une base. Et que donc j'aurais aimé ne la placer qu'une fois au début et ne plus avoir a la citer. Mais je crois que le seul moyen dans ce cas c'est de la mettre dans ma classe MySql........
Je me trompe?


RE: [POO]comment faire pour sortir la db? - gtsoul - 21-09-2006

crée un attribut
protected $db;

et dans le constructeur tu fais un
__construct ( ..)
{
global $db1; //ou db1 est le nom de ta connection que tu as ouverte dans ton main()
...
$this->db = $db1;
..
}

pour chaque requete dans ta classe, tu appelle $this->db