Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/practicaTienda/login1»
De WikiEducator
(Página creada con «{{:Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/practicaTienda/nav}}») |
|||
(3 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{:Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/practicaTienda/nav}} | {{:Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/practicaTienda/nav}} | ||
+ | ===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 | ||
+ | [[Archivo:tiendaLogin.png]] | ||
+ | ;Descripcion de la imagen | ||
+ | #Login pedirá un usuario y contraseña para validar | ||
+ | #Al darle a validar, se validará el usuario contra la base de datos. | ||
+ | #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 | ||
+ | |||
+ | [[Archivo:TiendaLoginWeb.png]]<br /> | ||
+ | |||
+ | |||
+ | ;Descripción de la imagen | ||
+ | |||
+ | #El cliente invoca al fichero login.php | ||
+ | #Este método solicitará usuario y contraseña visualizando la plantilla login.tpl | ||
+ | #Cuando presionemos enviar validará contra la base de datos | ||
+ | #Si todo ok, mostrará la plantilla productos.tpl; | ||
+ | #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 | ||
+ | #DB.php (clase) | ||
+ | #login.php (lógica) | ||
+ | #productos.php (lógica sin contenido) | ||
+ | #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: | ||
+ | #conectar a la base de datos, | ||
+ | #realizar una consulta, | ||
+ | #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''''' | ||
+ | [[Archivo:DB.png]] | ||
+ | *El código de esta clase | ||
+ | <source lang=php> | ||
+ | <?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 | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | ;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 | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | ;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 | ||
+ | <source lang=php> | ||
+ | <!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> | ||
+ | |||
+ | </source> | ||
+ | ;productos.php | ||
+ | *En esta primera parte del proyecto estos ficheros solo contienen información básica, | ||
+ | *Se implementará en la segunda parte del desarrollo | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | ;producto.tpl | ||
+ | *La plantilla del producto | ||
+ | *Simplemente una página de información de lo que hará | ||
+ | <source lang = php> | ||
+ | <!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> | ||
+ | </source> | ||
+ | *Este código puede verse funcionado | ||
+ | http://manuel.infenlaces.com/distancia/practicas/practica_12_tienda/1%20Tienda%20Login/login.php |
Última revisión de 08:21 28 abr 2020
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
- Descripcion de la imagen
- Login pedirá un usuario y contraseña para validar
- Al darle a validar, se validará el usuario contra la base de datos.
- 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
- Descripción de la imagen
- El cliente invoca al fichero login.php
- Este método solicitará usuario y contraseña visualizando la plantilla login.tpl
- Cuando presionemos enviar validará contra la base de datos
- Si todo ok, mostrará la plantilla productos.tpl;
- 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
- DB.php (clase)
- login.php (lógica)
- productos.php (lógica sin contenido)
- 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:
- conectar a la base de datos,
- realizar una consulta,
- 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
- 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