Sistema de autentifican de usuario en PHP

Archivo config.inc.php


<?php 

//los atributos de abajo son los que tenemos que modificar
    $username = "Usuario";
    $password = "Contraseña";
    $host = "localhost";
    $dbname = "NombreBBDD";


    // Para saber más de que se trata UTF-8 visita http://en.wikipedia.org/wiki/UTF-8 
    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
     
    try 
    { 
        $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
    } 
    catch(PDOException $ex) 
    { 
        die("Failed to connect to the database: " . $ex->getMessage()); 
    } 
     
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
     
    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
    { 
        function undo_magic_quotes_gpc(&$array) 
        { 
            foreach($array as &$value) 
            { 
                if(is_array($value)) 
                { 
                    undo_magic_quotes_gpc($value); 
                } 
                else 
                { 
                    $value = stripslashes($value); 
                } 
            } 
        } 
     
        undo_magic_quotes_gpc($_POST); 
        undo_magic_quotes_gpc($_GET); 
        undo_magic_quotes_gpc($_COOKIE); 
    } 
    header('Content-Type: text/html; charset=utf-8'); 
    session_start(); 


?>

archivo login.php


<?php

//carga y se conecta a la base de datos
require("config.inc.php");

if (!empty($_POST)) {
    //obteneos los usuarios respecto a la usuario que llega por parametro
    $query = " 
            SELECT 
                id, 
                username, 
                password,
Tipo
            FROM users 
            WHERE 
                username = :username 
        ";
    
    $query_params = array(
        ':username' => $_POST['username']
    );
    
    try {
        $stmt   = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch (PDOException $ex) {
        //para testear pueden utilizar lo de abajo
        //die("la consulta murio " . $ex->getMessage());
        
        $response["success"] = 0;
        $response["message"] = "Problema con la base de datos, vuelve a intetarlo";
        die(json_encode($response));
        
    }
    
    //la variable a continuación nos permitirará determinar 
    //si es o no la información correcta
    //la inicializamos en "false"
    $validated_info = false;
    
    //bamos a buscar a todas las filas
    $row = $stmt->fetch();
    if ($row) {
        //si el password viene encryptado debemos desencryptarlo acá
        // ++ DESCRYPTAR ++//

        //encaso que no lo este, solo comparamos como acontinuación
        if ($_POST['password'] === $row['password']) {
            $login_ok = true;
        }
    }
    
    // así como nos logueamos en facebook, twitter etc!
    // Otherwise, we display a login failed message and show the login form again 
    if ($login_ok) {
  if($row['Tipo']==1){
$response["success"] = 1;
  }else if($row['Tipo']==2){
$response["success"] = 2;
  }else if($row['Tipo']==3){
$response["success"] = 3;
  }else if($row['Tipo']==4){
$response["success"] = 4;
  }else{
$response["success"] = 0;
  }
        
        $response["message"] = "Login correcto!";
        die(json_encode($response));
    } else {
        $response["success"] = 0;
        $response["message"] = "Login INCORRECTO";
        die(json_encode($response));
    }
} else {
?>
<h1>Login</h1> 
<form action="login.php" method="post"> 
   Username:<br /> 
   <input type="text" name="username" placeholder="username" /> 
   <br /><br /> 
   Password:<br /> 
   <input type="password" name="password" placeholder="password" value="" /> 
   <br /><br /> 
   <input type="submit" value="Login" /> 
</form> 
<a href="register.php">Register</a>
<?php
}

?> 

Descargas

COOL en Clips

Ejercicio 1

Crea una clase ASIGNATURA con los slots:
Nombre
Curso
Aula
Número de alumnos
Temario: por defecto valdrá “introducción”

Ejercicio 2

Crea cuatro instancias de la clase Asignatura con los siguientes valores:
INCO, 3, 201, 70
IA, 3, 201, 40
Redes, 2, 4, 100
IS, 2, 5, 150
Seguridad, 2, 5, 90

Ejercicio 3

Crea una regla que elimine de la base de hechos las asignaturas con más de 110 alumnos.

Ejercicio 4

Crea una regla que imprima en pantalla el nombre y aula de las asignaturas de tercer curso con más de 50 alumnos.

Ejercicio 5

Crea un manejador que añada conceptos al temario, los que se le pasen como argumento. Crea una regla que añada a las asignaturas de segundo curso los conceptos “desarrollo”, “historia” y “conclusiones”, haciendo uso de dicho manejador.

;ejercicio 1
(defclass ASIGNATURA (is-a USER)(role concrete)
(pattern-match reactive)
(slot nombre (create-accessor read-write))
(slot curso (create-accessor read-write))
(slot aula (create-accessor read-write))
(slot numeroAlumnos (create-accessor read-write))
(multislot Temario (create-accessor read-write) (default introduccion))
)

;ejercicio 2
(definstances GENTE
(INCO of ASIGNATURA (nombre INCO) (curso 3) (aula 201) (numeroAlumnos 70))
(IA of ASIGNATURA (nombre IA) (curso 3) (aula 4) (numeroAlumnos 40))
(Redes of ASIGNATURA (nombre Redes) (curso 2) (aula 150) (numeroAlumnos 100))
(IS of ASIGNATURA (nombre IS) (curso 2) (aula 5) (numeroAlumnos 150))
(Seguridad of ASIGNATURA (nombre Seguridad) (curso 2) (aula 5) (numeroAlumnos 90))
)

;ejercicio 3
(defrule eliminar-mas-cientodiez
?asignatura <- (object (is-a ASIGNATURA) (numeroAlumnos ?numero))
(test (> ?numero 110))
=>
(unmake-instance ?asignatura)
;(send (instance-name ?asignatura) delete)
)



;ejercicio 4
(defrule mas-de-cincuenta
(object (is-a ASIGNATURA) (nombre ?nombre) (aula ?aula) (numeroAlumnos ?alumnos))
(test (> ?alumnos 50))
=>
(printout t ?nombre " en el aula: " ?aula crlf)
)



;ejercicio 5
(defmessage-handler ASIGNATURA mas-temarios
($?valores)
(bind ?self:Temario $?self:Temario $?valores)
)

(defmessage-handler ASIGNATURA impr
()
(printout t ?self:Temario crlf)
)
(defmessage-handler ASIGNATURA impr before
()
(printout t "Empezando..." crlf)
)
(defmessage-handler ASIGNATURA impr after
()
(printout t "Acabado!!!" crlf crlf)
)

(defrule aniadir-asignaturas
?asignatura <- (object (is-a ASIGNATURA) (curso ?curso))
(test (= ?curso 2))
=>
(send (instance-name ?asignatura) mas-temarios desarrollo historia conclusiones)
(send (instance-name ?asignatura) impr)

)




Ejercicio 1 

Dada la clase PAIS con los atributos “nombre”, “pib”(producto interior bruto), “ayudas_a_percibir” y las instancias con los siguientes valores para sus atributos:
nombre espagna, pib 10
nombre francia, pib 12
nombre alemania, pib 13
nombre inglaterra, pib 14
nombre italia, pib 6
nombre belgica, pib 7
nombre holanda, pib 5

a) Realizar el manejador de mensajes adecuado para que al ejecutar la siguiente instrucción:
(send UNPAIS decrementar cantidad). El atributo ayudas_a_percibir del objeto UNPAIS se decremente en el valor indicado en cantidad.

