Cómo se usa
Esta página cubre todo lo de la lección 9: el esquema completo, el flujo de una venta con transacción y lo que hay que cuidar al publicar.
Hay 9 preguntas y 3 ejercicios, con corrección inmediata.
Preguntas
Todavía sin contestar · 9 preguntas
El esquema
1. ¿Qué guarda la tabla venta_detalle?
Elegí una opción para verla
Cada línea de la venta: qué producto, cuánta cantidad y a qué precio unitario se vendió.
2. ¿Por qué se guarda precio_unitario en el detalle?
Elegí una opción para verla
Para que la venta histórica muestre lo que realmente se cobró. Si el precio del producto cambia, el pasado no se reescribe.
3. ¿Qué función cumple una clave foránea?
Elegí una opción para verla
Une, por ejemplo, cada detalle con su venta: no puede existir un detalle sin venta, ni una venta sin cliente válido.
El flujo y la publicación
4. ¿Por qué la venta se guarda en una transacción?
Elegí una opción para verla
Porque son varias operaciones que deben ser todo o nada. Si falla el descuento de stock, la venta no debe quedar guardada sola.
5. En XAMPP, ¿qué usuario y contraseña trae MySQL por defecto?
Elegí una opción para verla
Usuario root y contraseña vacía. Sirve para el aula y no para internet: cualquiera que llegue al puerto de MySQL entra.
6. ¿Cómo se abre el proyecto en el navegador cuando está en XAMPP?
Elegí una opción para verla
Con http://localhost/<carpeta>/: Apache sirve lo que está en htdocs y es él mismo quien ejecuta el PHP.
Lista de control
7. ¿Cuál de estas NO es una comprobación de seguridad del proyecto?
Elegí una opción para verla
El CSS minificado es una optimización, no seguridad. Las otras tres son parte de la lista de control.
8. ¿Qué pasa si se muestra un dato sin escapar?
Elegí una opción para verla
XSS: el navegador interpreta el HTML y puede ejecutar código en nombre del sitio.
9. ¿Qué carpeta se expone al servidor web?
Elegí una opción para verla
Solo public/. El resto del código queda fuera del alcance del navegador.
Ejercicios de práctica
Ejercicio 1
Escribí el CREATE TABLE de ventas y venta_detalle con sus claves foráneas.
CREATE TABLE ventas (
id INT AUTO_INCREMENT PRIMARY KEY,
fecha DATE NOT NULL,
cliente_id INT NOT NULL,
total DECIMAL(10,2) NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
CREATE TABLE venta_detalle (
id INT AUTO_INCREMENT PRIMARY KEY,
venta_id INT NOT NULL,
producto_id INT NOT NULL,
cantidad INT NOT NULL,
precio_unitario DECIMAL(10,2) NOT NULL,
FOREIGN KEY (venta_id) REFERENCES ventas(id),
FOREIGN KEY (producto_id) REFERENCES productos(id)
);Ejercicio 2
Describí los pasos para registrar una venta con transacción, en orden.
1) Validar stock y cantidades. 2) beginTransaction(). 3) Insertar la venta. 4) Insertar cada línea del detalle con lastInsertId(). 5) Descontar el stock de cada producto. 6) commit(); si algo falla, rollBack().
Ejercicio 3
Hacé la lista de las cinco comprobaciones de seguridad antes de publicar.
- Contraseñas con
password_hash. - Todas las consultas preparadas.
- Todo lo que se muestra, escapado con
htmlspecialchars. - Token CSRF en los formularios.
- Permisos comprobados en el servidor.
Cómo saber si está bien
Si acertaste 7 o más, el curso está completo. Lo más importante no es la nota: es poder explicar por qué cada pieza está donde está.
Lo que hay que poder explicar
- El detalle guarda el precio del momento.
- Las claves foráneas evitan datos huérfanos.
- La venta es una transacción: todo o nada.
- En XAMPP:
rootsin contraseña y el sitio enhttp://localhost/<carpeta>/. - Las cinco comprobaciones de seguridad antes de publicar.
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.