Ir al contenido principal

Lección 9 · Autoevaluación

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: root sin contraseña y el sitio en http://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.