DataTablesLenguaje PHP

Eliminar múltiples registros DataTables: Ejemplo completo

Eliminar múltiples registros DataTables. En este artículo veremos el uso de un plugin llamado DataTables. Por lo tanto, este plugin, es la forma más fácil de agregar paginación en la página con todas las características requeridas para el usuario final.

El objetivo del plugin DataTables es «Mejorar la accesibilidad de los datos en las tablas HTML«. Para lograr esto, debemos de vincular el plugin con HTML, PHP y MySQL.

Eliminar múltiples registros DataTables y PHP
Eliminar múltiples registros DataTables y PHP

Eliminar múltiples registros DataTables: Opciones DataTables

Las opciones que posee este plugin son los siguientes.

  • Tablas con elementos adicionales y opciones de personalización
  • Tablas con botones, casillas de verificación, iconos, paneles y más.
  • Tabla Responsiva.- Opciones avanzadas para tablas adaptables
  • Paginación.- Es un método de navegación simple que le permite dividir una gran cantidad de contenido dentro de las tablas en partes más pequeñas.
  • Búsqueda.- El cuadro de búsqueda permite la búsqueda súper rápida entre todos los datos de la tabla.

¿Cómo funciona el Script?

Principalmente como dice el título de la entrada «eliminación múltiple usando DataTables«, debemos de agregar el control “delete” y agregar el botón de eliminación con cada registro o agregar casillas de verificación y un solo botón de eliminación.

Este ejemplo muestra, cómo seleccionar una, varias y/o todas las casillas de verificación para después eliminarlo haciendo un clic en un botón usando DataTables con jQuery  y AJAX simultáneamente.

Estructura: Eliminar múltiples registros DataTables

El presente script posee la siguiente estructura de archivos incluido el plugin DataTables, veamos a continuación.

Eliminar multiples registros DataTables
Eliminar multiples registros DataTables

Eliminar múltiples registros DataTables: Procesos

Ahora vamos a proceder con los procesos y la implementación del Script «borrar múltiples registros DataTables«.

Primer paso: Crear tabla personal

Este ejercicio para que funcione correctamente necesita una base de datos en MySQL (php_datatables.sql), con su respectiva tabla que tendrá como nombre «personal«. Esta tabla, estará encargada de almacenar la información que posteriormente borraremos.

CREATE TABLE `personal` (
  `id` int(11) NOT NULL,
  `nom_personal` varchar(120) DEFAULT NULL,
  `salario` varchar(20) DEFAULT NULL,
  `genero` varchar(100) DEFAULT NULL,
  `ciudad` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `personal` (`id`, `nom_personal`, `salario`, `genero`, `ciudad`, `email`) VALUES
(1, 'Carlos', '30000', 'Hombre', 'Bogota', 'cvbcarlos@gmail.com'),
(2, 'Luis', '28000', 'Hombre', 'Lima', 'cvbluis@gmail.com'),
(3, 'Valeria', '35000', 'Mujer', 'Santiago', 'cvbvaleria@yahoo.com'),
(4, 'Raul', '25000', 'Hombre', 'Quito', 'cvbraul@gmail.com'),
(5, 'Soraida', '50000', 'Mujer', 'Asuncion', 'cvbsoraida@gmail.com'),
(6, 'Bianca', '48000', 'Mujer', 'Canarias', 'cvbbianca@yahoo.com'),
(7, 'Lucia', '36000', 'Mujer', 'Montevideo', 'cvblucia@gmail.com'),
(8, 'Anel', '32000', 'Mujer', 'La Paz', 'cvbanel@gmail.com'),
(10, 'Mario', '52000', 'Hombre', 'Ohio', 'cvbmario@yahoo.com'),
(11, 'Daniel', '48000', 'Hombre', 'Caracas', 'cvbdaniel@gmail.com'),
(12, 'Marilyn', '54000', 'Mujer', 'Miami', 'cvbmarilyn@gmail.com'),
(13, 'Martin', '43000', 'mujer', 'Caracas', 'cvbmartin@gmail.com'),
(14, 'Thalia', '32000', 'Mujer', 'Lima', 'cvbthalia@yahoo.com'),
(15, 'Karina', '45000', 'Mujer', 'Chicago', 'cvbkarina@gmail.com'),
(16, 'Maicol', '38000', 'Hombre', 'Los Angeles', 'cvbmaicol@gmail.com'),
(17, 'Rolando', '47000', 'Hombre', 'Bonton', 'cvbrolando@gmail.com'),
(18, 'Estela', '28000', 'Hombre', 'Miami', 'cvbestela@gmail.com'),
(20, 'Venancio', '34000', 'Hombre', 'Chicago', 'cvbvenancio@gmail.com'),
(21, 'Tania', '41000', 'Mujer', 'Ohio', 'cvbtania@gmail.com'),
(22, 'Maricela', '28000', 'Mujer', 'Boston', 'cvbmaricela@gmail.com'),
(23, 'Nikita', '46000', 'Mujer', 'Miami', 'cvbnikita@gmail.com');


ALTER TABLE `personal`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `personal`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=24;

Segundo paso: Configuración

Este paso es muy importante y trata acerca de la conexión de PHP hacia MySQL a través de un archivo llamado «config.php”. Sin embargo, este archivo contendrá las credenciales para realzar la conexión con MySQL.

Las variables que utilizan este fichero son:

a) La variable $host.- Sera el encargado de almacenar el nombre del servidor, en este caso «localhost«.

