Diferencia entre revisiones de «Usuario:ManuelRomero/php/smarty/login»

De WikiEducator
Saltar a: navegación, buscar
(Probando el ejemplo)
(Desarrollando el código)
Línea 131: Línea 131:
 
*Visualizamos  la plantilla
 
*Visualizamos  la plantilla
 
*El código se exporta a continuación
 
*El código se exporta a continuación
{{Plegable|hide|login.php
+
{{Plegable|hide|login.php|
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
Línea 143: Línea 143:
 
$smarty->config_dir = '/web/smarty/tiendaSmarty/configs/';
 
$smarty->config_dir = '/web/smarty/tiendaSmarty/configs/';
 
$smarty->cache_dir = '/web/smarty/tiendaSmarty/cache/';
 
$smarty->cache_dir = '/web/smarty/tiendaSmarty/cache/';
// Verificaamos si queremos validar los datos del formulario o solo visualizar el formulario (login.tpl)
+
// Verificaamos si queremos validar los datos  
 +
//del formulario o solo visualizar el formulario (login.tpl)
 
if (isset($_POST['enviar'])) {
 
if (isset($_POST['enviar'])) {
 
     $usuario =  $_POST['usuario'];
 
     $usuario =  $_POST['usuario'];
Línea 216: Línea 217:
 
// Recuperamos la información de la sesión
 
// Recuperamos la información de la sesión
 
session_start();
 
session_start();
// Y comprobamos que el usuario se haya autentificado, para evitar que puedan acceder directamente
+
// Y comprobamos que el usuario se haya autentificado,
 +
// para evitar que puedan acceder directamente
 
//a esta pagina sin pasar por el login
 
//a esta pagina sin pasar por el login
 
if (!isset($_SESSION['usuario']))  
 
if (!isset($_SESSION['usuario']))  

Revisión de 05:06 3 abr 2017



Probando el ejemplo

  • Puedes ver esta parte del ejercicio ejecutándose en la web:
http://manuel.infenlaces.com/dwes/tienda/TiendaLogin/login.php
Icon present.gif
Tip: usuario dwes y pass abc123.


Icon present.gif
Tip: Esta parte está toda resuelta aquí para dejar claro el uso de plantillas


La lógica

  • Generaremos el fichero login.php
  • Su función es autentificar al usuario de la aplicación web.
  • 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

Descripción 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

TiendaLogin2.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 (presentacion).

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
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 continuación
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
productos.php
  • En esta primera parte del proyecto estos ficheros solo contienen información básica,
  • Se implementará en la segunda parte del desarrollo

{{Plegable|hide|productos.php|

<?php
require_once('Smarty.class.php');
// Recuperamos la información de la sesión
session_start();
// Y comprobamos que el usuario se haya autentificado,
// para evitar que puedan acceder directamente
//a esta pagina sin pasar por el login
if (!isset($_SESSION['usuario'])) 
    die("Error - debe <a href='login.php'>identificarse</a>.<br />");
// Cargamos la librería de Smarty
$smarty = new Smarty;
 
$smarty->template_dir = '/web/smarty/tiendaSmarty/templates/';
$smarty->compile_dir = '/web/smarty/tiendaSmarty/templates_c/';
$smarty->config_dir = '/web/smarty/tiendaSmarty/configs/';
$smarty->cache_dir = '/web/smarty/tiendaSmarty/cache/';
//De momento solo visualizamos que el usuario 
$smarty->assign("usuario",$_SESSION['usuario']);
//Ahora mostramos la plantilla
$smarty->display("producto.tpl");
?>
producto.tpl
  • La plantilla del producto
  • Simplemente una página de información de lo que hará