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 |
|---|---|---|
| Acceso | Login de vendedores y administradores. | Sesiones, hash, CSRF. |
| Catálogo | Lista de productos con stock y precio. | POO, PDO, consultas preparadas. |
| Venta | Arma una venta y descuenta stock. | Formularios, transacciones. |
| Reportes | Ventas 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
- El vendedor elige productos y cantidades.
- El servidor valida que haya stock y que las cantidades sean válidas.
- En una transacción: inserta la venta, inserta el detalle y descuenta el stock.
- Si algo falla,
rollBack()deja todo como estaba. - 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
- Copiar la carpeta del proyecto dentro de
htdocs—o en la carpeta que se haya configurado como raíz del servidor—. - Encender Apache y MySQL desde el panel de XAMPP.
- Crear la base y las tablas: abrir phpMyAdmin desde el panel e importar el archivo
.sql, que ya trae elCREATE DATABASEy los datos de prueba. - Revisar
conexion.php: hostlocalhost, usuarioroot, contraseña vacía —lo que trae XAMPP— y el nombre de la base. - 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
root sin contraseña y el panel de administración abierto. Publicar un sitio real exige otra cosa: un servidor aparte, las credenciales en un archivo fuera del código y los errores apagados para el visitante. En esta materia, el proyecto de los alumnos se entrega y se prueba en XAMPP; el sitio del profesor se publica por otro camino.
Lista de control
Antes de decir que el sistema está terminado, estas cinco preguntas tienen que tener respuesta «sí»:
| Pregunta | Si 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.
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.