Hola masnovita, me tome el trabajo de acomodar la parte de la base de datos, no arregle la clase usuario, te pego el codigo, y te advierto que no llegue a probarlo.
Por favor, indiquenme cualquier error teorico o de programacion que haya cometido. Por favo si hacen una correcion teorica justifiquenla, asi aprendo un poco jeje.
Código PHP:
<?php
abstract class Singleton {
//suena a reggaetton no?
private $yoMismo;
public function __construct(){
// si no existo me creo
if (!isset($this->yoMismo))
$this->yoMismo=new $this;
return $this->yoMismo;
}
}
class DBConfig extends Singleton {
private $dbHost;
private $dbUser;
private $dbPassword;
private $dbName;
public function __construct($dbHost=null,$dbUser=null,$dbPassword=null,$dbName=null) {
$this->dbHost=$dbHost;
$this->dbUser=$dbUser;
$this->dbPassword=$dbPassword;
$this->dbName=$dbName;
parent::__construct();
}
public function getDbHost() {
return $this->dbHost;
}
public function getDbUser() {
return $this->dbUser;
}
public function getDbPassword() {
return $this->dbPassword;
}
public function getDbName() {
return $this->dbName;
}
}
class Database extends Singleton {
private $dbConfig;
private $link;
public function __construct($dbHost,$dbUser,$dbPassword,$dbName) {
if (isset($this->dbHost)&&isset($this->dbUser)&&isset($this->dbPassword)&&isset($this->dbName))
$this->dbConfig=new DBConfig($dbHost,$dbUser,$dbPassword,$dbName);
return parent::__construct();
}
private function connect() {
// if there is no link to DB then connect
if (!isset($this->link)){
$this->link=mysql_connect($this->dbConfig->getDbHost(),$this->dbConfig->getDbUser(),$this->dbConfig->getDbPassword());
mysql_select_db($this->dbConfig->getDbName(),$this->link);
if (!isset($this->link))
throw new Exception('Not connected',1);
}
}
public function tquery($sql) {
$this->connect();
if(!$result = mysql_query($sql,$this->link))
throw new Exception('SQL ERROR',2);
return($result);
}
public function tunquery($sql) {
$this->connect();
if(!$result = mysql_unbuffered_query($sql,$this->link))
throw new Exception('SQL ERROR',2);
return($result);
}
public function escape($value) {
$this->connect();
if(get_magic_quotes_gpc()) $value = stripslashes($value);
if(!is_numeric($value)) $value = mysql_real_escape_string($value,$this->link);
return($value);
}
}
Ahora solo debes iniciar una vez el objeto $database, y luego cada vez que quieras usarlo en una clase debes poner;
$elNombreQueQuieras = new Database;
Recuerda que la primera vez que lo crees debes poner;
$cualquierCosa=new Database('elHostdeDB','nombre de usuario','pass','nombre de la base');
Te recomendaria hacerlo en el mismo archivo que guardes la clase database, asi con incluirlo te aseguras de setearlo, o podrias hacer un archivo de init para que quede mas prolijo.
Saludos, Eugenio