Bueno, rápidamente te puedo decir que tu constructor está "muy gordo", hace demasiadas cosas.
Algunas sugerencias:
- Cambia el constructor por __construct
- No pongas en minúsculas la clave, ya que si alguien pone claves combinadas no funcionarán luego.
- Separa las operaciones de persistencia en métodos aparte y no lo hagas en el mismo constructor.
- Es medio redundante retornar false y además retornar un objeto del mismo tipo con un atributo en false
- Cierra siempre con llaves, no deje el if sin llaves.
- Cambia "coneccion" por "conexión".
- Usa nombres coherentes para las instancias (no "obj")
- 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"