Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Ayud con login POO

Estas en el tema de Ayud con login POO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Código: <?php class Conexion { private $cn; private $rs; private $servidor; private $usuario; private $password; private $bd; public function __construct($servidor= "localhost", $usuario = "root", $password ...
  #1 (permalink)  
Antiguo 08/06/2010, 10:23
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Ayud con login POO

Código:
<?php
class Conexion
{
    private $cn;
    private $rs;
    private $servidor;
    private $usuario;
    private $password;
    private $bd;

    public function __construct($servidor= "localhost", $usuario = "root", $password =   "220785", $bd = "sce")
    {
        $this->servidor=$servidor;
        $this->usuario=$usuario;
        $this->password=$password;
        $this->bd=$bd;
        $this->cn = new mysqli($servidor, $usuario, $password, $bd);
    }
    public function dbExecute($query)
    {
        $this->rs = $this->cn->query($query);                          
        return $this->rs;
    }
    public function getInsertedId()
    {
        return $this->cn->insert_id;
    }
    public function afectados()
    {
        return $this->cn->affected_rows;
    }  
    public function __destruct(){
        $this->cn;
    }
}
?>
Código:
<?php
class Login extends Conexion
{
    private $usuario;
    private $password;
    private $tipo_usuario;
    private $nivel;

    public function __construct()
    {
        parent::__construct();
        parent::__destruct();
    }
    public function comprueba($usuario, $password, $tipo_usuario)
    {
        $this->usuario = $this->clean($usuario);
        $this->password = $this->clean($password);
        $this->tipo_usuario = $tipo_usuario;

        if ($tipo_usuario == "Alumno") {
            $query = "SELECT id_alumno,password FROM alumnos WHERE id_alumno='$usuario' AND password='$password'";
        } elseif ($tipo_usuario == "Empleado") {
            $query = "SELECT id_empleado,password,nivel FROM empleados WHERE id_empleado='$usuario' AND password='$password'";
        }
        return $this->dbExecute($query);
    }
    public function sesion()
    {
        if ($this->tipo_usuario == "Alumno") {
            session_start();
            session_register("autentificado");
            $autentificado = "ALUMNO";
            $_SESSION["alumno"] = $this->usuario;
        } elseif ($this->tipo_usuario == "Empleado") {
            session_start();
            session_register("autentificado");
            $autentificado = "EMPLEADO";
            $_SESSION["empleado"] = $this->usuario;
        }
    }
    public function imprime()
    {
        if ($this->tipo_usuario == "Alumno") {
            session_start();
            session_register('alumno');
            $alumno=$_SESSION["alumno"];            
                return $alumno;
        } elseif ($this->tipo_usuario == "Empleado") {
            session_start();
            session_register('empleado');
            $empleado=$_SESSION["empleado"];
            return $empleado;
        }
    }    
    public function destruye()
    {
        session_start();
        $_SESSION = array();
        session_destroy();
    }
}
/*$login = new Login();
$rs = $login->comprueba(1, 1, "Empleado"); //Comprueba los datos del usuario
$row = $rs->fetch_assoc(); //Imprime los datos del usuario
$usuario = $row["id_empleado"];
$password = $row["password"];
$nivel = $row["nivel"];
$login->sesion(); //Crea la sesion dependiendo del tipo de usuario
$rs = $login->imprime(); //Imprime la variable de sesion creada
$login->destruye();//Destruye la sesion
*/
?>
Alguien me puede ayudar a construir la clase login para reconocer diferente tipos de usuarios, tengo dos tablas una de alumnos y otra de empleado, la de empleados maneja diferente tipo de empleados por puestos (administrativos, docentes, auxiliares, director), alguien puede ayudarme no se que mas hacer

Última edición por negro1985; 08/06/2010 a las 14:24
  #2 (permalink)  
Antiguo 08/06/2010, 12:41
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ayud con login POO

Ahora sucede lo siguiente cuando utilizo mi clase

<?php
include("clases/Cargar_clases.php");

$tipo_usuario=$_POST["tipo_usuario"];
$usuario=$_POST["usuario"];
$password=$_POST["password"];

if($tipo_usuario!="" ||$tipo_usuario!=null ||$usuario!="" || $usuario!=null ||$password!="" || $password!=null){
$login=new Login();
$rs=$login->comprueba($usuario,$password,$tipo_usuario);
$row=$rs->fetch_assoc();

if($tipo_usuario=="Alumno"){
$usuario1=$row["id_alumno"];
$password1=$row["password"];
if($usuario==$usuario1 && $password==$password1){
$login->sesion();
header("Location: alumno.php");
}else{
header("Location: index.php");
}
}elseif($tipo_usuario=="Empleado"){
$usuario1=$row["id_empleado"];
$password1=$row["password"];
if($usuario==$usuario1 && $password==$password1){
$login->sesion();
header("Location: empleado.php");
}else{
header("Location: index.php");
}
}else{
header("Location: index.php");
}
}else{
header("Location: index.php");
}
?>

Ahora no se como puedo recuperar la sesion creada con la clase se supone que deberia de ser asi

<?php
include("clases/Cargar_clases.php");
$login->imprime();
?>

Pero me marca el siguiente error

Fatal error: Call to a member function imprime() on a non-object in C:\AppServ\www\sce\empleado.php on line 7

Me pide que vuelva a instanciar la clase pero seria volver a proporcionar los datos ingresados y eso no es correcto, alguien puede ayudarme, por favor

Última edición por negro1985; 08/06/2010 a las 14:26
  #3 (permalink)  
Antiguo 08/06/2010, 15:39
 
Fecha de Ingreso: febrero-2009
Mensajes: 218
Antigüedad: 15 años, 1 mes
Puntos: 9
Respuesta: Ayud con login POO

Te está faltando instanciar la clase Login:
Código PHP:
Ver original
  1. $login=new Login();
  2. $login->imprime();
  #4 (permalink)  
Antiguo 08/06/2010, 16:19
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ayud con login POO

Cita:
Iniciado por fernandozunni Ver Mensaje
Te está faltando instanciar la clase Login:
Código PHP:
Ver original
  1. $login=new Login();
  2. $login->imprime();
Ya lo intente pero no imprime nada, el problema esta es que si instancio de esa manera tendria que llamar nuevamente al metodo comprueba para que me imprima la variable de sesion , por eso pido ayuda, aunque haciendolo de esta manera si imprime

Código:
<?php
session_start();
session_register('empleado');
$s=$_SESSION["empleado"];
echo $s;
?>
  #5 (permalink)  
Antiguo 08/06/2010, 17:09
 
Fecha de Ingreso: febrero-2009
Mensajes: 218
Antigüedad: 15 años, 1 mes
Puntos: 9
Respuesta: Ayud con login POO

Tu quieres que el método imprime te imprima en pantalla algo?
En ese caso no te imprime porque el metodo imprime() devuelve un "return", en ese caso tendrías que poner un "echo"
Código PHP:
Ver original
  1. $login=new Login();
  2. echo $login->imprime();
  #6 (permalink)  
Antiguo 08/06/2010, 17:39
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ayud con login POO

Cita:
Iniciado por fernandozunni Ver Mensaje
Tu quieres que el método imprime te imprima en pantalla algo?
En ese caso no te imprime porque el metodo imprime() devuelve un "return", en ese caso tendrías que poner un "echo"
Código PHP:
Ver original
  1. $login=new Login();
  2. echo $login->imprime();
Estoy de acuerdo contigo me devuelve un return la clase imprime, y si hago un echo a

$login->imprime();

pues no me imprime nada, lo que yo quiero es que me imprima la variable de sesion creada pero mediante el mismo metodo imprime, ya que en el se guarda la sesion creadaa, o que me recomiendas hacer
  #7 (permalink)  
Antiguo 08/06/2010, 20:34
 
Fecha de Ingreso: febrero-2009
Mensajes: 218
Antigüedad: 15 años, 1 mes
Puntos: 9
Respuesta: Ayud con login POO

Lo primero que haría es comprobar si la sesion esta vacia o no.
En alguna parte de la pagina hace un var_dump:

var_dump($_SESSION["alumno"]) o empleado segun corresponda.

Porque donde se carga el atributo usuario en la clase Login veo que utilizas un metodo "clean" que no lo veo por ningun lado.
Código PHP:
Ver original
  1. $this->usuario = $this->clean($usuario);
  2. $this->password = $this->clean($password); //el metodo clean no lo veo.
  #8 (permalink)  
Antiguo 08/06/2010, 20:56
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ayud con login POO

Cita:
Iniciado por fernandozunni Ver Mensaje
Lo primero que haría es comprobar si la sesion esta vacia o no.
En alguna parte de la pagina hace un var_dump:

var_dump($_SESSION["alumno"]) o empleado segun corresponda.

Porque donde se carga el atributo usuario en la clase Login veo que utilizas un metodo "clean" que no lo veo por ningun lado.
Código PHP:
Ver original
  1. $this->usuario = $this->clean($usuario);
  2. $this->password = $this->clean($password); //el metodo clean no lo veo.
Asi es, el metodo clean no lo puse porque fue una modificacion que hice pero weno, ya mi clase login hace lo que yo queria que hiciera, ya funciona acorde a mis necesidades, gracias por la ayuda
Código:
<?php
class Conexion
{
    private $cn;
    private $rs;
    private $servidor;
    private $usuario;
    private $password;
    private $bd;

    public function __construct($servidor = "localhost", $usuario = "root", $password =
        "220785", $bd = "sce")
    {
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->password = $password;
        $this->bd = $bd;
        $this->cn = new mysqli($servidor, $usuario, $password, $bd);
    }
    public function dbExecute($query)
    {
        $this->rs = $this->cn->query($query);
        return $this->rs;
    }
    public function getInsertedId()
    {
        return $this->cn->insert_id;
    }
    public function afectados()
    {
        return $this->cn->affected_rows;
    }
    protected function clean($value)
    {
        if (get_magic_quotes_gpc()) {
            $value = stripslashes($value);
        }
        $value = mysql_real_escape_string(htmlspecialchars($value));
        return $value;
    }
    public function __destruct()
    {
        $this->cn;
    }
}
?>
Código:
<?php
class Login extends Conexion
{
    private $usuario;
    private $password;
    private $tipo_usuario;
    private $nivel;

    public function __construct()
    {
        parent::__construct();
        parent::__destruct();
    }
    public function comprueba($usuario, $password, $tipo_usuario)
    {
        $this->usuario = $this->clean($usuario);
        $this->password = $this->clean($password);
        $this->tipo_usuario = $tipo_usuario;

        if ($tipo_usuario == "Alumno") {
            $query = "SELECT id_alumno,password FROM alumnos WHERE id_alumno='$usuario' AND password='$password'";
        } elseif ($tipo_usuario == "Empleado") {
            $query = "SELECT id_empleado,password,nivel FROM empleados WHERE id_empleado='$usuario' AND password='$password'";
        }
        return $this->dbExecute($query);
    }
    public function crear_sesion()
    {
        if ($this->tipo_usuario == "Alumno") {
            session_start();
            session_register("autentificado");
            $autentificado = "ALUMNO";
            $_SESSION["alumno"] = $this->usuario;
        } elseif ($this->tipo_usuario == "Empleado") {
            session_start();
            session_register("autentificado");
            $autentificado = "ADMINISTRADOR";
            $_SESSION["empleado"] = $this->usuario;
        } 
    }
    public function imprime($tipo_usuario)
    {       
        $this->tipo_usuario=$tipo_usuario;
        session_start();
        if ($tipo_usuario == "Alumno") {
            session_register('alumno');
            return $_SESSION["alumno"];            
        } elseif ($tipo_usuario == "Empleado") {            
            session_register('empleado');
            return $_SESSION["empleado"];                        
        }
    }
    public function proteger()
    {        
        session_start();
        if ($_SESSION["empleado"]!="") {            
            return $this->imprime("Empleado");
        }else{
            header("Location: index.php");
        }        
    }    
    public function cerrar_session()
    {
        session_start();
        $_SESSION = array();
        session_destroy();
        header("Location: index.php");
    }
}
?>

Última edición por negro1985; 08/06/2010 a las 21:04

Etiquetas: login, poo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:00.