b) Se desea que mediante el uso de una consulta (es decir, no es válido utilizar el emparejamiento de patrones) y la implementación de una única regla se realice lo siguiente:
Para cada país que tenga un pib superior al pib español:

  1. Mostrarlo por pantalla con el siguiente formato: Nombre_Pais tiene un pib superior a España
  2. Para dicho país se reducirá su atributo ayudas_a_percibir el valor de su pib. Para ello se utilizará el manejador creado en el apartado a.




(defclass PAIS (is-a USER)
(role concrete)
(pattern-match reactive)
(slot nombre (create-accessor read-write))
(slot pib (create-accessor read-write))
(slot ayudas_a_percibir (create-accessor read-write) (default 0))
)

(definstances Paises
(pais1 of PAIS (nombre espagna) (pib 10))
(pais2 of PAIS (nombre francia) (pib 12))
(pais3 of PAIS (nombre alemania) (pib 13))
(pais4 of PAIS (nombre inglaterra) (pib 14))
(pais5 of PAIS (nombre italia) (pib 6))
(pais6 of PAIS (nombre belgica) (pib 7))
(pais7 of PAIS (nombre holanda) (pib 5))
)

;AAAAAAAAAAAAAAAA
(defmessage-handler PAIS decrementar
(?valores)
(bind ?self:ayudas_a_percibir (- ?self:ayudas_a_percibir ?valores))
)

(object (is-a PAIS) (nombre espagna) (pib ?pibEspagna))




;BBBBBBBBBBBBBBBBBBBB
(defrule aniadir-asignaturas
?asignatura <- (object (is-a PAIS) (nombre ?nombre) (pib ?pibOtro))
(test (> ?pibOtro ?pibEspagna))
=>
(send (instance-name ?asignatura) decrementar ?pibOtro)
(printout t ?nombre " tiene un PIB superior a Espagna" crlf)
)



Ejercicio 2

Dada la siguiente clase:

(defclass VUELO (is-a USER)(role abstract)
(slot altitud (create-accessor read-write))
(slot latitud (access read-only))
(slot longitud (create-accessor read-write))
(slot direccion (access read-only))
(slot velocidad (create-accessor read-write))
(multislot ruta (default Leon Madrid Barcelona)))

a) Definir dos subclases de VUELO, denominadas VUELOCOMERCIAL y VUELODECARGA con los siguientes atributos:
VUELOCOMERCIAL: numero_pasajeros
VUELODECARGA: maxima_carga
Crear un objeto, denominado 212, de la clase VUELOCOMERCIAL con los siguientes valores: altitud=2500 y numero_pasajeros=24.

b)Realizar el manejador de mensajes adecuado para que al ejecutar la siguiente instrucción
(send [212] marcar-ruta Paris Roma) al atributo ruta se le añadan, a los destinos ya existentes del vuelo comercial 212, los indicados en la instrucción y se imprima en pantalla la nueva ruta del vuelo.
El manejador creado tiene que servir para modificar rutas de objetos tanto de la clase VUELOCOMERCIAL como de la clase VUELODECARGA.



(defclass VUELO (is-a USER)(role abstract) (slot altitud (create-accessor read-write)) (slot latitud (access read-only)) (slot longitud (create-accessor read-write)) (slot direccion (access read-only)) (slot velocidad (create-accessor read-write)) (multislot ruta (create-accessor read-write)(default Leon Madrid Barcelona)) ) ;AAAAAAAAAAAAAAAAAAAAAAAAA (defclass VUELOCOMERCIAL (is-a VUELO)(role concrete) (slot numero_pasajeros (create-accessor read-write)) ) (defclass VUELODECARGA (is-a VUELO)(role concrete) (slot maxima_carga (create-accessor read-write)) ) (definstance in ([212] of VUELOCOMERCIAL (numero_pasajeros 24) (altitud 2500)) ) ;BBBBBBBBBBBBBBBBBBBBBBBBB (defmessage-handler VUELO marcar-ruta ($?valores) (bind ?self:ruta $?self:ruta $?valores) (printout t "Nueva ruta de vuelo: " ?self:ruta crlf) )



DESCARGAR