Mantenimiento de Usuarios usando MVC ver1

Preview:

DESCRIPTION

Realizando paginas web para el mantenimiento de usuarios aplicando el patrón MVC. Es un inicio, algo simpre y facil de entender.

Citation preview

MVC

Mantenimiento de Usuarios

Funciones:

Registrar

Buscar

Listar

Editar

Eliminar

Directorio

Vista

Index.php

<?php

require_once('Vista/Menu.php');

if(isset($_GET['action']))

{

if($_GET['action'] == 'agregar')

{

require 'Vista/Registrar.php';

}

elseif($_GET['action'] == 'buscar')

{

require 'Vista/Buscar.php';

}

}

?>

Menu.php

<div id="menu">

<ul>

<li><a href="../index.php">Inicio</a></li>

<li><a href="../index.php?action=agregar">Registrar</a></li>

<li><a href="../index.php?action=buscar">Buscar</a></li>

</ul>

</div>

Registrar.php

<h1>Registrar Usuario</h1>

<form id="registrar_usuario" action="../Controlador/UsuarioControlador.php"

method="POST">

<div>E-mail</div>

<div><input type="text" name="email" id="email"></div>

<div>Clave</div>

<div><input type="password" name="clave" id="clave"></div>

<div>Nombre</div>

<div><input type="text" name="nombre" id="nombre"></div>

<div>Apellido</div>

<div><input type="text" name="apellido" id="apellido"></div>

<div><input type="submit" name="accion" id="enviar" value="Registrar"></div>

</form>

Buscar.php

<h1>Buscar</h1>

<form id="buscar_usuario" action="../Controlador/UsuarioControlador.php" method="POST">

<div>Nombre</div>

<div><input type="text" name="nombre" id="nombre"></div>

<div><input type="submit" name="accion" id="enviar" value="Buscar"></div>

</form>

Listar.php

<h1>Listado de Usuarios</h1>

<table>

<tr>

<th>Nombre</th>

<th>Apellidos</th>

<th>Mail</th>

<th colspan="2">Accion</th>

</tr>

<?php foreach ($usuario->Usuarios as $u){?>

<tr>

<td><?php echo $u['nombre'] ?></td>

<td><?php echo $u['apellido'] ?></td>

<td><?php echo $u['email'] ?></td>

<form id="editar_usuario" action="../Controlador/UsuarioControlador.php"

method="POST">

<input type="hidden" name="id" id="accion" value="<?=$u['id']?>">

<td><input type="submit" name="accion" id="accion" value="Editar"></td>

<form id="editar_usuario" action="../Controlador/UsuarioControlador.php"

method="POST">

<input type="hidden" name="id" id="accion" value="<?=$u['id']?>">

<td><input type="submit" name="accion" id="accion" value="Eliminar"></td>

</tr>

</form>

<?php } ?>

</table>

Actualizar.php

<h1>Editar Usuario</h1>

<form id="actualizar_usuario" action="../Controlador/UsuarioControlador.php"

method="POST">

<input type="hidden" name="id" id="accion" value="{id}">

<div>E-mail</div>

<div><input type="text" name="email" id="email" value="{email}"></div>

<div>Nombre</div>

<div><input type="text" name="nombre" id="nombre" value="{nombre}"></div>

<div>Apellido</div>

<div><input type="text" name="apellido" id="apellido" value="{apellido}"></div>

<div><input type="submit" name="accion" id="enviar" value="Actualizar"></div>

</form>

Mensaje.php

<div><a href="../Index.php">Index.php</a></div>

<div>{Mensaje}</div>

Controlador

UsuarioControlador.php

<?php

require_once('../Modelo/UsuarioModelo.php');

Manejador();

$accion=$_POST['accion'];

if($accion=="Registrar")

{

$vista = file_get_contents('../Vista/Mensaje.php');

$usuario = new UsuarioModel();

function Manejador()

{

$usuario->set(DatosUsuario());

$valor = $usuario->mensaje;

$vista = str_replace('{Mensaje}', $valor, $vista);

print($vista);

}elseif($accion=="Buscar")

{

$usuario = new UsuarioModel();

$usuario->getByName($_POST['nombre']);

require_once('../Vista/Menu.php');

require_once('../Vista/Buscar.php');

require_once('../Vista/Listar.php');

}elseif($accion=="Editar")

{

$vista = file_get_contents('../Vista/Actualizar.php');

$usuario = new UsuarioModel();

$usuario->get($_POST['id']);

foreach ($usuario as $clave=>$valor)

{

$vista = str_replace('{'.$clave.'}', $valor, $vista);

}

print($vista);

}elseif($accion=="Actualizar")

{

$vista = file_get_contents('../Vista/Mensaje.php');

$usuario = new UsuarioModel();

$usuario->edit(DatosUsuario());

$valor = $usuario->mensaje;

$vista = str_replace('{Mensaje}', $valor, $vista);

require_once('../Vista/Menu.php');

print($vista);

}elseif($accion=="Eliminar")

{

$vista = file_get_contents('../Vista/Mensaje.php');

$usuario = new UsuarioModel();

$usuario->delete($_POST['id']);

$valor = $usuario->mensaje;

$vista = str_replace('{Mensaje}', $valor, $vista);

print($vista);

}

}

