Vamos a realizar en este articulo un CRUD o también llamado mantenimiento basico con PHP y MySQL, para iniciarse en como podemos hacer esto de una manera sencilla.
Vamos utilizar la librería de PHP que es PDO, para hacer consultas mas seguras y con estilo de POO.
Archivos que necesitamos:
- Un archivo de una clase entidad donde los atributos tendrán el mismo nombre que los campos de la tabla de MySql.
- Una clase que se encarga de la lógica de negocio que tendrá funciones que hace querys a la base de datos.
- El archivo con la interfaz del formulario donde se ingresa los datos y también mostrara el listado de los registros.
Vamos a empezar
- Tenemos una base de datos llamada Example y una tabla llamada pioneer donde se almacenara los registros.
- Vamos a ver el query para crear la base de datos y la tabla.
-- creamos la base de datos
CREATE DATABASE Example;
--
-- Estructura de tabla para la tabla `pioneer`
--
CREATE TABLE IF NOT EXISTS `pioneer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(150) NOT NULL,
`descripcion` varchar(220) C NOT NULL,
`imagen` varchar(220) NOT NULL,
`fechaCreacion` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT AUTO_INCREMENT=3 ;
--
-- Volcado de datos para la tabla `pioneer`
--
INSERT INTO `pioneer` (`id`, `nombre`, `descripcion`, `imagen`, `fechaCreacion`) VALUES
(1, 'PIONER CÓDIGO TRIBUTARIO Y NORMAS RELACIONADAS', '', 'foto.png', '2016-10-11 00:00:00'),
(2, ' PIONER IMPUESTO A LA RENTA', '', 'foto.png', '2016-10-11 00:00:00');
Creamos el archivo entidad de Pioneer
- Creamos una clase donde tendrá los mismos nombres de campos de la BD que sus atributos.
- Nombre del archivo sera pioneer.entidad.php
- El nombre de la clase se llamara Pioneer
<?php
class Pioneer {
private $id;
private $nombre;
private $descripcion;
private $imagen;
private $fechaCreacion;
public function __GET($k){ return $this->$k; }
public function __SET($k, $v){ return $this->$k = $v; }
}
?>
Ahora la clase que tendrá la lógica de negocio
- El archivo se llamara pioneer.model.php
- La clase se llamara PioneerModel
<?php
class PioneerModel
{
private $pdo;
public function __CONSTRUCT()
{
try {
$this->pdo = new PDO('mysql:host=localhost;dbname=pioneer', 'root', '');
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e) {
die($e->getMessage());
}
}
public function Listar()
{
try {
$result = array();
$stm = $this->pdo->prepare("SELECT * FROM pioneer");
$stm->execute();
foreach ($stm->fetchAll(PDO::FETCH_OBJ) as $r) {
$alm = new Pioneer();
$alm->__SET('id', $r->id);
$alm->__SET('nombre', $r->nombre);
$alm->__SET('descripcion', $r->descripcion);
$alm->__SET('imagen', $r->imagen);
$alm->__SET('fechaCreacion', $r->fechaCreacion);
$result[] = $alm;
}
return $result;
}
catch (Exception $e) {
die($e->getMessage());
}
}
public function Obtener($id)
{
try {
$stm = $this->pdo->prepare("SELECT * FROM pioneer WHERE id = ?");
$stm->execute(array(
$id
));
$r = $stm->fetch(PDO::FETCH_OBJ);
$alm = new Pioneer();
$alm->__SET('id', $r->id);
$alm->__SET('nombre', $r->Nombre);
$alm->__SET('descripcion', $r->Apellido);
$alm->__SET('imagen', $r->Sexo);
$alm->__SET('fechaCreacion', $r->FechaNacimiento);
return $alm;
}
catch (Exception $e) {
die($e->getMessage());
}
}
public function Eliminar($id)
{
try {
$stm = $this->pdo->prepare("DELETE FROM pioneer WHERE id = ?");
$stm->execute(array(
$id
));
}
catch (Exception $e) {
die($e->getMessage());
}
}
public function Actualizar(Pioneer $data)
{
try {
$sql = "UPDATE pioneer SET
nombre = ?,
descripcion = ?,
imagen = ?,
fechaCreacion = ?
WHERE id = ?";
$this->pdo->prepare($sql)->execute(array(
$data->__GET('nombre'),
$data->__GET('descripcion'),
$data->__GET('imagen'),
$data->__GET('fechaCreacion'),
$data->__GET('id')
));
}
catch (Exception $e) {
die($e->getMessage());
}
}
public function Registrar(Pioneer $data)
{
try {
$sql = "INSERT INTO pioneer (nombre,descripcion,imagen,fechaCreacion)
VALUES (?, ?, ?, ?)";
$this->pdo->prepare($sql)->execute(array(
$data->__GET('nombre'),
$data->__GET('descripcion'),
$data->__GET('imagen'),
$data->__GET('fechaCreacion')
));
}
catch (Exception $e) {
die($e->getMessage());
}
}
}
?>
Por ultimo el archivo de la interfaz que responda las peticiones de usuario.
<?php
require_once 'pioneer.entidad.php';
require_once 'pioneer.model.php';
// Logica $alm = new Pioneer();
$model = new PioneerModel();
if (isset($_REQUEST['action']))
{
switch ($_REQUEST['action'])
{
case 'actualizar':
$alm->__SET('id', $_REQUEST['id']);
$alm->__SET('nombre', $_REQUEST['nombre']);
$alm->__SET('descripcion', $_REQUEST['descripcion']);
$alm->__SET('imagen', $_REQUEST['imagen']);
$alm->__SET('fechaCreacion', $_REQUEST['fechaCreacion']);
$model->Actualizar($alm);
header('Location: index.php');
break;
case 'registrar':
$alm->__SET('nombre', $_REQUEST['nombre']);
$alm->__SET('descripcion', $_REQUEST['descripcion']);
$alm->__SET('imagen', $_REQUEST['imagen']);
$alm->__SET('fechaCreacion', $_REQUEST['fechaCreacion']);
$model->Registrar($alm);
header('Location: index.php');
break;
case 'eliminar':
$model->Eliminar($_REQUEST['id']);
header('Location: index.php');
break;
case 'editar':
$alm = $model->Obtener($_REQUEST['id']);
break;
}
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<title>testing - mantenimiento</title>
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.5.0/pure-min.css">
</head>
<body style="padding:15px;">
<div class="pure-g">
<div class="pure-u-1-12">
<form action="?action=<?php echo $alm->id > 0 ? 'actualizar' : 'registrar'; ?>" method="post" class="pure-form pure-form-stacked" style="margin-bottom:30px;">
<input type="hidden" name="id" value="<?php echo $alm->__GET('id'); ?>" />
<table style="width:500px;">
<tr>
<th style="text-align:left;">Nombre</th>
<td><input type="text" name="Nombre" value="<?php echo $alm->__GET('nombre'); ?>" style="width:100%;" /></td>
</tr>
<tr>
<th style="text-align:left;">Descripcion</th>
<td><input type="text" name="Apellido" value="<?php echo $alm->__GET('descripcion'); ?>" style="width:100%;" /></td>
</tr>
<tr>
<th style="text-align:left;">Imagen</th>
<td>
<input type="file" name="Imagen" style="width:100%;" />
</td>
</tr>
<tr>
<th style="text-align:left;">Fecha</th>
<td><input type="text" name="FechaNacimiento" value="<?php echo $alm->__GET('fechaCreacion'); ?>" style="width:100%;" /></td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="pure-button pure-button-primary">Guardar</button>
</td>
</tr>
</table>
</form>
<table class="pure-table pure-table-horizontal">
<thead>
<tr>
<th style="text-align:left;">Nombre</th>
<th style="text-align:left;">Descripcion</th>
<th style="text-align:left;">Imagen</th>
<th style="text-align:left;">Registro</th>
<th></th>
<th></th>
</tr>
</thead>
<?php foreach ($model->Listar() as $r): ?>
<tr>
<td><?php echo $r->__GET('nombre'); ?></td>
<td><?php echo $r->__GET('descripcion'); ?></td>
<td><?php echo $r->__GET('imagen'); ?></td>
<td><?php echo $r->__GET('fechaCreacion'); ?></td>
<td>
<a href="?action=editar&id=<?php echo $r->id; ?>">Editar</a>
</td>
<td>
<a href="?action=eliminar&id=<?php echo $r->id; ?>">Eliminar</a>
</td>
</tr>
<?php
endforeach; ?>
</table>
</div>
</div>
</body>
</html>
Aquí una imagen como quedaría el resultado.
Agregue un comentario