Listado completo de tutoriales

Temario del Tutorial57 - mysqli (POO) - modificación de un registro de la tabla articulos


Para modificar los datos de un artículo implementaremos un algoritmo que solicite el ingreso del codigo de artículo que queremos modificar, en caso que exista permitiremos cambiar su descripción, precio y rubro.

Para poder cambiar el rubro debemos mostrar el rubro actual en un control select.

La descripción y precio actual se muestran precargados en el formulario de modificación.

Crearemos tres página. La primera donde el operador ingresa el codigo de articulo que quiere modificar, la segunda página mostraremos un formulario HTML con los datos precargados y finalmente la tercer página tendrá como objetivo ejecutar el comando SQL update.

El primer formulario solicita la carga del código del artículo que queremos modificar sus datos:

pagina1.html

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Modificación de artículo</title>
</head>

<body>
  <form method="post" action="pagina2.php">
    Ingrese el código de artículo a modificar:
    <input type="text" name="codigo" size="10" required>
    <br>
    <input type="submit" value="Consultar">
  </form>
</body>

</html>
modificacion mysqli

Lo más importante aparece en el segundo formulario donde debemos mostrar precargados los datos actuales:

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Modificación de artículo.</title>
</head>

<body>

  <?php
  $mysql = new mysqli("localhost", "root", "", "base1");
  if ($mysql->connect_error)
    die("Problemas con la conexión a la base de datos");

  $registro = $mysql->query("select descripcion,
                                       precio,
                                       codigorubro
                                   from articulos where codigo=$_REQUEST[codigo]") or
    die($mysql->error);

  if ($reg = $registro->fetch_array()) {
    ?>
    <form method="post" action="pagina3.php">
      Descripción del artículo:
      <input type="text" name="descripcion" size="50" value="<?php echo $reg['descripcion']; ?>">
      <br>
      Precio
      <input type="text" name="precio" size="10" value="<?php echo $reg['precio']; ?>">
      <br>
      Rubro:
      <select name="codigorubro">
        <?php
          $registros2 = $mysql->query("select codigo,descripcion from rubros") or
            die($mysql->error);
          while ($reg2 = $registros2->fetch_array()) {
            if ($reg2['codigo'] == $reg['codigorubro'])
              echo "<option value=\"" . $reg2['codigo'] . "\" selected>" . $reg2['descripcion'] . "</option>";
            else
              echo "<option value=\"" . $reg2['codigo'] . "\">" . $reg2['descripcion'] . "</option>";
          }
          ?>
      </select>

      <input type="hidden" name="codigo" value="<?php echo $_REQUEST['codigo']; ?>">
      <br>
      <input type="submit" value="Confirmar">
    </form>
  <?php
  } else
    echo 'No existe un artículo con dicho código';

  $mysql->close();

  ?>
</body>

</html>
modificacion mysqli

En esta segunda página lo primero que hacemos es buscar si existe un artículo con dicho código:

  $registro = $mysql->query("select descripcion,
                                       precio,
                                       codigorubro
                                   from articulos where codigo=$_REQUEST[codigo]") or
    die($mysql->error);

  if ($reg = $registro->fetch_array()) {

En caso afirmativo, es decir ingresa por el verdadero del if procedemos a mostrar en las propiedades value la descripción y precio del artículo consultado.

Pero para mostrar todos los rubros debemos hacer una nueva consulta a la otra tabla (rubros) donde con los datos rescatados generamos todas las opciones del control HTML select en forma similar al algoritmo de altas:

      <select name="codigorubro">
        <?php
          $registros2 = $mysql->query("select codigo,descripcion from rubros") or
            die($mysql->error);
          while ($reg2 = $registros2->fetch_array()) {
            if ($reg2['codigo'] == $reg['codigorubro'])
              echo "<option value=\"" . $reg2['codigo'] . "\" selected>" . $reg2['descripcion'] . 
                   "</option>";
            else
              echo "<option value=\"" . $reg2['codigo'] . "\">" . $reg2['descripcion'] . "</option>";
          }
          ?>
      </select>

La única diferencia es que como debemos mostrar seleccionado el rubro actual del artículo mediante un if controlamos cada código de rubro de la tabla "rubros" con el código de rubro del artículo seleccionado. Aquel que coincida procedemos a agregarle la propiedad selected a la marca option respectiva.

Finalmente debemos implementar la página que modifica el registro respectivo mediante el comando SQL update:

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Modificación de artículo.</title>
</head>

<body>

  <?php
  $mysql = new mysqli("localhost", "root", "", "base1");
  if ($mysql->connect_error)
    die("Problemas con la conexión a la base de datos");

  $mysql->query("update articulos set 
                           descripcion='$_REQUEST[descripcion]',
                           precio=$_REQUEST[precio],
                           codigorubro=$_REQUEST[codigorubro]
              where codigo=$_REQUEST[codigo]") or
    die($mysql->error);

  echo 'Se modificaron los datos del artículo';

  $mysql->close();

  ?>
</body>

</html>


Problema resuelto.

Copiar el contenido de este cuadro de texto al VS Code y almacenarlo en la carpeta c:\xampp\htdocs con un nombre con extensión php.
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear:
http://localhost/pagina1.php (o el nombre del archivo que le dió)

pagina1.php

Ejecutar ejemplo

pagina2.php


pagina3.php


Retornar