# Soluciones de los ejercicios (cursos anteriores)

Estos enlaces permiten descargar soluciones de cursos anteriores de algunos de los ejercicios. Cada archivo comprimido contiene todos los archivos necesarios (html, css, php, imágenes, etc). Se recomienda utilizar las soluciones más actuales.

## Soluciones del curso 2010/11

Las soluciones proporcionadas durante el curso 2010/11 se distribuyen bajo licencia AGPL 3 o posterior.

- Primeras páginas (versión 2011-04-19)
- Controles en formularios (versión 2011-04-26)
- Operaciones aritméticas (versión 2011-05-09)
- if ... elseif ... else ... (versión 2011-05-09)
- for 1 (versión 2011-05-09)
- Expresiones regulares (versión 2010-04-24)
- for 2 (versión 2010-04-13)
- Menús (versión 2011-05-09)
- Bases de datos 1 ejercicios 1 a 3 (versión 2011-05-16)
- Bases de datos 1 ejercicios 4 a 6 (versión 2011-05-16)
- Bases de datos 2 (versión 2011-05-16)
- Inyección SQL 2 (vulnerable a ataques) (versión 2011-05-19)

## Soluciones del curso 2009/10

Las soluciones proporcionadas durante el curso 2009/10 se distribuyen bajo licencia AGPL 3 o posterior.

- Comprobación de datos (versión 2010-02-16)
- Controles en formularios (versión 2010-02-17)
- Operaciones aritméticas (versión 2010-03-02)
- if ... elseif ... else ... (versión 2010-03-02)
- for 1 (versión 2010-03-03)
- Expresiones regulares (versión 2010-04-24)
- for 2 (versión 2010-04-13)
- validacion (versión 2010-03-25)
- Repaso (versión 2010-03-30)
- Agenda 1 (sólo creación de tablas) (versión 2010-04-13)
- Agenda (completa) (versión 2009-05-21)
- Biblioteca 1 (sólo creación de tablas) (versión 2010-04-20)
- Biblioteca (completa) (versión 2009-05-21)
- Blog 1 (sólo creación de tablas) (versión 2010-04-28)
- Blog (completa) (versión 2010-04-28)
- Cookies (versión 2010-05-09)
- Sesiones (versión 2010-05-11)
- Multiagenda 1 (sólo creación de tablas) (2009-05-21)
- Multiagenda (completa) (2009-05-21)

## Ejemplos del curso 2009/10

Los ejemplos proporcionados durante el curso 2009/10 se distribuyen bajo licencia AGPL 3 o posterior.

- Diferencias entre MYSQL y SQLite - Fecha (versión 2010-02-20)

## Soluciones curso 2008/09

Las soluciones proporcionadas durante el curso 2008/09 se distribuyen bajo licencia AGPL 3 o posterior.

- Controles en formularios (versión 2008-04-27)
- Operaciones aritméticas (versión 2008-04-27)
- If ... elseif ... else ... (versión 2008-04-27)
- for (1) (versión 2009-04-27)
- for (2) (versión 2009-04-27)
- Expresiones regulares (versión 2009-04-27)
- Validación (versión 2009-04-27)
- Repaso 1 (versión 2009-04-27)

- Agenda de teléfonos (versión 2009-05-21)
- Biblioteca (versión 2009-05-21)
- Foro (versión 2009-05-21)
- Blog (versión 2009-05-21)
- Multiagenda (versión 2009-05-21)
- Ejercicios de repaso
  - Generador de formularios (pendiente de revisar)
  - Generador de <select> (pendiente de revisar)
  - Nonogramas (pendiente de revisar)
  - Campeones de fútbol (versión 2009-05-21)
  - Apuestas (versión 2009-05-21)

## Cambios realizados en las soluciones en el curso 2008/09

Los cambios realizados en las soluciones de los proyectos en el curso 2008/09 con respecto al curso anterior son los siguientes:

- css: añadir input { font-family: monospace; }. El nombre de la hoja de estilo es mclibre_php_soluciones_proyectos_comun.css si es la hoja básica, si tiene algo más entonces en vez de _comun.css se llama _nombreEjercicio.css.
- funciones.php: cambiar la extensión de las bases de datos squlite, de squlite3 a squlite.
- funciones.php: cambiar a constantes las variables que no cambian (tamaños de los campos en la base de datos, número máximo de registros en la base de datos, etc.).
- funciones.php: zona horaria como constante, método de formulario (get o post) como constante.
- funciones.php: añadido ini_set('session.save_handler', 'files'); por si session.save_handler = user en php.ini. En el resto de páginas he puesto el include('funciones.php'); al principio de cada página.
- cabecera(): línea en blanco en código fuente páginas después de </head>.
- cabecera(): añadir parámetro a función cabecera para que ponga cursor o no (parámetro en segunda posición, usar constantes CABECERA_CON_CURSOR y CABECERA_SIN_CURSOR). El motivo para hacerlo es que si se pone document.getElementById('cursor').focus() en <body> y luego no hay ningún elemento con id="cursor", IE da un error.
- cabecera(): si hay CABECERA-CON_CURSOR, la llamada a cabecera con cursor sólo tiene que estar cuando la página contiene un formulario, en los mensajes de error tiene que llamarse a cabecera sin cursor.
- formularios: añadir maxlength a <input> en formulario (con el mismo valor que size).
- formularios: en el código fuente de la página, todo los atributos de un <input> salen en la misma línea.
- formularios: constante FORM_METHOD que indica si el método es get o post.
- al comprobar si ya existe un registro comprueba !=0 y no ==1 como hacía antes (para evitar que si hay dos registros en la base de datos no diga que no hay ninguno).
- eliminar espacios alrededor de comparaciones: == != >= <= etc.
- añadir espacios alrededor de operadores lógicos: && ||.
- sesiones: añadido ini_set('session.save_handler', ... para evitar incompatibilidades con algunas configuraciones de php.ini (por ejemplo, si está instalado Drupal).

## Soluciones Curso 2007/08

Las soluciones proporcionadas durante el curso 2007/08 se distribuyen bajo licencia AGPL 3 o posterior.

- Controles en formularios (versión 2008-02-21)
- Operaciones aritméticas (versión 2008-02-21)
- If ... elseif ... else ... (versión 2008-02-12)
- for (1) (versión 2008-02-12)
- Google Chart 1 (versión 2008-01-31)

- Agenda de teléfonos (versión 2008-02-26)
- Biblioteca (versión 2008-02-26)
- Foro (versión 2008-02-26)
- Blog (versión 2008-02-26)
- Agenda de teléfonos multiusuario (versión 2008-02-26)

## Soluciones Curso 2006/07

Las soluciones proporcionadas durante el curso 2006/07 se distribuyen bajo licencia GPL 2 o posterior.

- Agenda de teléfonos (versión 2007-02-23)
- Biblioteca (versión 2007-02-23)
- Foro (versión 2007-02-23)
- Blog (versión 2007-03-05)
- Agenda multiusuario (versión 2007-02-27)
- CompraVenta (versión 2007-02-27)
- Veterinaria (versión 2007-03-08)
- Foro multiusuario sin imágenes (versión 2007-03-13)

Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.