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

  1. Tenemos una base de datos llamada Example y una tabla llamada pioneer donde se almacenara los registros.
  2. 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

  1. Creamos una clase donde tendrá los mismos nombres de campos de la BD que sus atributos.
  2. Nombre del archivo sera pioneer.entidad.php
  3. 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

  1. El archivo se llamara pioneer.model.php
  2. 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.