38 CONTROLLER UPDATE PRODUCTOS desde el FORMULARIO del Sistema de Ventas con (PHP y MySql)FullStack

Duración: 23 min
Módulo: 📦 Gestión de Productos y Categorías Lección 13 de 15

Descripción

Lección 38: Controlador de Actualización de Productos (UPDATE) 💾🔄

Esta lección se enfoca en el desarrollo del controlador del lado del servidor (update.php) necesario para procesar los datos del formulario de edición y ejecutar la consulta UPDATE en la base de datos, incluyendo la lógica crucial para manejar el posible reemplazo de la imagen del producto.

1. 📋 Configuración y Recepción de Datos

Se configura el formulario de edición (update.php) para que envíe los datos al nuevo controlador y se recopilan las variables necesarias:

  • Destino del Formulario: Se modifica el atributo action del formulario en update.php para que apunte al controlador almacen/update.php y se utiliza el método POST [01:08].
  • Envío del ID: Para que la consulta UPDATE sepa qué registro modificar, se añade un campo oculto (type="hidden") en la vista de edición. Este campo contiene el id_producto y se envía junto con el resto de los datos [04:29].
  • Recepción en el Controlador: El controlador update.php recopila todas las variables enviadas por POST, incluyendo todos los campos editables (nombre, descripción, stock, precios, etc.) y el id_producto [04:39].

2. 📝 Ejecución de la Consulta UPDATE

Se construye y ejecuta la sentencia SQL para actualizar los datos:

  • Sentencia SQL: Se crea la consulta UPDATE almacen SET columna1 = ?, columna2 = ? WHERE id_producto = ? [05:07].
  • Parámetros: Se pasan los 13 parámetros correspondientes a los campos del producto, además de la fecha y hora de actualización y el id_producto para la condición WHERE [08:43].

3. 🖼️ Lógica Condicional para la Imagen

La parte más compleja es la actualización de la imagen, ya que el usuario puede o no seleccionar un nuevo archivo.

A. Identificación de la Imagen Anterior

Para mantener la imagen si el usuario no selecciona una nueva, se necesita el nombre del archivo actual:

  • Campo Oculto para Imagen Antigua: Se añade otro campo oculto en la vista de edición para enviar el nombre de la imagen actualmente registrada en la base de datos (Ej: 20230131102500_audifonos.jpg) [14:42]. Este valor es crucial.

B. Flujo Condicional en update.php

Se implementa una estructura if/else para determinar si hay un archivo nuevo [11:00]:

  1. Si Hay Imagen Nueva ($_FILES['image']['name'] es diferente de nulo):
    • Proceso de Subida: Se invoca la misma lógica de subida y renombramiento único utilizada en la acción CREATE (concatenando fecha/hora y nombre) [15:45].
    • Movimiento: Se mueve el nuevo archivo a la carpeta img/productos.
    • Variable de Imagen: La variable que se insertará en la base de datos ($imagen) se establece con el nombre único del nuevo archivo [16:38].
  2. Si No Hay Imagen Nueva (else):
    • Variable de Imagen: La variable que se insertará en la base de datos ($imagen) se establece con el nombre de la imagen antigua (tomado del campo oculto image_texto), asegurando que la ruta en la base de datos no se borre ni cambie [16:58].

Finalmente, la consulta UPDATE utiliza la variable $imagen (ya sea con el nombre nuevo o el antiguo) para persistir la información correcta en la base de datos.

4. ✅ Prueba y Resultado

Las pruebas confirman que el controlador funciona correctamente en ambos escenarios:

  • Actualización de Datos e Imagen: Los datos se modifican y la imagen se reemplaza por la nueva. Un nuevo archivo se añade al servidor [20:06].
  • Actualización Solo de Datos: El nombre o los precios se modifican, pero la imagen y su registro en la base de datos se mantienen inalterados [21:40].

Con esto, las operaciones CREATE, READ y UPDATE del módulo de productos están completas. El siguiente paso será implementar la acción de ELIMINAR (DELETE).