Ver Mensaje Individual
  #8 (permalink)  
Antiguo 20/06/2008, 07:50
Avatar de enriqueplace
enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: $this->false (php4) a unset($this) (php5)

Bueno, rápidamente te puedo decir que tu constructor está "muy gordo", hace demasiadas cosas.

Algunas sugerencias:
  1. Cambia el constructor por __construct
  2. No pongas en minúsculas la clave, ya que si alguien pone claves combinadas no funcionarán luego.
  3. Separa las operaciones de persistencia en métodos aparte y no lo hagas en el mismo constructor.
  4. Es medio redundante retornar false y además retornar un objeto del mismo tipo con un atributo en false
  5. Cierra siempre con llaves, no deje el if sin llaves.
  6. Cambia "coneccion" por "conexión".
  7. Usa nombres coherentes para las instancias (no "obj")
  8. Trata de ver un mecanismo que no tengas siempre en la sesión la clave del usuario.

Voy a hacer un ejemplo rápido para que se entienda mejor (puede tener detalles y/o errores):

Código PHP:
class Login
{
   private 
$_usuario null;
   private 
$_clave null;
   private 
$_resultado null;
   
   public function 
__construct($usuario ""$clave "")
   {
      
$this->_usuario $usuario;
      
$this->_clave $clave;
   }
   public function 
esValido()
   {
          
$this->load();
          
       if (
$this->conexion->numeroResultados() == 0){
               
$this->registrado false;
        }else{
            
$this->registrado true;
        }
           return 
$this->registrado;
   }
   public function 
load()
   {
      
$this->conexion = new Coneccion(MYSQL_URL,MYSQL_USER,MYSQL_PASS,MYSQL_SCHEMA);

       
$res $this->conexion->conecta();
       if (!
$res){
               die(
$this->conexion->ultimoError());
       }
       
$this->_resultado $this->conexion->consulta("SELECT * FROM clientes WHERE usuario='$usuario' AND clave='$clave'");

       if (!
$res){
          die(
$this->coneccion->ultimoError());
       }    
   }   


/* Uso */

if (!empty($_POST['usuario']) && !empty($_POST['clave']))

    
$post_usuario strtolower($_POST['usuario']);
    
$post_clave $_POST['clave'];
    
    
$Login = new Login($post_usuario$post_clave);
    
    if (
$Login->esValido() ){
      
session_start();
      
$_SESSION['USUARIO'] = $post_usuario;
      
$_SESSION['CLAVE'] = $post_clave;
      
header("location: area.php");
      exit();
   }


De todas formas puedes ver de cambiar la estrategia por un método de clase que haga algo por el estilo:

Código PHP:
 if( Login::esValido($usuario$clave) ){
     
/* etc */
 


De todas formas, sugiero que (bueno, las buenas practicas lo dicen) que mantengas el foco en una acción simple en cada método y
no hagas métodos kilométricos.

Toma este criterio: "si tu método supera la visual de tu pantalla, algo está mal"
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 20/06/2008 a las 08:02