Crear una aplicación CRUD con PHP usando POO
En este tutorial les mostrare como hacer una aplicación CRUD simple con PHP usando POO (Programación Orientada a Objetos), aprenderás sobre las operaciones básica de un CRUD con los datos de un cliente.
CRUD significa crear, leer, actualizar y eliminar. Create significa insertar datos en la base de datos mediante una instrucción. Read significa leer datos de la base de datos utilizando la instrucción SQL SELECT. Update significa actualizar registros utilizando la instrucción SQL UPDATE. Finalmente, Delete significa eliminar datos de la base de datos utilizando la instrucción SQL DELETE.
Para este ejemplo voy a a crear cinco archivos PHP, cada archivo PHP tendrá una función específica. Usando estos cinco archivos, insertaré datos en la base de datos (C) , leeré datos de la base de datos (R) , actualizaré datos en la base de datos (U) , borraré datos de la base de datos (D) .
He nombrado los archivo con una terminología simple
- C – Crear : create.php – Para insertar datos en la base de datos (INSERT SQL Query) .
- R – Read : index.php – Para leer datos de la base de datos (SELECT SQL Query) .
- U – Update : upate.php – Para actualizar los datos en la base de datos (UPDATE SQL Query) .
- D – Eliminar : delete.php – Para borrar datos en la base de datos (DELETE SQL Query).
- El archivo database.php, contiene las instrucciones para conectarse a la base de datos, leer los datos, crear datos, actualizar y eliminar datos.
1. Crear una tabla en la base de datos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
-- phpMyAdmin SQL Dump -- version 4.5.1 -- http://www.phpmyadmin.net -- -- Servidor: 127.0.0.1 -- Tiempo de generación: 27-01-2018 a las 18:59:13 -- Versión del servidor: 10.1.19-MariaDB -- Versión de PHP: 7.0.13 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Base de datos: `tuto_poo` -- -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `clientes` -- CREATE TABLE `clientes` ( `id` int(11) NOT NULL, `nombres` varchar(100) NOT NULL, `apellidos` varchar(100) NOT NULL, `telefono` varchar(15) NOT NULL, `direccion` varchar(255) NOT NULL, `correo_electronico` varchar(64) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Volcado de datos para la tabla `clientes` -- INSERT INTO `clientes` (`id`, `nombres`, `apellidos`, `telefono`, `direccion`, `correo_electronico`) VALUES (1, 'John', 'Doe', '504 7070-7070', 'San Salvador', 'john@gmail.com'), (2, 'Peter ', 'Parker', '504 5050-5050', 'San Jose', 'peter@gmail.com'), (3, 'Fran ', 'Wilson', '504 8999-5550', 'Conacastes 3301 AV', 'fran@gmail.com'); -- -- Índices para tablas volcadas -- -- -- Indices de la tabla `clientes` -- ALTER TABLE `clientes` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT de las tablas volcadas -- -- -- AUTO_INCREMENT de la tabla `clientes` -- ALTER TABLE `clientes` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
2. Crear la clase de base de datos
Para las operaciones CRUD POO, se ha creado clase de base de datos con esta clase de base de datos. Haré todas las operaciones CRUD.
Primero estoy creando una clase de base de datos y creando una instancia del objeto con la nueva base de datos. Después de eso, cada vez que incluyamos este archivo en otros archivos PHP que sean index.php, view.php, update.php, delete.php, podremos usar el objeto de la base de datos. Veremos cómo podemos usar este objeto de base de datos en los siguientes pasos.
Aquí está el código para crear una clase de base de datos y crear una instancia del objeto de la base de datos.
Guarda este archivo como database.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php /*------------------------- Autor: Obed Alvarado Web: obedalvarado.pw Mail: info@obedalvarado.pw ---------------------------*/ class Database{ private $con; private $dbhost="localhost"; private $dbuser="root"; private $dbpass=""; private $dbname="tuto_poo"; function __construct(){ $this->connect_db(); } public function connect_db(){ $this->con = mysqli_connect($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname); if(mysqli_connect_error()){ die("Conexión a la base de datos falló " . mysqli_connect_error() . mysqli_connect_errno()); } } } ?> |
Para conectarme a la base de datos, se ha creado el método llamado “connect_db“, y cuando queremos conectarnos a la base de datos, solo debemos hacer un include del archivo database.php y realizar una instancia de la clase Database. automaticamente nos conectamos a la base de datos ya que se esta usando un método constructor, el cual inicializa la conexión con nuestra base de datos.
3. Crear el formulario HTML para guardar los datos (create.php)
Aquí he creado un formulario HTML simple con pocos campos de entrada para insertar datos en la base de datos y también usaremos este mismo formulario en el archivo update.php.
Este formulario contiene 5 campos de entrada como so son: nombres, apellidos, teléfono, dirección y correo electrónico. Aquí está el código del formulario HTML, guárdalo como create.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>CRUD con PHP usando Programación Orientada a Objetos</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round|Open+Sans"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="css/custom.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-wrapper"> <div class="table-title"> <div class="row"> <div class="col-sm-8"><h2>Agregar <b>Cliente</b></h2></div> <div class="col-sm-4"> <a href="index.php" class="btn btn-info add-new"><i class="fa fa-arrow-left"></i> Regresar</a> </div> </div> </div> <div class="row"> <form method="post"> <div class="col-md-6"> <label>Nombres:</label> <input type="text" name="nombres" id="nombres" class='form-control' maxlength="100" required > </div> <div class="col-md-6"> <label>Apellidos:</label> <input type="text" name="apellidos" id="apellidos" class='form-control' maxlength="100" required> </div> <div class="col-md-12"> <label>Dirección:</label> <textarea name="direccion" id="direccion" class='form-control' maxlength="255" required></textarea> </div> <div class="col-md-6"> <label>Teléfono:</label> <input type="text" name="telefono" id="telefono" class='form-control' maxlength="15" required > </div> <div class="col-md-6"> <label>Correo electrónico:</label> <input type="email" name="correo_electronico" id="correo_electronico" class='form-control' maxlength="64" required> </div> <div class="col-md-12 pull-right"> <hr> <button type="submit" class="btn btn-success">Guardar datos</button> </div> </form> </div> </div> </div> </body> </html> |
Vista web del formulario:
4. INSERTAR datos en la base de datos
En el archivo anterior hemos creado el formulario para la captura de datos, pero para hacer este formulario funcional debemos hacer los siguiente:
- Edita el archivo database.php y agrega los metodos siguientes:
1234public function sanitize($var){$return = mysqli_real_escape_string($this->con, $var);return $return;}
El método anterior se encarga de limpiar las variables antes de poder registrar en la base de datos, esto se hace para evitar posibles inyecciones SQL en la base de datos.
123456789public function create($nombres,$apellidos,$telefono,$direccion,$correo_electronico){$sql = "INSERT INTO `clientes` (nombres, apellidos, telefono, direccion, correo_electronico) VALUES ('$nombres', '$apellidos', '$telefono', '$direccion', '$correo_electronico')";$res = mysqli_query($this->con, $sql);if($res){return true;}else{return false;}}
El método “create” se encargará de guardar los datos en nuestra base de datos mysql. - Ahora vamos agregar las siguientes instrucciones PHP a nuestro archivo create.php
123456789101112131415161718192021222324252627<?phpinclude ("database.php");$clientes= new Database();if(isset($_POST) && !empty($_POST)){$nombres = $clientes->sanitize($_POST['nombres']);$apellidos = $clientes->sanitize($_POST['apellidos']);$telefono = $clientes->sanitize($_POST['telefono']);$direccion = $clientes->sanitize($_POST['direccion']);$correo_electronico = $clientes->sanitize($_POST['correo_electronico']);$res = $clientes->create($nombres, $apellidos, $telefono, $direccion, $correo_electronico);if($res){$message= "Datos insertados con éxito";$class="alert alert-success";}else{$message="No se pudieron insertar los datos";$class="alert alert-danger";}?><div class="<?php echo $class?>"><?php echo $message;?></div><?php}?>
A continuación el código completo de como debería de quedar nuestro archivo “create.php”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>CRUD con PHP usando Programación Orientada a Objetos</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round|Open+Sans"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="css/custom.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-wrapper"> <div class="table-title"> <div class="row"> <div class="col-sm-8"><h2>Agregar <b>Cliente</b></h2></div> <div class="col-sm-4"> <a href="index.php" class="btn btn-info add-new"><i class="fa fa-arrow-left"></i> Regresar</a> </div> </div> </div> <?php include ("database.php"); $clientes= new Database(); if(isset($_POST) && !empty($_POST)){ $nombres = $clientes->sanitize($_POST['nombres']); $apellidos = $clientes->sanitize($_POST['apellidos']); $telefono = $clientes->sanitize($_POST['telefono']); $direccion = $clientes->sanitize($_POST['direccion']); $correo_electronico = $clientes->sanitize($_POST['correo_electronico']); $res = $clientes->create($nombres, $apellidos, $telefono, $direccion, $correo_electronico); if($res){ $message= "Datos insertados con éxito"; $class="alert alert-success"; }else{ $message="No se pudieron insertar los datos"; $class="alert alert-danger"; } ?> <div class="<?php echo $class?>"> <?php echo $message;?> </div> <?php } ?> <div class="row"> <form method="post"> <div class="col-md-6"> <label>Nombres:</label> <input type="text" name="nombres" id="nombres" class='form-control' maxlength="100" required > </div> <div class="col-md-6"> <label>Apellidos:</label> <input type="text" name="apellidos" id="apellidos" class='form-control' maxlength="100" required> </div> <div class="col-md-12"> <label>Dirección:</label> <textarea name="direccion" id="direccion" class='form-control' maxlength="255" required></textarea> </div> <div class="col-md-6"> <label>Teléfono:</label> <input type="text" name="telefono" id="telefono" class='form-control' maxlength="15" required > </div> <div class="col-md-6"> <label>Correo electrónico:</label> <input type="email" name="correo_electronico" id="correo_electronico" class='form-control' maxlength="64" required> </div> <div class="col-md-12 pull-right"> <hr> <button type="submit" class="btn btn-success">Guardar datos</button> </div> </form> </div> </div> </div> </body> </html> |
5. Crear archivo HTML index.php
La siguiente es la operación de lectura, en este archivo index.php, mostraré todos los registros obtenidos de la base de datos en un buen formato de tabla HTML. Aquí está el código para la tabla HTML, guárdalo como index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>CRUD con PHP usando Programación Orientada a Objetos</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round|Open+Sans"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="css/custom.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-wrapper"> <div class="table-title"> <div class="row"> <div class="col-sm-8"><h2>Listado de <b>Clientes</b></h2></div> <div class="col-sm-4"> <a href="create.php" class="btn btn-info add-new"><i class="fa fa-plus"></i> Agregar cliente</a> </div> </div> </div> <table class="table table-bordered"> <thead> <tr> <th>Nombres</th> <th>Teléfono</th> <th>Dirección</th> <th>E-mail</th> <th>Acciones</th> </tr> </thead> <tbody> </tbody> </table> </div> </div> </body> </html> |
6. Obtener datos en el archivo index.php
Incluye el archivo de clase de base de datos database.php en el archivo index.php para instanciar a la clase de base de datos.
1 2 3 4 |
<?php include ('database.php'); $clientes = new Database(); ?> |
A continuación, para leer los datos de la base de datos, debemos crear un método en la clase Database. Aquí se van a seleccionar todos los registros de nuestra tabla, devolverá un conjunto de resultados. Con este resultado establecido en index.php, usaremos un ciclo while para recorrer los resultados. Aquí está el código para el método de lectura en database.php
1 2 3 4 5 |
public function read(){ $sql = "SELECT * FROM clientes"; $res = mysqli_query($this->con, $sql); return $res; } |
Agrega este código al archivo index.php
1 2 3 4 5 |
<?php include ('database.php'); $clientes = new Database(); $listado=$clientes->read(); ?> |
Y también este otro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php while ($row=mysqli_fetch_object($listado)){ $id=$row->id; $nombres=$row->nombres." ".$row->apellidos; $telefono=$row->telefono; $direccion=$row->direccion; $email=$row->correo_electronico; ?> <tr> <td><?php echo $nombres;?></td> <td><?php echo $telefono;?></td> <td><?php echo $direccion;?></td> <td><?php echo $email;?></td> <td> <a href="update.php?id=<?php echo $id;?>" class="edit" title="Editar" data-toggle="tooltip"><i class="material-icons"></i></a> <a href="delete.php?id=<?php echo $id;?>" class="delete" title="Eliminar" data-toggle="tooltip"><i class="material-icons"></i></a> </td> </tr> <?php } ?> |
Después de agregar el código anterior, si vuelves a cargar el archivo index.php. Puede ver todos los registros de la tabla de la base de datos. Vista web archivo index.php
7. Crea el archivo HTML update.php
Para el archivo update.php, voy a usar el mismo código HTML que estoy usando en el archivo create.php. Porque, en la operación UPDATE, obtendremos los datos de la base de datos para una fila específica basada en el id. Luego, el usuario editará los valores y enviará el formulario luego de que ese script actualice los valores en la base de datos.
En el archivo anterior index.php, ya he creado enlaces para archivos: update.php y delete.php que también pasan valores de identificación (id) a la base de datos. Si alguien hace clic en los enlaces, estos id se pasarán al siguiente archivos respectivos, ya sea update.php o delete.php. Aquí está el código HTML para el archivo update.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>CRUD con PHP usando Programación Orientada a Objetos</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round|Open+Sans"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="css/custom.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-wrapper"> <div class="table-title"> <div class="row"> <div class="col-sm-8"><h2>Editar <b>Cliente</b></h2></div> <div class="col-sm-4"> <a href="index.php" class="btn btn-info add-new"><i class="fa fa-arrow-left"></i> Regresar</a> </div> </div> </div> <div class="row"> <form method="post"> <div class="col-md-6"> <label>Nombres:</label> <input type="text" name="nombres" id="nombres" class='form-control' maxlength="100" required value="<?php echo $datos_cliente->nombres;?>"> <input type="hidden" name="id_cliente" id="id_cliente" class='form-control' maxlength="100" value="<?php echo $datos_cliente->id;?>"> </div> <div class="col-md-6"> <label>Apellidos:</label> <input type="text" name="apellidos" id="apellidos" class='form-control' maxlength="100" required value="<?php echo $datos_cliente->apellidos;?>"> </div> <div class="col-md-12"> <label>Dirección:</label> <textarea name="direccion" id="direccion" class='form-control' maxlength="255" required><?php echo $datos_cliente->direccion;?></textarea> </div> <div class="col-md-6"> <label>Teléfono:</label> <input type="text" name="telefono" id="telefono" class='form-control' maxlength="15" required value="<?php echo $datos_cliente->telefono;?>"> </div> <div class="col-md-6"> <label>Correo electrónico:</label> <input type="email" name="correo_electronico" id="correo_electronico" class='form-control' maxlength="64" required value="<?php echo $datos_cliente->correo_electronico;?>"> </div> <div class="col-md-12 pull-right"> <hr> <button type="submit" class="btn btn-success">Actualizar datos</button> </div> </form> </div> </div> </div> </body> </html> |
Aquí en el archivo update.php, utilizaremos dos métodos que están leyendo y actualizando. En el método de lectura anterior, estamos obteniendo todos los registros. Ahora solo resta agregar dichos métodos a la clase Database
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function single_record($id){ $sql = "SELECT * FROM clientes where id='$id'"; $res = mysqli_query($this->con, $sql); $return = mysqli_fetch_object($res ); return $return ; } public function update($nombres,$apellidos,$telefono,$direccion,$correo_electronico, $id){ $sql = "UPDATE clientes SET nombres='$nombres', apellidos='$apellidos', telefono='$telefono', direccion='$direccion', correo_electronico='$correo_electronico' WHERE id=$id"; $res = mysqli_query($this->con, $sql); if($res){ return true; }else{ return false; } } |
El método single_record, se encarga de obtener 1 solo registro de nuestra base de datos; y el método update, se encarga de actualizar los registros en nuestra base de datos.
A continuación el código completo para nuestro archivo update.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
<?php if (isset($_GET['id'])){ $id=intval($_GET['id']); } else { header("location:index.php"); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>CRUD con PHP usando Programación Orientada a Objetos</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round|Open+Sans"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="css/custom.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-wrapper"> <div class="table-title"> <div class="row"> <div class="col-sm-8"><h2>Editar <b>Cliente</b></h2></div> <div class="col-sm-4"> <a href="index.php" class="btn btn-info add-new"><i class="fa fa-arrow-left"></i> Regresar</a> </div> </div> </div> <?php include ("database.php"); $clientes= new Database(); if(isset($_POST) && !empty($_POST)){ $nombres = $clientes->sanitize($_POST['nombres']); $apellidos = $clientes->sanitize($_POST['apellidos']); $telefono = $clientes->sanitize($_POST['telefono']); $direccion = $clientes->sanitize($_POST['direccion']); $correo_electronico = $clientes->sanitize($_POST['correo_electronico']); $id_cliente=intval($_POST['id_cliente']); $res = $clientes->update($nombres, $apellidos, $telefono, $direccion, $correo_electronico,$id_cliente); if($res){ $message= "Datos actualizados con éxito"; $class="alert alert-success"; }else{ $message="No se pudieron actualizar los datos"; $class="alert alert-danger"; } ?> <div class="<?php echo $class?>"> <?php echo $message;?> </div> <?php } $datos_cliente=$clientes->single_record($id); ?> <div class="row"> <form method="post"> <div class="col-md-6"> <label>Nombres:</label> <input type="text" name="nombres" id="nombres" class='form-control' maxlength="100" required value="<?php echo $datos_cliente->nombres;?>"> <input type="hidden" name="id_cliente" id="id_cliente" class='form-control' maxlength="100" value="<?php echo $datos_cliente->id;?>"> </div> <div class="col-md-6"> <label>Apellidos:</label> <input type="text" name="apellidos" id="apellidos" class='form-control' maxlength="100" required value="<?php echo $datos_cliente->apellidos;?>"> </div> <div class="col-md-12"> <label>Dirección:</label> <textarea name="direccion" id="direccion" class='form-control' maxlength="255" required><?php echo $datos_cliente->direccion;?></textarea> </div> <div class="col-md-6"> <label>Teléfono:</label> <input type="text" name="telefono" id="telefono" class='form-control' maxlength="15" required value="<?php echo $datos_cliente->telefono;?>"> </div> <div class="col-md-6"> <label>Correo electrónico:</label> <input type="email" name="correo_electronico" id="correo_electronico" class='form-control' maxlength="64" required value="<?php echo $datos_cliente->correo_electronico;?>"> </div> <div class="col-md-12 pull-right"> <hr> <button type="submit" class="btn btn-success">Actualizar datos</button> </div> </form> </div> </div> </div> </body> </html> |
Vista web del archivo update.php
8. Eliminar registros de la base de datos utilizando el archivo delete.php
A continuación, después de hacer clic en el botón Eliminar, el usuario será redirigido al archivo delete.php pasando con parámetro el id en la URL. Eliminaremos el registro en el archivo delete.php con la ayuda del método de eliminación.
Si el registro se elimina con éxito, redirigiremos al usuario al archivo index.php. De lo contrario, mostraremos un mensaje de error al usuario.
En primer lugar, crearé un método de eliminación, editando el archivo database.php. Si la consulta es exitosa, devolveremos true, sino devolveremos false.
1 2 3 4 5 6 7 8 9 |
public function delete($id){ $sql = "DELETE FROM clientes WHERE id=$id"; $res = mysqli_query($this->con, $sql); if($res){ return true; }else{ return false; } } |
En el archivo delete.php, se carga el archivo de clase de base de datos que es database.php. Solo incluye este archivo usando la función include de PHP. Lo siguiente es asignar la ID pasada a través de la URL a la variable de id. A continuación el código del archivo delete.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php if (isset($_GET['id'])){ include('database.php'); $cliente = new Database(); $id=intval($_GET['id']); $res = $cliente->delete($id); if($res){ header('location: index.php'); }else{ echo "Error al eliminar el registro"; } } ?> |
Curso: Introducción a la programación orientada a objetos con PHP
Código completo de todos los archivos
Si tiene algún problema para organizar las partes de código anteriores, puedes usar este código completo a continuación.
Hasta ahora, hemos creado con éxito la aplicación CRUD con PHP usando Programación Orientada a Objetos. Si tienes algún problema con el código, hazme saber a través un comentarios a continuación.