Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/02/2010, 12:23
Avatar de cesarpunk
cesarpunk
 
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 17 años
Puntos: 9
agregar métodos de otra clase

Hola, ya que termine de completar la clase de conexión quería crear una clase de "usuarios"... pero no sé como llamar los métodos de la clase "conexión" a la clase "usuarios" tales como ejecutar() numero_registros() etc... Para la clase conexión he usado el patrón singleton... cambias las cosas para ese caso?

Código PHP:
class Db{
     private 
$servidor;    
     private 
$usuario;    
     private 
$password;    
     private 
$base_datos;    
     private 
$link;    
     private 
$result
     private 
$num;   
     private 
$array;  
     static 
$_instance;     
       
     private function 
__construct(){
            
$this->setConexion();       
            
$this->conectar();
     }     
      
     private function 
setConexion(){
            
$conf Conf::getInstance();       
            
$this->servidor=$conf->getHostDB();       
            
$this->base_datos=$conf->getDB();       
            
$this->usuario=$conf->getUserDB();      
            
$this->password=$conf->getPassDB();    
     }     
      
     private function 
__clone(){ }  
       
     public static function 
getInstance(){
            if (!(
self::$_instance instanceof self)){
                
self::$_instance=new self();       
            }
            return 
self::$_instance;
     }     
     
     private function 
conectar(){
            
$link=mysql_connect($this->servidor$this->usuario$this->password); 
            if (
$link){      
                
mysql_select_db($this->base_datos,$link);       
                @
mysql_query("SET NAMES 'utf8'"); 
            } 
            if (!
$link){            
                exit(
'Error en la BD');
            }else{
                
$this->link=$link;    
            }           
     }
     
     
/*Método para ejecutar una sentencia sql*/    
     
public function ejecutar($sql){
            
$this->result=mysql_query($sql,$this->link) or die(mysql_error());
            return 
$this->result;    
     }
     
     
/*Método número de registros de query*/    
     
public function numero_registros($result){
            
$this->num=mysql_num_rows($result);
            return 
$this->num;    
     } 
          
     
/*Método para obtener una fila de resultados de la sentencia sql*/    
     
public function obtener_fila($result,$fila){
            if (
$fila==0){
                      
$this->array=mysql_fetch_array($result);       
            }else{
                      
mysql_data_seek($result,$fila);
                      
$this->array=mysql_fetch_array($result);
            }
            return 
$this->array;
     }   
    
     
     
//Método de seguridad de cadenas
     
public function setSecure($string){ 
        if(
is_string($string)){
           return 
mysql_real_escape_string(stripslashes(trim($string))); 
        }
     }  
     
     
/*cerrar la conexion*/
     
public function __destruct(){ 
         if (
is_resource($this->link)){
                @
mysql_close($this->link);
         }
     } 


Y esta es la clase que intento crear la de Usuarios:

Código PHP:
/*Incluimos el fichero de la clase Db*/
require_once 'dbConfig/Db.class.php';
/*Incluimos el fichero de la clase Conf*/
require_once 'dbConfig/Conf.class.php';

/* Clase encarga de gestionar al usuario */
class Users extends Db
     private 
$sql
     private 
$result;
     private 
$num;
     private 
$userID;
     static 
$_instance;     
        
     private function 
__construct(){
             
session_start();
            
$bd Db::getInstance();
     }
     
     public static function 
getInstance(){
            if (!(
self::$_instance instanceof self)){          
                
self::$_instance=new self();
            }       
            return 
self::$_instance;
     }
     
//Método login de los USUARIOS
     
public function login($usuario$password){ 
        
         
$sql="SELECT * FROM user WHERE ...";
        
$result=$this->ejecutar($sql);
        
$num=$this->numero_registros($result); 
        
        if(
$num 0){
            
$sql="SELECT * FROM user WHERE ....";
            
$result=$this->ejecutar($sql);
            
$num=$this->numero_registros($result);
    
            if(
$num>0){
                    while (
$x=$this->obtener_fila($result,0)){
                        
$userID=$x['customers_id']; 
                    }        
                    
$_SESSION["userID"]=$userID;
                    return 
1;
                    
            }
            else{
/*error de contraseña*/ return 0;}
        }
        else{
/*error de usuario*/ return 0;}
     } 
     
    public function 
getUserSession(){ 
        return 
$_SESSION["userID"]; 
    } 



Y aqui llamo al objeto:

Código PHP:
/*Incluimos el fichero de la clase Users*/
require_once 'lib/Users.class.php';
session_start();
//Invocamos al objeto usuario
$objUsers=Users::getInstance();
//Obtenemos los datos introducidos por el usuario
$usuario=$_POST["usuario"];   
$password=$_POST["password"]; 
//comprobamos si existe
$existe_Usuario=$objUsers->login($usuario,$password); 
if(
$existe_Usuario==1){ 
    echo 
"entro!";
}
else {
    echo 
"no es usuario!"


Pero cuando pruebo la clase en el formulario me muestra este error:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in Db.class.php on line 65

Creo que no estoy instanciando bien la conexión a la clase de usuarios... y no sé si estoy invocando bien a los métodos, espero me puedan ayudar ya que estoy bien frio en la p.o.o. , gracias.
__________________
Quitenme la vida pero no la bebida.