b) La variable $user.- El nombre de usuario de MySQL

c) La variable $password.- la contraseña asignada al usuario MySQL para acceder a la base de datos.

d) Variable $dbname.- El nombre de la base de datos.

Con estas cuatro variables  PHP se conectara a MySQL de manera satisfactoria usando la función «mysqli_connect«, veamos un ejemplo completo.

Código completo de «config.php»

<?php

$host = "localhost"; /* Nombre del servidor */
$user = "root"; /* Nombre de Usuario BD*/
$password = ""; /* Contraseña de la BD*/
$dbname = "php_datatables"; /* Nombre de la Base de datos */

// Realizamos la conexion a travez de la variable "$con", con 4 parametros.
$con = mysqli_connect($host, $user, $password,$dbname);

// Revisamos la conexión con MySQL
if (!$con) {
 die("Connection failed: " . mysqli_connect_error());
}
?>

Tercer paso: Incluir plugin DataTables

Este plugin cumple un papel importante en este script porque nos dará las facilidades para poder controlar una tabla y la información extraída de la base de datos. Ahora, veremos algunos pasos para implementar el plugin.

  • Descargar el plugin Datatables.
  • Incluir los archivos del plugin en la cabecera de nuestro fichero: datatables.min.css y datatables.min.js en la etiqueta <head>  y también incluya jQuery Library para trabajar sin problemas.
  • Además, podemos usar CDN para que funcione este plugin.

Ejemplo de implementación del plugin DataTables

<head>
<!-- Datatable CSS -->
<link href='//cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css' rel='stylesheet' type='text/css'>

<!-- jQuery Library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<!-- Datatable JS -->
<script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
</head>

Cuarto paso: Insertar identificadores

Para que el plugin funcione debemos de insertar identificadores y clases, ejemplo.

<table id="empTable" class="display dataTable">

Como apreciamos, vemos que se incorporó el ID llamado «empTable» y la clase CSS llamado «display dataTable«.

Agregar una fila de encabezado

En la última celda de encabezado, agregaremos la casilla de verificación con la opción «Seleccionar todos los registros» y un botón para eliminar los registros marcados previamente.

<!-- Table -->
<table id="empTable" class="display dataTable">
<thead>
<tr>
    <th>Nombre Personal</th>
    <th>Email</th>
    <th>Genero</th>
    <th>Salario</th>
    <th>Ciudad</th>
<th style="width:60px !important">
<div class="input-group"> <span class="input-group-addon"> 
<input type="checkbox" aria-label="Checkbox" class="checkall" id="checkall"> </span> 
<button type="button" id="delete_record" class="btn btn-danger">Borrar</button> </div>
</th>
</tr>
</thead>
</table>
<!--Fin Datables-->

Quinto paso: Iniciamos el Script

En este proceso ya es el uso de jQuery y Ajax que será el encargado de llamar al archivo PHP llamado «ajaxfile.php«. Sin embargo, al final este archivo PHP tendrá varias funciones como realizar consultas y eliminar registros seleccionados.

Crear la función checkcheckbox()

Esta función cuenta las casillas de verificación totales y las casillas de verificación marcadas con class ‘delete_check‘ en la página donde tenemos la tabla.

Botón Eliminar registros seleccionados

Este botón solo eliminara los registros seleccionados mediante la casilla de verificación.

var dataTable;
$(document).ready(function(){

   // Initialize datatable
   dataTable = $('#empTable').DataTable({
     'processing': true,
     'serverSide': true,
     'serverMethod': 'post',
     'ajax': {
        'url':'ajaxfile.php',
        'data': function(data){
           
           data.request = 1;

        }
     },
     'columns': [
        { data: 'emp_name' },
        { data: 'email' },
        { data: 'gender' },
        { data: 'salary' },
        { data: 'city' },
        { data: 'action' },
     ],
     'columnDefs': [ {
       'targets': [5], // column index (start from 0)
       'orderable': false, // set orderable false for selected columns
     }]
   });

   // Check all 
   $('#checkall').click(function(){
      if($(this).is(':checked')){
         $('.delete_check').prop('checked', true);
      }else{
         $('.delete_check').prop('checked', false);
      }
   });

   // Delete record
   $('#delete_record').click(function(){

      var deleteids_arr = [];
      // Read all checked checkboxes
      $("input:checkbox[class=delete_check]:checked").each(function () {
         deleteids_arr.push($(this).val());
      });

      // Check checkbox checked or not
      if(deleteids_arr.length > 0){

         // Confirm alert
         var confirmdelete = confirm("Do you really want to Delete records?");
         if (confirmdelete == true) {
            $.ajax({
               url: 'ajaxfile.php',
               type: 'post',
               data: {request: 2,deleteids_arr: deleteids_arr},
               success: function(response){
                  dataTable.ajax.reload();
               }
            });
         } 
      }
   });

});

