Bonjour,
J'ai codé une classe gérant les connexions à ma bdd, et une autre classe permettant de faire mes requêtes.
Ma classe cDatabase:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| <?php if (!defined('ROOT_DIR')) die('Vous ne pouvez pas accéder à ce fichier directement!');
class cDatabase {
private static $pg_instance = NULL;
private static $db_host = NULL;
private static $db_port = NULL;
private static $db_name = NULL;
private static $db_user = NULL;
private static $db_pass = NULL;
/**
* Constructeur
* @name __contruct
*/
public function __construct($db_host,$db_port,$db_name,$db_user,$db_pass) {
$this->db_host = $db_host;
$this->db_port = $db_port;
$this->db_name = $db_name;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
}
/**
* Afin de protéger l'instance créer
* @name __clone
*/
private function __clone(){}
/**
* Connexion à la base de données Postgres
* @name pgConnect
*
* @return $pg_instance
*/
public static function pgConnect() {
if (! defined('PG_DB_CHARSET')) define('PG_DB_CHARSET', DEFAULT_DB_CHARSET);
if (!self::$pg_instance) {
try {
self::$pg_instance = new PDO(
'pgsql:host=' . $this->db_host . ';port=' . $this->db_port . ';dbname=' . $this->db_name . ';user=' . $this->db_user . ';password=' . $this->db_pass . ''
);
self::$pg_instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo '['.$e->code.']: ' . $e->getMessage();
}
}
return self::$pg_instance;
}
/**
* Exécution d'une requête sur la base Postgres
* @name pgQuery
*
* @return ressource
*/
public static function pgQuery($query) {
if (self::$my_instance) {
try {
return $sth = self::$pg_instance->query($query);
} catch (PDOException $e) {
throw new Exception('['.$e->getCode().']: ' . $e->getMessage() );
}
} else {
throw new Exception("[ERR] Impossible d'exécuter la requête sur la base de données");
}
}
/**
* Déconnexion de la base Postgres
* @name pgDisconnect
*
* @return boolean
*/
public static function pgDisconnect() {
if (self::$pg_instance) {
try {
self::$pg_instance = null;
return true;
} catch (PDOException $e) {
echo '['.$e->code.']: ' . $e->getMessage();
}
}
}
}
?> |
Et la classe cDbmanage:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <?php if (!defined('ROOT_DIR')) die('Vous ne pouvez pas accéder à ce fichier directement!');
class cDbManage {
public function checkLogin($_POST) {
$login = cTools::protect($_POST['username']);
$password = md5(cTools::protect($_POST['password']));
if (empty($login) || empty($password)) return false;
try {
$query = "select userid,CONCAT_WS(' ',name,surname) as name from users
where login='$login' AND pass='$password'";
$dbh = new cDatabase("adresseip","port","dbname","user","pass");
$dbh->pgConnect();
$PgRes = $dbh->pgQuery($query);
foreach($MyRes as $row) {
$_SESSION['authid'] = $row['userid'];
$_SESSION['auth'] = $row['name'];
}
$dbh->pgDisconnect();
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
}
?> |
Et l'appel à la méthode checkLogin:
cDbManage::checkLogin($_POST);
Et il me renvoi l'erreur:
Fatal error: Using $this when not in object context in /VAR/applis/apache2/www/dbr/class/cDatabase.php on line ...
Je ne comprends pas ce que je fais de mal. J'appelle une fonction publique qui elle fait la vérification de login et renseigne les variables d'environnements.
Auriez-vous une idée ?
Partager