Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/practicaTienda/login1

De WikiEducator
Saltar a: navegación, buscar


Probando el ejemplo

  • Puedes ver esta parte del ejercicio ejecutándose en la web:
http://manuel.infenlaces.com/distancia/practicas/practica_12_tienda/1%20Tienda%20Login/login.php

La lógica

  • Generaremos el fichero login.php
  • Su función es autentificar al usuario de la aplicación web.
  • En la base de datos se ha creado el usuario dwes y de password abc123.
  • Todos los usuarios de la aplicación deberán autentificarse utilizando esta página antes de poder acceder al resto de páginas.
  • La siguiente imagen muestra un caso de uso de este escenario

TiendaLogin.png

Descripcion de la imagen
  1. Login pedirá un usuario y contraseña para validar
  2. Al darle a validar, se validará el usuario contra la base de datos.
  3. Si no es ok mostrará un error y seguiremos en login.php, si es correcto iremos a productos.php
  • Para este escenario necesitaremos los siguientes ficheros según vemos en la imagen

TiendaLoginWeb.png


Descripción de la imagen
  1. El cliente invoca al fichero login.php
  2. Este método solicitará usuario y contraseña visualizando la plantilla login.tpl
  3. Cuando presionemos enviar validará contra la base de datos
  4. Si todo ok, mostrará la plantilla productos.tpl;
  5. Si no se ha validado, mostrará la plantilla login.tpl con el error encontrado
  • Para implementar esta parte del proyecto necesitaremos desarrollar los siguientes ficheros
  1. DB.php (clase)
  2. login.php (lógica)
  3. productos.php (lógica sin contenido)
  4. login.tpl (presentación).

Desarrollando el código

DB.php
  • Esta es una clase que mantendrá todo el acceso a la base de datos
  • De momento solo necesito un método de validar el usuario
  • Este método tendrá que hacer 3 cosas:
  1. conectar a la base de datos,
  2. realizar una consulta,
  3. verificar que la consulta contenga un registro (OK! Usuario existe), o no (Usuario no registrado)
  • Seguramente otros métodos tengan que hacer estas acciones (conectar, ejecutar consultas, …), por lo que estas acciones será métodos privados de la clase.
  • Para poder pasar parámetros a la hora de ejecutar la consutla usaremos PDO en lugar de mysqli

DB.png

  • El código de esta clase
<?php
 
 
class DB {
    //atributo privado de conexión
    private static $conexion;
 
 
 
 
 
  /*======================conectar()======================================
     conecta con la base de datos, usando PDO
     da valor al atributo privado y estático $conexion de la clase
     En caso de no conectarse aborta la app y muestra un mensaje
   ****************************************************************************************** */
    private static function conectar(){
}
 
 
/*======================ejecutaConsulta ($sql,$valores)======================================
    Accion: Ejecuta una consulta preparada con los valores de los parámetros de la consulta preparada
    Parámetros: $sql es la consulta preparada y parametrizada
                $valores es un array asociativo con los valores de los distintos 
                          parámetros de la consulta anterior
    Retorna =La consulta despues de ejecutarla, o null si no la ha podido ejecutaqr
             en caso de no ejecutarla da un mensaje              
 * ***********************************************************************************************/
    protected static function ejecutaConsulta($sql,$valores) {
 
    }
 
 
 /*======================verificaCliente ($nombre,$pass)======================================
    Accion: verifica si un nombre y pass son contenidos en la base de datos
    Parámetros: $nombre es el nombre de usuario
                $pass es la password para ese nombre
    Retorna  true o false según se haya podido o no validar
  * Recordar que la pass está cifrada con md5 en la base de datos      
 * ***********************************************************************************************/   
    public static function verificaCliente($nombre, $pass) {
    }
}//End de la clase DB.php
 
?>
login.php
  • Este fichero implementa las acciones especificadas anteriormente
  • Cargamos la librería de smarty
  • Realizamos la lógica
  • Exportamos la variable $error para la plantilla
  • Visualizamos la plantilla
  • El código se exporta a continaución
<?php
 
 
?>
login.tpl
  • La plantilla tiene la parte de html
  • Lo único que visualiza es el código de error en caso de que lo hubiera
<!DOCTYPE html>
{*Plantilla para login. Es invocada desde login.php. solo visualiza el $error del php*}
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Login Tienda Web con Plantillas</title>
  <link href="tienda.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div id='login'>
    <form action='login.php' method='post'>
    <fieldset >
        <legend>Login</legend>
        {*si la variable error tiene algún valor se visualiza*}
        <div><span class='error'>{$error}</span></div>
        <div class='campo'>
            <label for='usuario' >Usuario:</label><br/>
            <input type='text' name='usuario' id='usuario' maxlength="50" /><br/>
        </div>
        <div class='campo'>
            <label for='password' >Contraseña:</label><br/>
            <input type='password' name='password' id='password' maxlength="50" /><br/>
        </div>
 
        <div class='campo'>
            <input type='submit' name='enviar' value='Enviar' />
        </div>
    </fieldset>
    </form>
    </div>
</body>
</html>
productos.php
  • En esta primera parte del proyecto estos ficheros solo contienen información básica,
  • Se implementará en la segunda parte del desarrollo
<?php
 
 
?>
producto.tpl
  • La plantilla del producto
  • Simplemente una página de información de lo que hará
<!DOCTYPE html>
{*Platilla para visualizar los productos, se invoca desde productos.php*}
<html>
    <head>
        <title>práctica de tienda página de productos </title>
        <meta charset="UTF-8">
    </head>
    <body>
       {*primero solo visualizaremos que el usuario está conectado*}
       <h1>Bienvenido a esta página {$usuario}</h1>
       <hr/>
       <h3>En breve visualizará una lista de productos para hacer su compra</h3>
 
    </body>
</html>
  • Este código puede verse funcionado
http://manuel.infenlaces.com/distancia/practicas/practica_12_tienda/1%20Tienda%20Login/login.php