// Checkbox checked
function checkcheckbox(){

   // Total checkboxes
   var length = $('.delete_check').length;

   // Total checked checkboxes
   var totalchecked = 0;
   $('.delete_check').each(function(){
      if($(this).is(':checked')){
         totalchecked+=1;
      }
   });

   // Checked unchecked checkbox
   if(totalchecked == length){
      $("#checkall").prop('checked', true);
   }else{
      $('#checkall').prop('checked', false);
   }
}

Sexto paso: Procesar la información

Para procesar la información necesitamos de un lenguaje con el PHP. Por lo tanto, en este paso usaremos un archivo llamado  «ajaxfile.php«, desde este archivo podemos controlar las solicitudes AJAX.

Usaremos el fichero «config.php» que contiene los datos de conexión con el servidor.

Código completo

<?php
include 'config.php';

$request = $_POST['request'];

// Datatable data
if($request == 1){
    ## Read value
    $draw = $_POST['draw'];
    $row = $_POST['start'];
    $rowperpage = $_POST['length']; // Rows display per page
    $columnIndex = $_POST['order'][0]['column']; // Column index
    $columnName = $_POST['columns'][$columnIndex]['data']; // Column name
    $columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
    $searchValue = $_POST['search']['value']; // Search value

    ## Search 
    $searchQuery = " ";
    if($searchValue != ''){
        $searchQuery .= " and (nom_personal like '%".$searchValue."%' or 
            email like '%".$searchValue."%' or 
            ciudad like'%".$searchValue."%' ) ";
    }

    ## Total number of records without filtering
    $sel = mysqli_query($con,"select count(*) as allcount from personal");
    $records = mysqli_fetch_assoc($sel);
    $totalRecords = $records['allcount'];

    ## Total number of records with filtering
    $sel = mysqli_query($con,"select count(*) as allcount from personal WHERE 1 ".$searchQuery);
    $records = mysqli_fetch_assoc($sel);
    $totalRecordwithFilter = $records['allcount'];

    ## Fetch records
    $empQuery = "select * from personal WHERE 1 ".$searchQuery." order by ".$columnName." ".$columnSortOrder." limit ".$row.",".$rowperpage;
    $empRecords = mysqli_query($con, $empQuery);
    $data = array();

    while ($row = mysqli_fetch_assoc($empRecords)) {
        $data[] = array(
                "nom_personal"=>$row['nom_personal'],
                "email"=>$row['email'],
                "genero"=>$row['genero'],
                "salario"=>$row['salario'],
                "ciudad"=>$row['ciudad'],
                "action"=>"<input type='checkbox' class='delete_check' id='delcheck_".$row['id']."' onclick='checkcheckbox();' value='".$row['id']."'>"
            );
    }

    ## Response
    $response = array(
        "draw" => intval($draw),
        "iTotalRecords" => $totalRecords,
        "iTotalDisplayRecords" => $totalRecordwithFilter,
        "aaData" => $data
    );

    echo json_encode($response);
    exit;
}

// Delete record
if($request == 2){
    $deleteids_arr = $_POST['deleteids_arr'];

    foreach($deleteids_arr as $deleteid){
        mysqli_query($con,"DELETE FROM personal WHERE id=".$deleteid);
    }

    echo 1;
    exit;
}

Confirma eliminacion de registros DataTables
Confirma eliminacion de registros DataTables

CONCLUSIÓN: Eliminar múltiples registros DataTables

En este artículo hemos aprendido a implementar un plugin para optimizar nuestros resultados de MySQL. Además, hemos incorporado la función de eliminar registros.

Como han podido apreciar la implementación se puede realizar descargando el plugin e insertar al script o usando CDN para no saturar nuestro servidor.

Espero que esta simple explicación les ayude a usar el plugin DataTables en sus proyectos que estén realizando.

DESCARGA DEL SCRIPT

A continuación les dejaré un vínculo para que descarguen el ejemplo completo más la base de datos.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Un comentario

  1. Hola amigo Nestor, me gusta mucho tu blog, me perece extraordinario y muy educativo, he aprendido mucho con el. Quisiera hacerte una pregunta puntual acerca del ejemplo: «Eliminar múltiples registros DataTables»; ¿como se haria para mostrar informacion adicional de un registro en una ventana emergente?, que al momento de hacer «click» en un icono referente a un registro, este muestre informacion adicional en esa ventana emergente. Gracias y que signa los exitos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad