HTML5 Demostración y Ejemplos

Editar registros en línea usando HTML5 jQuery, PHP & MYSQL

Editar registros en línea usando HTML5 jQuery, PHP & MYSQL. Para poder manejar información en un sistema web se necesita un CRUD es decir un módulo en el cual nos permita Visualizar, Insertar, Editar, Eliminar. Sin embargo, suele ser tedioso a la hora de interactuar con esas opciones ya mencionadas.

En este artículo veremos una simple forma de editar registros, es decir «editar registros en línea«, en donde no abriremos una ventana nueva para editar, ni un modal. Por lo tanto, editaremos la información devuelta en la lista de registros con la cláusula «SELECT».

Editar registros en línea usando HTML5 jQuery, PHP & MYSQL

¿Qué recursos necesito para editar en línea?

Esta forma es la más fácil para interactuar con nuestras aplicaciones web. Usaremos HTML5 con PHP y también una base de datos MySQL en el cual almacenaremos la información. Por lo tanto, con esto lograremos una edición in situ o edición en línea sin usar ningún tipo de ventana emergente.

¿Cómo funciona este sistema?

Generalmente se implementa en una tabla HTML regiones editables a través del atributo (contenteditable=»true») al realizar un clic en el registro. Por lo tanto, esto permite que sea editable través del lenguaje jQuery.

El jQuery lo cambia a un input de texto. Esos campos envían el texto editado al servidor a través de Ajax usando el método POST y el fichero «proceso.php» realiza la actualización si tener que refrescar la página o sistema web.

Usaremos también HTML5 con su nuevo atributo llamado «contentEditable» y este se encargara de la edición en línea de manera automática. Sin embargo, debemos escribir un pequeño código jQuery para enviar los datos editados de nuevo al servidor. Esta técnica es una gran ventaja del tradicional formulario oculto para poder editar los registros.

Existe un atributo llamado contentEditable que está disponible en casi todos los elementos. Simplemente agregando este atributo convierte cualquier elemento en un campo editable.

Editar registros online Ajax PHP
Editar registros online Ajax PHP

Partes del sistema edición en línea

A continuación, detallaremos las partes del sistema editar registros en línea.

Estructura de archivos y carpetas de editar en linea php MySQL Ajax
Estructura de archivos y carpetas de editar en linea php MySQL Ajax

a) Base de datos: Creación de base de datos y tabla

Para interactuar con la información se necesita una base de datos llamado «PHP_HTMLEDIT» y su respectiva tabla llamado «usuarios_detalles«. Sin embargo, en esta tabla almacenaremos la información y también su respectiva edición. Veamos las siguientes consultas SQL.

CREATE TABLE `usuarios_detalles` (
  `Id` int(11) NOT NULL,
  `Nombres` varchar(50) DEFAULT NULL,
  `Apellidos` varchar(50) DEFAULT NULL,
  `Ciudad` varchar(50) DEFAULT NULL,
  `Cel` varchar(50) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `usuarios_detalles` (`Id`, `Nombres`, `Apellidos`, `Ciudad`, `Cel`) VALUES
(1, 'Mario', 'Kalkaterra', 'Mexico', '90056231'),
(2, 'Carlos', 'Lujan', 'Bogota', '90056232'),
(3, 'Luisa', 'Retamozo', 'Montevideo', '90056233'),
(4, 'Valentin', 'Hidalgo', 'Quito', '90056236'),
(5, 'Maria', 'Quintanilla', 'Lima', '90056239');


ALTER TABLE `usuarios_detalles`
  ADD PRIMARY KEY (`Id`);

ALTER TABLE `usuarios_detalles`
  MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
COMMIT;

b) Fichero DBCONECT.PHP

El siguiente script representa la conexión del sistema con la base de datos MySQL y lo haremos a través de una función llamado «connect«. Además, hemos agregado el «Charset UTF8» para no tener con los caracteres especiales, tildes y eñes en los registros de la BD.

function connect(){
    return new mysqli("localhost","root","","php_htmledit");
}
$con = connect();

// AGREGANDO CHARSET UTF8
if (!$con->set_charset("utf8")) {
    printf("Error al cargar el conjunto de caracteres utf8: %s\n", $con->error);
    exit();
} else {
    //printf("Conjunto de caracteres actual: %s\n", $db->character_set_name());
}

c) Declarar el fichero DBCONECT

Recordemos que para optimizar la comunicación dentro del lenguaje PHP tenemos que incluir ficheros y justamente este sistema trabaja incluyendo la conexión con MySQL. La función predeterminada del PHP para incluir ficheros en «INCLUDE» o también podemos usar «REQUIRE«, en este artículo hablamos de las diferencias.

<?php
include("dbconect.php");
?>

d) Archivo index.php

Es el fichero principal de este sistema es el «INDEX.PHP«, Por lo tanto, este fichero mostrara una lista de resultados extraídos de la base de datos. En estos resultados realizaremos la edición en línea usando Ajax, HTML5, PHP y MySQL. Aquí, les dejare el contenido del fichero.