function DatosUsuario()

{

$user_data = array();

if($_POST)

{

if(array_key_exists('id', $_POST)) {

$user_data['id'] = $_POST['id'];

}

if(array_key_exists('nombre', $_POST)) {

$user_data['nombre'] = $_POST['nombre'];

}

if(array_key_exists('apellido', $_POST)) {

$user_data['apellido'] = $_POST['apellido'];

}

if(array_key_exists('email', $_POST)) {

$user_data['email'] = $_POST['email'];

}

if(array_key_exists('clave', $_POST)) {

$user_data['clave'] = $_POST['clave'];

}

} else if($_GET) {

if(array_key_exists('email', $_GET)) {

$user_data = $_GET['email'];

}

}

return $user_data;

}

?>

Modelo

DataBase.php

<?php

abstract class DataBase {

private static $db_host = 'localhost';

private static $db_user = 'mvc';

private static $db_pass = 'mvc';

protected $db_name = 'mvc';

protected $query;

protected $rows = array();

private $conn;

public $mensaje = 'Hecho';

# métodos abstractos para ABM de clases que hereden

abstract protected function get();

abstract protected function set();

abstract protected function edit();

abstract protected function delete();

# los siguientes métodos pueden definirse con exactitud y

# no son abstractos

# Conectar a la base de datos

private function open_connection()

{

$this->conn = new mysqli(self::$db_host, self::$db_user,

self::$db_pass, $this->db_name);

}

# Desconectar la base de datos

private function close_connection()

{

$this->conn->close();

}

# Ejecutar un query simple del tipo INSERT, DELETE, UPDATE

protected function execute_single_query()

{

if($_POST)

{

$this->open_connection();

$this->conn->query($this->query);

$this->close_connection();

} else {

$this->mensaje = 'Metodo no permitido';

}

}

# Traer resultados de una consulta en un Array

protected function get_results_from_query()

{

$this->open_connection();

$result = $this->conn->query($this->query);

while ($this->rows[] = $result->fetch_assoc());

$result->close();

$this->close_connection();

array_pop($this->rows);

}

}

?>

UsuarioModelo.php

<?php

# Importar modelo de abstracción de base de datos

require_once('DataBase.php');

class UsuarioModel extends DataBase {

############################### PROPIEDADES ################################

public $nombre;

public $apellido;

public $email;

private $clave;

public $id;

public $Usuarios;

# Traer datos de un usuario

public function get($id='')

{

if($id != '')

{

$this->query = "

SELECT id, nombre, apellido, email, clave

FROM usuarios

WHERE id = $id

";

$this->get_results_from_query();

}

if(count($this->rows) == 1)

{

foreach ($this->rows[0] as $propiedad=>$valor)

{

$this->$propiedad = $valor;

}

}

}

public function getByName($nombre='')

{

$this->query = "

SELECT id, nombre, apellido, email, clave

FROM usuarios

WHERE nombre LIKE '$nombre%'

";

$this->get_results_from_query();

$this->Usuarios = $this->rows;

}

# Crear un nuevo usuario

public function set($user_data=array())

{

if(array_key_exists('email', $user_data))

{

foreach ($user_data as $campo=>$valor)

{

$$campo = $valor;

}

$this->query = "

INSERT INTO usuarios

(nombre, apellido, email, clave)

VALUES

('$nombre', '$apellido', '$email', '$clave')

";

$this->execute_single_query();

$this->mensaje = 'Usuario agregado exitosamente';

} else {

$this->mensaje = 'No se ha agregado al usuario';

}

}

# Modificar un usuario

public function edit($user_data=array())

{

foreach ($user_data as $campo=>$valor)

{

$$campo = $valor;

}

$this->query = "

UPDATE usuarios

SET nombre='$nombre',

apellido='$apellido',

email='$email',

WHERE id = '$id'

";

$this->execute_single_query();

$this->mensaje = 'Usuario modificado';

}

# Eliminar un usuario

public function delete($id='')

{

$this->query = "

DELETE FROM usuarios

WHERE id = '$id'

";

$this->execute_single_query();

$this->mensaje = 'Usuario eliminado';

}

# Método constructor

function __construct()

{

$this->db_name = 'mvc';

}

# Método destructor del objeto

function __destruct()

{

unset($this);

}

}

?>

Creacion de Tabla

CREATE TABLE usuarios (id INT(11) NOT NULL AUTO_INCREMENT, nombre VARCHAR(100), apellido

VARCHAR(100), email VARCHAR(100), clave VARCHAR(25), PRIMARY KEY(id))

Referencias

http://www.etnassoft.com/biblioteca/poo-y-mvc-en-php/

http://librosweb.es/symfony_1_2/capitulo_2/el_patron_mvc.html

http://www.jc-mouse.net/proyectos/mvc-modelo-vista-y-controlador-en-php