Ir al contenido principal

Lección 9 · Proyecto integrador

Qué se arma

La última lección junta todo lo del curso en un solo sistema: la Tienda La Esquina completa, con login, catálogo, ventas y reportes, funcionando en XAMPP.

Pantalla Qué hace Lo que usa del curso
AccesoLogin de vendedores y administradores.Sesiones, hash, CSRF.
CatálogoLista de productos con stock y precio.POO, PDO, consultas preparadas.
VentaArma una venta y descuenta stock.Formularios, transacciones.
ReportesVentas del día y totales.Consultas con agregación.

Nada de esto es nuevo: es el mismo material de las ocho lecciones, junto y en el mismo proyecto. Lo que cambia es que ahora se entiende por qué cada pieza está donde está.

El login —formulario, sesión y permisos por rol— se explicó en la lección 3 (Formularios y sesiones) y se refuerza en la lección 8 (Seguridad). Y en Base de Datos · Unidad 4 · Login y sesiones está el sistema completo explicado archivo por archivo: conexión, validación, hash y sesión.

El esquema

categorias (id, nombre)
productos  (id, categoria_id, nombre, precio, stock)
clientes   (id, nombre, correo, telefono)
ventas     (id, fecha, cliente_id, total)
venta_detalle (id, venta_id, producto_id, cantidad, precio_unitario)
usuarios   (id, usuario, clave, rol)

Las claves foráneas atan cada venta a su cliente y cada detalle a su venta y su producto. precio_unitario se guarda en el detalle a propósito: si mañana cambia el precio del producto, la venta vieja sigue mostrando lo que se cobró ese día.

El flujo de una venta

  1. El vendedor elige productos y cantidades.
  2. El servidor valida que haya stock y que las cantidades sean válidas.
  3. En una transacción: inserta la venta, inserta el detalle y descuenta el stock.
  4. Si algo falla, rollBack() deja todo como estaba.
  5. Redirige al listado con un mensaje de confirmación.

Los pasos 2 y 3 son la clase de error que se paga caro si faltan: una venta sin detalle, o un stock que se descontó dos veces, dejan el sistema mintiendo. La transacción es lo que garantiza que «todo o nada» sea cierto.

Puesta en marcha en XAMPP

El proyecto se entrega y se prueba en XAMPP: Apache y MySQL corriendo en la propia computadora. En el aula no hace falta un servidor aparte; la misma máquina sirve el sitio y la base de datos.

Los pasos

  1. Copiar la carpeta del proyecto dentro de htdocs —o en la carpeta que se haya configurado como raíz del servidor—.
  2. Encender Apache y MySQL desde el panel de XAMPP.
  3. Crear la base y las tablas: abrir phpMyAdmin desde el panel e importar el archivo .sql, que ya trae el CREATE DATABASE y los datos de prueba.
  4. Revisar conexion.php: host localhost, usuario root, contraseña vacía —lo que trae XAMPP— y el nombre de la base.
  5. Abrir el sitio en el navegador: http://localhost/<carpeta>/.

Que lo vean otras computadoras del aula

El Apache de XAMPP ya escucha en todas las interfaces. Se averigua la IP de la máquina —ip a en GNU/Linux, ipconfig en Windows— y desde otra computadora se entra a http://192.168.x.x/<carpeta>/. Si no carga, el firewall está bloqueando el puerto 80.

Qué no es esto

Lista de control

Antes de decir que el sistema está terminado, estas cinco preguntas tienen que tener respuesta «sí»:

PreguntaSi la respuesta es «no»…
¿Las contraseñas están hasheadas?Falta password_hash; es lo primero.
¿Todas las consultas son preparadas?Hay una puerta abierta a inyección SQL.
¿Todo lo que se muestra está escapado?Hay XSS esperando a que alguien cargue un comentario.
¿Los formularios tienen token CSRF?Otra página puede enviar datos con la sesión del usuario.
¿Los permisos se comprueban en el servidor?Un botón oculto no protege nada.

Y una más, que no es de seguridad pero decide si el sistema sirve: ¿se entiende un mes después? Nombres claros, funciones cortas y una estructura como la de la lección 7 hacen que sí.

Resumen

  • El proyecto integra login, catálogo, ventas y reportes con todo lo del curso.
  • El esquema usa claves foráneas y guarda el precio del momento en el detalle.
  • Una venta es una transacción: todo o nada.
  • Se pone en marcha en XAMPP: Apache y MySQL encendidos, la base importada y el sitio en http://localhost/<carpeta>/.
  • La lista de control de seguridad se repasa antes de entregar.

Con esto se cierra el recorrido: de mostrar un precio en pantalla a un sistema con base de datos, permisos y funcionando en XAMPP.

Autoevaluación de la lección 9

Licencia. El material de esta página es elaboración propia de Prof Mauro Bobyk —a partir de las fuentes que detalla el pie del sitio— y se publica bajo una licencia Creative Commons BY-NC-SA 4.0.