Click here to load reader
Upload
jose-luis-orosco-marcos
View
369
Download
4
Embed Size (px)
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