<div class="container">
<?php
$sql = "SELECT * FROM `usuarios_detalles`";
$consulta = mysqli_query($con, $sql);
if($consulta->num_rows === 0) {
  echo "No hay resultados <br><br><br>";
} else {
?>
<div class="row">
<div id="status"></div>      
<table class="table table-striped">
    <thead class="thead-dark">
      <tr>
        <th scope="col">#</th>
        <th scope="col">Nombres</th>
        <th scope="col">Apellidos</th>
        <th scope="col">Ciudad</th>
        <th scope="col">Celular</th>
      </tr>
    </thead>
    <tbody>
<?php
$rownumber=0;
while($rowedit = mysqli_fetch_array($consulta)){
$rownumber++;
$nom = $rowedit["Nombres"];
$ape = $rowedit["Apellidos"];
$ciu = $rowedit["Ciudad"];
$cel = $rowedit["Cel"];
?>
<tr>
<!-- Si observamos, en esta sección podemos declarar el atributo "contenteditable" en true o false -->
  <td scope="row"><?php echo $rownumber; ?></td>
  <td id="Nombres:<?php echo $rownumber; ?>" contenteditable="true"><?php echo $nom; ?></td>
  <td id="Apellidos:<?php echo $rownumber; ?>" contenteditable="true"><?php echo $ape; ?></td>
  <td id="Ciudad:<?php echo $rownumber; ?>" contenteditable="false"><?php echo $ciu; ?></td>
  <td id="Cel:<?php echo $rownumber; ?>" contenteditable="false"><?php echo $cel; ?></td>
</tr>
<?php
}
?>    
    </tbody>
 </table>
</div>
<?php }?>
</div>

e) Contenido del código jQuery

La siguiente codificación es de jQuery que a través de una función ejecuta la tabla HTML que previamente el usuario final ha editado. El método que se usa es el POST para procesar la información y si todo es correcto emite un mensaje con el siguiente texto «REGISTRO ACTUALIZADO CORRECTAMENTE«. Además el proceso dura «2000 milisegundos«.

$(function(){
  //Mensaje
    var message_status = $("#status");
    $("td[contenteditable=true]").blur(function(){
        var rownumber = $(this).attr("id");
        var value = $(this).text();
        $.post('proceso.php' , rownumber + "=" + value, function(data){
            if(data != '')
      {
        message_status.show();
        message_status.html(data);
        //hide the message
        setTimeout(function(){message_status.html("REGISTRO ACTUALIZADO CORRECTAMENTE");},2000);
      } else {
        //message_status().html = data;
      }
        });
    });
});
Registro editado correctamente con ajax MySQL PHP
Registro editado correctamente con ajax MySQL PHP

f) Fichero Proceso.php

Basicamente, este es el archivo que puede realizar la edición es el PHP. Por tal motivo, el fichero llamado «proceso.php» contendrá las clausulas y consultas para realizar los cambios a través de del ciclo FOREACH y además de la cláusula UPDATE que es el encargado de realizar la actualización del registro en la base de datos. Veamos el contenido del fichero.

foreach($_POST as $rownumber_name => $val) {

// Recuerda limpiar valores de post
        $rownumber = $rownumber_name;
        $val = $val;

        // De nombre de campo: rownumber_id que necesitamos obtener rownumber_id
        $split_data = explode(':', $rownumber);
        $rownumber_id = $split_data[1];
        $rownumber_name = $split_data[0];

// Aquí se realzia la actualizacion en la base de datos en determinado registro
$sql_1 = "UPDATE usuarios_detalles SET $rownumber_name = '$val' WHERE Id = $rownumber_id";
  if ($con->query($sql_1)) {
  $last_id = $con->insert_id;
  // Se imprime cuando todo esta correcto
  echo "Registro Editado Correctamente: <img src='images/loader.gif' height='15px'>";
  } else {
  // Se imprime si hay algun error
  printf("Errormessage: %s\n", $con->error);
  }
}
Editar registros en línea usando HTML5 jQuery, PHP & MYSQL
Editar registros en línea usando HTML5 jQuery, PHP & MYSQL

CONCLUSIÓN DE EDITAR REGISTROS EN LÍNEA

Con este modelo de codificación hemos agregado un evento recientes en cada celda de la tabla «TD» que tiene el atributo «contentEditable» establecido en true para que al hacer clic sea editable, caso contrario si lo declaramos en false la celda será normal y no será editable.

Además, este tipo de edición es de gran ayuda en nuestros modelos CRUD y agiliza los procesos de edición rápidamente porque no genera formularios en nuevas ventanas, todo lo realiza sin actualizar la página.

Este tipo de procesos ayuda a que no saturemos nuestro servidor y los procesos se realizan más rápidos. La implementación no es tan complicado y lo hemos explicado en el presente artículo.

Espero que este modelo de edición les sirva y lo apliquen en sus proyectos web. Siéntase libre en realizar un comentario.

Descarga del sistema

Les dejare un archivo ZIP que contendrá todos los recursos del ejemplo, es decir Los archivos, la base de datos con ejemplos.

[sociallocker id=5099] [/sociallocker]

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!.

6 comentarios

  1. saludos, yo tengo un sistema de calificaciones y lo que quisiera es que al registrar notas, un docente en la celda escogida, me actualice directamente en la tabla las notas y los promedios, mi pregunta es me sirve este codigo para implementarlo

  2. Hola Nestor, muy buen código!! Gracias por compartirlo. Te hago una consulta: se podrá modificar para que sólo actualice si se modificó el valor? O sea que en vez de dispararse con el evento «blur» lo haga con «change» o algo por el estilo? Desde ya te agradezco. Saludos. Daniel

  3. veo que toma el id, con el mientras y que los datos deben estar ordenados por el id, si estan en desorden como se puede hacer para que el id correspondiente

Deja una respuesta

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

Botón volver arriba