> Manuales > Manual de PHP

Realizamos un ejemplo de actualización de registros mediante PHP. Accedemos a la base de datos para poder seleccionar los datos de la tabla a actualizar. Recogemos los datos del formulario y montamos las consultas de update sobre la tabla.

Actualización de un registro de la base de datos con PHP

En este artículo vamos a ver otro de los ejemplos típicos del trabajo con bases de datos en PHP: la actualización de un registro de una tabla de la base de datos. Para ello realizaremos un ejemplo completo en el que podremos seleccionar qué registro se debe actualizar y luego se actualizará mediante la correspondiente sentencia UPDATE de SQL.

Este artículo continúa la línea de otros artículos ya publicados de acceso a bases de datos con PHP, que te recomendamos leer desde el principio, comenzando por el que aborda las conexiones con las bases de datos desde PHP.

Para mostrar cómo se actualiza un registro presente en nuestra base de datos, vamos a hacerlo a partir de un caso un poco más complejo que los anteriores, para que empecemos a familiarizarnos con el tipo de operaciones que se suelen realizar en la programación del lado del servidor. Este trabajo consistirá en dos etapas, que permitan en conjunto cambiar el número de teléfono de las distintas personas presentes en nuestra tabla. El nombre de estas personas, así como el nuevo número de teléfono, serán recogidos por medio de un formulario.

Formulario para carga de datos del registro a actualizar

El código del formulario va a ser esta vez un script PHP en el que efectuaremos una llamada a nuestra base de datos para construir un menú desplegable (campo select de formulario) donde aparecerán todos los nombres de los contactos que tenemos en la tabla.

Comenzamos realizando la conexión con la base de datos, por medio de la función de conexión que hemos utilizado en anteriores ejemplos del acceso a bases de datos.

<?php
  include "conexion.php";
  $conexion = conexion();
?>    

Recuerda que una vez realizado este código en $conexion tendremos un objeto que nos permitirá realizar las operaciones sobre la base de datos. Para montar el formulario de actualización tenemos que realizar una operación de selección, para traernos todos los contactos que tenemos en nuestra tabla.

<form method="POST" action="actualizar.php">
  Nombre
  <br>
  <?php
    // creamos la sentencia SQL y la ejecutamos
    $ssql = "select nombre from clientes order by nombre";
    $result = $conexion->query($ssql);
    
    //Generamos el campo select
    echo '<select name="nombre">';
    while ($row = $result->fetch_array()) {
      echo '<option>' . $row["nombre"] . '</option>';
    }
    echo '</select>';
  ?>
  <br>
  Teléfono<br>
  <input type="text" name="telefono"><br>
  <input type="submit" value="Actualizar">
</form>

En el campo de selección aparecerán todos los nombres de los contactos de la tabla y en el campo de texto del teléfono podemos anotar un nuevo teléfono para actualizar el correspondiente contacto.

La parte más interesante es en la que se construyen los elementos <option> del campo <select>, realizando un bucle sobre todos los elementos obtenidos en la consulta de selección.

Aquí hay una parte que queremos comentar, porque este ejemplo, buscando la simplicidad no corresponde con la forma más habitual de trabajar. Me explico. Generalmente las tablas de la base de datos tienen campos de indentificador, autonuméricos. Esos campos son los que se suelen usar para identificar de manera exacta los registros que se deben actualizar. Por ello lo más normal sería que el campo <select> se hubiera construido enviando el id del registro a actualizar, en lugar del nombre. Sin embargo, nuestra tabla no tiene identificadores!! por eso estamos enviando el nombre. El problema es que podría haber varios contactos con el mismo nombre y en ese caso nuestro ejemplo no podría identificar de manera exacta cuál de ellos debe actualizarse.

Proceso de actualización de los datos en la base de datos

Ahora vamos a centrarnos en la parte del update. El formulario anterior se recibirá en la página y tendremos que realizar el siguiente proceso:

  1. Recibir los datos por $_POST
  2. Componer una sentencia SQL de UPDATE
  3. Ejecutar la sentencia SQL

Estas acciones en código se concretan de la siguiente manera:

// Recibimos los datos del formulario
$nombre = $_POST["nombre"];
$telefono = $_POST["telefono"];

// Montamos la sentencia SQL
$ssql = "update clientes set telefono='$telefono' Where nombre='$nombre'";

// Ejecutamos la sentencia de actualización
if($conexion->query($ssql)) {
  echo '<p>Cliente actualizado con éxito</p>';
} else {
  echo '<p>Hubo un error al actualizar el cliente: ' . $conexion->error . '</p>';
}

Fíjate que al ejecutarse la sentencia de UPDATE el método query() del objeto de conexión devuelve un boleano, para advertir si fue bien o mal la ejecución. Si recuerdas, ocurrió lo mismo con las sentencias de INSERT.

Concentrar todo el código de actualización en un formulario que llama a la misma página

Para acabar vamos a ver todo el código junto, en una misma página que concentra todo el proceso de actualización. Para ello tendremos un formulario que envía los datos a haciendo una llamada al mismo script PHP donde está.

Este proceso de autollamada ya lo hemos visto otras veces, por lo que no debería resultar extraño.

Nuestro código completo se puede ver a continuación.

<!DOCTYPE html>
<html lang="es">

<head>
  <title>Actualizar registros de la base de datos</title>
</head>
<body>

<div>
  <h1>Actualizar un registro</h1>
  <br>
  <?php
    include "conexion.php";
    $conexion = conexion();
    if(! $_POST) {
  ?>    
      <form method="POST" action="actualizar.php">
        Nombre
        <br>
        <?php
          // creamos la sentencia SQL y la ejecutamos
          $ssql = "select nombre from clientes order by nombre";
          $result = $conexion->query($ssql);
          
          //Generamos el campo select
          echo '<select name="nombre">';
          while ($row = $result->fetch_array()) {
            echo '<option>' . $row["nombre"] . '</option>';
          }
          echo '</select>';
        ?>
        <br>
        Teléfono<br>
        <input type="text" name="telefono"><br>
        <input type="submit" value="Actualizar">
      </form>
  <?php
    } else {
      // Recibimos los datos del formulario
      $nombre = $_POST["nombre"];
      $telefono = $_POST["telefono"];

      // Montamos la sentencia SQL
      $ssql = "update clientes set telefono='$telefono' Where nombre='$nombre'";

      // Ejecutamos la sentencia de actualización
      if($conexion->query($ssql)) {
        echo '<p>Cliente actualizado con éxito</p>';
      } else {
        echo '<p>Hubo un error al actualizar el cliente: ' . $conexion->error . '</p>';
      }
    }
    $conexion->close();
  ?>
  <p>
    <a href="actualizar.php">Actualizar otro registro</a>
  </p>
  <p>
    <a href="seleccionar.php">Listar</a>
  </p>
</div>

</body>
</html>

Con esto hemos terminado el proceso de actualización de registros en la base de datos con PHP. Para completar el flujo de acciones más comunes sobre la base de datos nos quedaría ver un ejemplo de borrado, que abordaremos en el artículo siguiente.

Rubén Alvarez

Rubén es doctor en química y programador principalmente en sus ratos libres con...

Manual