# Exámenes - Recetas de cocina (2)

En este examen se debe crear un programa para que los visitantes puedan crear recetas, borrarlas y obtener listados de las recetas introducidas.

Un ejemplo de programa puede probarse en la ventana siguiente (el ejemplo trabaja con una base de datos SQLite):

Enlace a examen Recetas de cocina

## Recetas de cocina - Tablas

Estas pueden ser las consultas de creación de tablas para este examen:

    // Tamaño de los campos
    define('FORM_METHOD',            'get'); // Formularios se envían con GET
    define('TAM_RECETA',        50); // Tamaño del campo Receta
    define('TAM_CANTIDAD',       4); // Tamaño del campo Cantidad
    define('TAM_INGREDIENTE',   50); // Tamaño del campo Ingrediente
    define('TAM_COMENSALES',     2); // Tamaño del campo comensales
    define('MAX_COMENSALES',    10); // Número máximo de comensales
    define('MAX_INGREDIENTES',   7); // Número máximo de ingredientes en la receta
    define('MAX_CANTIDAD',    9999); // Peso máximo de un ingrediente

    // Consultas de creación de tabla en MySQL
    $consulta = "CREATE TABLE $dbRecetas (
        id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
        receta VARCHAR(".TAM_RECETA."),
        ingrediente VARCHAR(".TAM_INGREDIENTE."),
        cantidad INTEGER UNSIGNED,
        PRIMARY KEY(id)
        )";

    // Consultas de creación de tablas en SQLite
    $consulta = "CREATE TABLE $dbRecetas (
        id INTEGER PRIMARY KEY,
        receta VARCHAR(".TAM_RECETA."),
        ingrediente VARCHAR(".TAM_INGREDIENTE."),
        cantidad INTEGER UNSIGNED
        )";

    // Como sólo se utiliza una tabla, se guardarán tantos registros como ingredientes tenga la receta
    // Para obtener la lista de recetas se puede realizar la siguiente consulta
    $consulta = "SELECT DISTINCT receta FROM $dbRecetas
        ORDER BY receta";

## Recetas de cocina - Comentarios

- Para poder guardar un registro, se deberán rellenar todos los campos.
- No se podrán guardar dos registros iguales (completadas o por completar).
- Los valores introducidos por el usuario se deben comprobar y, si los valores no son correctos, se debe indicar el motivo al usuario. Ejemplos de comprobaciones:
  - Se ha indicado el nombre de la receta
  - Se ha indicado el número de comensales entre 1 y MAX_COMENSALES
  - Se han indicado ingredientes con su cantidad
  - No se han repetido ingredientes
  - No hace falta comprobar que no se ha manipulado la dirección para eliminar elementos de la matriz de ingredientes o cantidades.
  - Los datos pueden recogerse con las funciones recogeParaConsulta() y recogeMatrizparaConsulta()

Esta obra está bajo una licencia de Creative Commons.