Crud PHP y MySQL

Stay hungry, stay foolish

Steve Jobs

En esta ocasión les traigo un crud con las operaciones básicas crear, listar, modificar y eliminar, en el lenguaje de programación php y como gestor de base de datos MySQl o pueden usar MariaDB, ya que utilizamos el driver MySQLi y es soportado por ambos gestores de base de datos.

Realizaremos un crud de personal, nuestro ejemplo quedara así:

crudphpmysqli

Utilizamos:

  • Lenguaje de programación PHP
  • Gestor de base de datos MYSQL
  • Driver MYSQLi
  • Bootstrap para el diseño
  • DataTables | Table plug-in for jQuery para mostrar la información pagina y poder ordenarla

Primero creamos la base de datos con las siguientes tablas:

POR ERROR EN LA TABLA PERSONAL SU ID ES AUTOINCREMENTAL PARA QUE FUNCIONE CORRECTAMENTE AL INSERTAR UN NUEVO REGISTRO (AUTO_INCREMENT) COMO SE MUESTRA EN EL SIGUIENTE SCRIPT

CREATE TABLE `personal` (
 `id` int(5) NOT NULL AUTO_INCREMENT,
 `nombre` varchar(200) NOT NULL,
 `sexo` varchar(20) NOT NULL,
 `telefono` varchar(25) NOT NULL,
 `direccion` text NOT NULL,
 `correo` varchar(200) NOT NULL,
 `idpais` int(11) NOT NULL,
 `idcargo` int(11) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `pais` (
 `id` int(5) NOT NULL,
 `pais` varchar(250) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `cargos` (
 `id` int(11) NOT NULL,
 `cargo` varchar(250) NOT NULL
) ENGINE=InnoDB;

Luegro creamos los siguientes archivos y carpetas:

index.php que muestra la información contenida en la tabla personal.


<?php
require("class/personal.php");
include "header.php";
?>
<p>
<a href="create.php" class="btn btn-primary btn-md"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Agregar Personal</a><br/>
</p>
<table id="ghatable" class="display table table-bordered table-stripe" cellspacing="0" width="100%">
<thead>
<tr>
<th>ID</th>
<th>NOMBRE</th>
<th>SEXO</th>
<th>TELEFONO</th>
<th>DIRECCION</th>
<th>CORREO</th>
<th>PAIS</th>
<th>CARGO</th>
<th>MODIFICAR</th>
<th>ELIMINAR</th>
</tr>
</thead>
<tbody>
<?php
$objpersonal = new Personal();
$personal = $objpersonal->personal();
if(sizeof($personal) > 0){
foreach ($personal as $row){
?>
<tr>
<td><?php echo $row['id'] ?></td>
<td><?php echo $row['nombre'] ?></td>
<td><?php echo $row['sexo'] ?></td>
<td><?php echo $row['telefono'] ?></td>
<td><?php echo $row['direccion'] ?></td>
<td><?php echo $row['correo'] ?></td>
<td><?php echo $row['pais'] ?></td>
<td><?php echo $row['cargo'] ?></td>
<td>
<a href="update.php?u=<?php echo $row['id'] ?>"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Editar</a>
</td>
<td>
<a onclick="return confirm('Desea eliminar el registro')" href="delete.php?d=<?php echo $row['id'] ?>"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Eliminar</a>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
<?php
include "footer.php";
?>

create.php crea los registros del personal.

<?php
require("class/personal.php");
require("class/paises.php");
require("class/cargos.php");
include "header.php";
?>
<a href="index.php" class="btn btn-success btn-md"><span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span> Regresar</a>
<?php
if(isset($_POST['bts'])){
 if($_POST['nm']!=null && $_POST['gd']!=null && $_POST['tl']!=null && $_POST['ar']!=null){
 $paginas = new Personal();
 $paginas->add();
 ?>
 <p></p>
 <div class="alert alert-success alert-dismissible" role="alert">
 <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
 <strong>Listo!</strong> Registro guardado con exito... <a href="index.php">Home</a>.
 </div>
 <?php

 } else{
 ?>
 <p></p>
 <div class="alert alert-warning alert-dismissible" role="alert">
 <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
 <strong>Error!</strong> Formulario vacio.
 </div>
 <?php
 }
}
?>

<p><br/></p>
<div class="panel panel-default">
 <div class="panel-body">

 <form role="form" method="post">
 <div class="form-group">
 <label for="nm">Nombre</label>
 <input type="text" class="form-control" name="nm" id="nm" placeholder="Nombre completo">
 </div>
 <div class="form-group">
 <label for="gd">Sexo</label>
 <select class="form-control" id="gd" name="gd">
 <option value="0">-- seleccionar sexo --</option>
 <option value="Hombre">Hombre</option>
 <option value="Mujer">Mujer</option>
 </select>
 </div>
 <div class="form-group">
 <label for="tl">Telefono</label>
 <input type="text" class="form-control" name="tl" id="tl" placeholder="Telefono">
 </div>
 <div class="form-group">
 <label for="ar">Dirección</label>
 <textarea class="form-control" name="ar" id="ar" rows="3"></textarea>
 </div>
 <div class="form-group">
 <label for="email">Correo</label>
 <input type="email" class="form-control" name="email" id="email" placeholder="Correo electronico">
 </div>
 <div class="form-group">
 <label for="pais">Pais</label>
 <select class="form-control" name="pais">
 <option value="0">-- seleccionar pais --</option>
 <?php
 $objPaises = new Paises();
 $paises = $objPaises->paises();
 foreach ($paises as $pais) {
 ?>
 <option value="<?php echo $pais["id"]; ?>"><?php echo $pais["pais"]; ?></option>
 <?php
 }
 ?>
 </select>
 </div>

 <div class="form-group">
 <label for="cargo">Cargo</label>
 <select class="form-control" name="cargo">
 <option value="0">-- seleccionar cargo --</option>
 <?php
 $objC = new Cargos();
 $cargos = $objC->cargos();
 foreach ($cargos as $cargo) {
 ?>
 <option value="<?php echo $cargo["id"]; ?>"><?php echo $cargo["cargo"]; ?></option>
 <?php
 }
 ?>
 </select>
 </div>
 <button type="submit" name="bts" class="btn btn-default">Guardar</button>
 </form>
 <?php
 include "footer.php";
 ?>

update.php actualiza la información del personal.

<?php
require("class/personal.php");
require("class/paises.php");
require("class/cargos.php");
include "header.php";
if(isset($_GET['u'])){
 if(isset($_POST['bts'])){
 $per = new Personal();
 $per->update();
 }


 $obj = new Personal();
 $persona = $obj->personalPorId($_GET["u"]);
 ?>
 <a href="index.php" class="btn btn-success btn-md"><span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span> Regresar</a>
 <p><br/></p>
 <div class="panel panel-default">
 <div class="panel-body">

 <form role="form" method="post">
 <input type="hidden" value="<?php echo $persona[0]['id']; ?>" name="id"/>
 <div class="form-group">
 <label for="nm">Nombre</label>
 <input type="text" class="form-control" name="nm" id="nm" value="<?php echo $persona[0]['nombre']; ?>">
 </div>
 <div class="form-group">
 <label for="gd">Sexo</label>
 <select class="form-control" id="gd" name="gd">
 <?php
 if($persona[0]['sexo'] == "Hombre"){
 ?>
 <option value="Hombre" selected="selected">Hombre</option>
 <?php
 }else{
 ?>
 <option value="Hombre">Hombre</option>
 <?php
 }

 if($persona[0]['sexo'] == "Mujer"){
 ?>
 <option value="Mujer" selected="selected">Mujer</option>
 <?php
 }else{
 ?>
 <option value="Mujer">Mujer</option>
 <?php
 }
 ?>

 </select>
 </div>
 <div class="form-group">
 <label for="tl">Telefono</label>
 <input type="text" class="form-control" name="tl" id="tl" value="<?php echo $persona[0]['telefono']; ?>">
 </div>
 <div class="form-group">
 <label for="ar">Direccion</label>
 <textarea class="form-control" name="ar" id="ar" rows="3"><?php echo $persona[0]['direccion']; ?></textarea>
 </div>
 <div class="form-group">
 <label for="email">Correo</label>
 <input type="email" class="form-control" name="email" id="email" value="<?php echo $persona[0]['correo']; ?>">
 </div>

 <div class="form-group">
 <label for="pais">Pais</label>
 <select class="form-control" name="pais">
 <?php
 $objPaises = new Paises();
 $paises = $objPaises->paises();
 foreach ($paises as $pais) {
 if($persona[0]["idpais"] == $pais["id"]){
 ?>
 <option value="<?php echo $pais["id"]; ?>" selected="selected"><?php echo $pais["pais"]; ?></option>
 <?php
 }else{
 ?>
 <option value="<?php echo $pais["id"]; ?>"><?php echo $pais["pais"]; ?></option>
 <?php
 }
 
 }
 ?>
 </select>
 </div>

 <div class="form-group">
 <label for="cargo">Cargo</label>
 <select class="form-control" name="cargo">
 <option value="0">-- seleccionar cargo --</option>
 <?php
 $objC = new Cargos();
 $cargos = $objC->cargos();
 foreach ($cargos as $cargo) {
 if($persona[0]["idcargo"] == $cargo["id"]){
 ?>
 <option value="<?php echo $cargo["id"]; ?>" selected="selected"><?php echo $cargo["cargo"]; ?></option>
 <?php
 }else{
 ?>
 <option value="<?php echo $cargo["id"]; ?>"><?php echo $cargo["cargo"]; ?></option>
 <?php
 }

 
 }
 ?>
 </select>
 </div>
 <button type="submit" name="bts" class="btn btn-default">Actualizar</button>
 </form>
 <?php
 }
 include "footer.php";
 ?>

delete.php elimina los registros.

<?php
require("class/personal.php");
if(isset($_GET['d'])){
 $persona = new Personal();
 $persona->delete($_GET["d"]);
}
?>

despues creamos la carpeta class que contiene las siguientes clases.

conexion.php conecta con la base de datos.

<?php
Class Conexion {

 public function conectar(){
 $mysqli = new mysqli('localhost','root','','datos',3306);

 if ($mysqli->connect_errno)
 header('Location: offline.html');

 $mysqli->set_charset('utf8');

 return $mysqli;
 }

 public function comillas_inteligentes($valor) {
 // Retirar las barras
 if (get_magic_quotes_gpc()) {
 $valor = stripslashes($valor);
 }
 // Colocar comillas si no es entero
 if (!is_numeric($valor)) {
 $valor = "'" . $this->mysqli->real_escape_string($valor) . "'";
 }
 return $valor;
 }

}

personal.php realiza las operaciones basicas del crud en especifico del personal.

<?php
require_once 'conexion.php';
class Personal extends Conexion {

 public $mysqli;
 public $data;

 public function __construct() {
 $this->mysqli = parent::conectar();
 $this->data = array();
 }

 //*****************************************************************
 // LISTAMOS TODO EL PERSONAL
 //*****************************************************************
 public function personal(){
 $resultado = $this->mysqli->query("SELECT
 personal.id,
 personal.nombre,
 personal.sexo,
 personal.telefono,
 personal.direccion,
 personal.correo,
 pais.pais,
 cargos.cargo
 FROM
 personal
 INNER JOIN pais ON personal.idpais = pais.id
 INNER JOIN cargos ON personal.idcargo = cargos.id
 ");

 while( $fila = $resultado->fetch_assoc() ){
 $data[] = $fila;
 }

 if (isset($data)) {
 return $data; 
 } 
 
 }
 //*****************************************************************
 // AGREGAR PERSONAL
 //*****************************************************************
 public function add() {

 $consulta = sprintf(
 "INSERT INTO personal values(null, %s, %s, %s, %s, %s, %s, %s);", 
 parent::comillas_inteligentes($_POST['nm']), 
 parent::comillas_inteligentes($_POST['gd']), 
 parent::comillas_inteligentes($_POST['tl']),
 parent::comillas_inteligentes($_POST['ar']),
 parent::comillas_inteligentes($_POST['email']),
 parent::comillas_inteligentes($_POST['pais']),
 parent::comillas_inteligentes($_POST['cargo'])
 );
 $this->mysqli->query($consulta);

 }
 //*****************************************************************
 // MODIFICAR PERSONAL
 //*****************************************************************
 public function update() {

 $consulta = sprintf(
 "UPDATE personal SET
 nombre = %s,
 sexo = %s,
 telefono = %s,
 direccion = %s,
 correo = %s,
 idpais = %s,
 idcargo = %s
 WHERE
 id = %s;", 
 parent::comillas_inteligentes($_POST['nm']), 
 parent::comillas_inteligentes($_POST['gd']),
 parent::comillas_inteligentes($_POST['tl']),
 parent::comillas_inteligentes($_POST['ar']),
 parent::comillas_inteligentes($_POST['email']),
 parent::comillas_inteligentes($_POST['pais']),
 parent::comillas_inteligentes($_POST['cargo']),
 parent::comillas_inteligentes($_POST['id'])
 );

 $this->mysqli->query($consulta);

 echo "<script type='text/javascript'>window.location='index.php';</script>";
 }
 //*****************************************************************
 // ELIMINAR PRODUCTO
 //*****************************************************************
 public function delete($id) {
 $query = sprintf(
 "DELETE FROM personal WHERE id = %s;", 
 parent::comillas_inteligentes($id)
 );
 $this->mysqli->query($query);
 header("Location: index.php");
 }
 //*****************************************************************
 // PERSONAL POR ID
 //*****************************************************************
 public function personalPorId($id){
 $consulta = sprintf("SELECT
 personal.id,
 personal.nombre,
 personal.sexo,
 personal.telefono,
 personal.direccion,
 personal.correo,
 personal.idpais,
 personal.idcargo,
 pais.pais
 FROM
 personal
 INNER JOIN pais ON personal.idpais = pais.id
 INNER JOIN cargos ON personal.idcargo = cargos.id
 WHERE
 personal.id = %s", 
 parent::comillas_inteligentes($id)
 );

 $resultado = $this->mysqli->query($consulta);

 while( $fila = $resultado->fetch_assoc() ){
 $data[] = $fila;
 }

 if (isset($data)) {
 return $data; 
 }
 }

}
?>

paises.php lista los paises del personal.

<?php
require_once 'conexion.php';
class Paises extends Conexion {

 public $mysqli;
 public $data;

 public function __construct() {
 $this->mysqli = parent::conectar();
 $this->data = array();
 }

 //*****************************************************************
 // LISTAMOS DE PAISES
 //*****************************************************************
 public function paises(){
 $resultado = $this->mysqli->query("SELECT * FROM pais");

 while( $fila = $resultado->fetch_assoc() ){
 $data[] = $fila;
 }

 if (isset($data)) {
 return $data; 
 } 
 
 }

}

?>

cargos.php lista los cargos o puestos que hay en la empresa que simulamos.

<?php
require_once 'conexion.php';
class Cargos extends Conexion {

 public $mysqli;
 public $data;

 public function __construct() {
 $this->mysqli = parent::conectar();
 $this->data = array();
 }

 //*****************************************************************
 // LISTADO DE CARGOS
 //*****************************************************************
 public function cargos(){
 $resultado = $this->mysqli->query("SELECT * FROM cargos");

 while( $fila = $resultado->fetch_assoc() ){
 $data[] = $fila;
 }

 if (isset($data)) {
 return $data; 
 } 
 
 }

}

?>