Esta lección contiene un índice de las lecciones que estoy impartiendo en clase durante el primer trimestre (y parte del segundo) del curso 2023/24, así como los ejercicios que han realizado los alumnos.
Para elaborar este índice utilizo como base las guías de estudio que ofrezco a mis alumnos de la modalidad semipresencial en la plataforma Moodle de la Conselleria de Educación. El trabajo propuesto a estos alumnos es el mismo que siguen en clase mis alumnos de la modalidad presencial, aunque la distribución temporal no sea exactamente la misma.
La información se ofrece distribuida en semanas, ya que es así como está organizada la modalidad semipresencial.
También se pueden consultar las lecciones impartidas en el curso anterior, 2022/23 y las lecciones impartidas en el curso siguiente, 2024/25.
Nota: Una vez instalado XAMPP, haced una copia de seguridad de la carpeta /xampp/apache/conf/ y de los archivos /xampp/php/php.ini y /xampp/phpMyAdmin/config.inc.php por si necesitáis recuperarlos si cometéis errores al configurar XAMPP.
En esta lección se tratan dos puntos muy importantes:
Podéis consultar unas posibles soluciones de estos ejercicios.
Este curso vamos a utilizar Visual Studio Code (VSCode) como editor para PHP. A lo largo del curso iré completando y ampliando estas lecciones dedicadas a VSCode
En esta lección se explica cómo conseguir e instalar VSC.
En esta lección os explico cómo están organizadas las posibilidades de personalización de VSCode. No modifiquéis VSCode todavía.
En esta lección iré añadiendo explicaciones del manejo de VSCode a medida que avancemos en su uso.
En esta lección os detallo la configuración de VSCode que quiero que utilicéis. No modifiquéis VSCode todavía.
En esta lección os detallo la configuración de VSCode que quiero que utilicéis. No modifiquéis VSCode todavía.
Podéis consultar unas posibles soluciones de estos ejercicios.
Estos ejercicios están pensados para comprobar que se ha hecho correctamente la configuración tanto de Visual Studio Code como de Apache y PHP. Si algún ejercicio no da el resultado indicado, revisad la instalación y configuración del perfil, de Apache o de PHP.
En la primera parte del curso de PHP vamos a hacer un pequeño repaso general de PHP, tocando los temas vistos el año pasado en el módulo LMSGI: variables, operaciones, if ... else .. y for ... además de las matrices, un tipo de variable que permite almacenar varios datos distintos en una sola variable. Esta parte la he llamado PHP, sin formularios porque las páginas no contienen formularios, por lo que el usuario no puede proporcionar información a los programas. Para que cada vez que se ejecuten los programas los resultados sean distintos, recurriremos a números aleatorios.
El estilo que se recomienda en esta lección es el que tenéis que utilizar en vuestros programas.
Estos ejercicios se pueden hacer de muchas maneras, incluyendo más o menos líneas en cada uno de los fragmentos PHP o HTML.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
En estos ejercicios se necesita la función rand() que genera números aleatorios que se comenta en la lección Operaciones aritméticas (apartado Números aleatorios).
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta semana no os pido hacer ejercicios con variables, pero quiero que leáis esta lección.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
En los ejercicios de esta semana aparecen tablas HTML, así que conviene que conozcáis las etiquetas que las definen. Básicamente, una tabla (<table>) está formada por filas (<tr>) que a su vez están formadas por celdas (<td> o <th>), aunque suelen aparecer más etiquetas que se explican en la lección.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
En estos ejercicios se utilizan entidades numéricas para mostrar emojis, como vimos en el módulo Lenguaje de Marcas. Para refrescar la memoria podéis releer las lecciones UTF-8 y Entidades (en los apuntes HTML/CSS).
PHP dispone de varias estructuras de control para definir bucles. Empezaremos por la estructura for y después de ver matrices veremos la estructura foreach. Tened en cuenta que la estructura for de Python que vimos en el módulo de Lenguaje de Marcas se parece más a la estructura foreach de PHP que a la estructura for de PHP.
Tradicionalmente los colores en las páginas web se han definido mediante nombres de colores o códigos RGB, pero los navegadores actuales permiten usar códigos HWB que son más intuitivos que los códigos RGB. En esta lección se explica cómo se expresan los colores mediante códigos HWB. El año pasado, en el módulo de Lenguaje de marcas, trabajamos con códigos HSL, muy parecidos a HWB pero algo menos intuitivos. Como este año todos los navegadores ya admiten HWB, he decidido pasar a este formato.
En estos primeros ejercicios, es fácil identificar el papel de los bucles porque la página contiene elementos html repetidos que son precisamente los que tienen que generar los bucles.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Estos ejercicios son un poco más difíciles porque el papel de los bucles es también el cálculo de contadores y acumuladores, lo que no es tan obvio como la generación de elementos html repetidos.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Las matrices son un tipo de variable muy flexible que utilizaremos mucho a partir de ahora. En los ejercicios de esta semana, los índices de las matrices son numéricos y correlativos. En las próximas semanas trabajaremos con matrices asociativas, es decir, de índices no numéricos o no correlativos.
En estos ejercicios no hace falta utilizar bucles ni if ... else ..., pero sí que hay que definir una o varias matrices.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Los bucles foreach permiten recorrer estructuras (matrices, recursos, etc) sin preocuparse por el número de elementos, lo que los hace muy útiles cuando se deben recorrer estructuras no generadas por el propio programa, como información proveniente de formularios o consultas a bases de datos.
En estos ejercicios se deben utilizar bucles, tanto for como foreach (aunque en varios se podrían utilizar solamente bucles for, por supuesto). La idea es la siguiente:
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta lección comenta algunas de las funciones disponibles en PHP para trabajar con matrices. Estas funciones simplifican mucho la manipulación de matrices.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Normalmente, el primer ejercicio de examen consiste en la realización de una página sin formularios. En el apartado de Exámenes de los apuntes, tenéis exámenes de los últimos tres cursos, que podéis hacer como ejercicios y como preparación de cara al examen. Por cierto, en los apuntes no se incluyen soluciones de ejercicios de examen.
En estos ejercicios se necesita escribir fórmulas para generar series de números que permiten crear dibujos. Mirando el código fuente de los programas de ejemplo se pueden ver los números, pero las fórmulas se os tienen que ocurrir a vosotros. En realidad, es más fácil de lo que parece, porque las series de números forman sucesiones aritméticas por lo que las fórmulas son (casi) siempre del tipo a * x + b, donde a y b son números enteros.
Son ejercicios que podéis repetir las veces que queráis. El primero es trivial, pero el segundo exige bastante cálculo mental (aunque podéis empezar haciéndolo con papel y lápiz y calculadora), sobre todo si se elige el mayor nivel de dificultad.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
En estos ejercicios aparecen matrices de dos dimensiones. No son ejercicios muy difíciles, pero cuando se trabaja por primera vez con matrices de varias dimensiones, es fácil liarse. Normalmente, os ayudará pensar las matrices de dos dimensiones como tablas de bases de datos, en las que el primer índice indica el registro y el segundo índice indica la columna.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta semana y la próxima vamos a ver el uso de formularios en PHP. Lo haremos en dos pasos:
En esta parte se trata de aprender a utilizar formularios y a recoger los datos introducidos en ellos, pero no haremos ninguna comprobación sobre los datos recogidos.
En esta parte veremos cómo comprobar los datos recibidos y cómo mostrar mensajes al usuario en caso de que no sean correctos.
Esta semana vamos a hacer programas sin comprobación posterior y la semana que viene ya haremos la comprobación de los datos. Los ejercicios son fáciles, pero esta semana hay bastante que leer.
Estas son las actividades a realizar durante esta semana.
El mecanismo de HTML para recoger información del usuario son los formularios, que nos permitirán crear páginas web interactivas.
Esta lección forma parte de los apuntes de HTML y trata los aspectos de los formularios relacionados con la presentación del formulario. Comenta las etiquetas y atributos más básicos y que más vamos a utilizar.
Esta lección completa la lección anterior. Comenta etiquetas y atributos que vamos a utilizar mucho menos, pero que ocasionalmente podéis encontrar en algún ejercicio.
Esta lección es una presentación de los formularios desde el punto de vista de PHP, es decir, cómo llegan los datos desde un formulario a un programa PHP y qué consideraciones de seguridad tenemos que tener en cuenta.
Esta lección trata los aspectos de los formularios relacionados con el tratamiento de los datos. Faltan por contar los tipos de controles nuevos en HTML 5, pero su tratamiento no difiere de los controles de HTML 4.
Esta lección es bastante densa porque aborda los problemas y riesgos de los programas que recogen datos. El problema consiste básicamente en que no podemos saber a priori qué datos van a llegar al programa y probablemente llegarán datos con mala intención. La solución es que los programa no trabajen directamente con $_REQUEST, sino con variables que contengan los datos recibidos una vez "limpiados" y comprobados. Para ello, usaremos una función recoge().
En resumen, todo lo que se cuenta en esta lección es para justificar el uso de la función recoge() básica que se encuentra en la lección La función recoge().
En esta lección se explica cómo realizar los ejercicios con formularios. El ejemplo del apartado recogida de datos sin comprobación os puede servir de guía para la página de ejercicios de esta semana.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
En esta lección se comentan varias familias de funciones de comprobación de datos, pero tened en cuenta que de todas las funciones que se comentan en esta página, las que vamos a utilizar principalmente son is_numeric() y ctype_digit() y en algún caso filter_var().
En esta lección se comenta la estructura general que quiero que deis a los programas que reciben datos desde formularios, con ejemplos concretos.
En los ejercicios de esta semana ya hace falta incluir el tratamiento de errores de los datos recogidos del formulario. En esta lección se explica también el modelo de resolución de ejercicio, con las diferentes partes de la página (recogida de datos, tratamiento de errores, generación del resultado). Es muy importante entender la estructura propuesta porque se utilizará en todos los ejercicios posteriores.
En el último ejercicio aparecen muchos controles. Si habéis hecho el resto, no es necesario hacerlo.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Estos ejercicios, salvo el último, son una selección de ejercicios de las páginas que he incluido esta semana como Ejercicios de ampliación. Es decir, que con que hagáis los que están en la página Selección (1) es suficiente, pero si queréis podéis hacer el resto.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Podéis descargar las plantillas de los ejercicios desde la página de exámenes.
Estos ejercicios utilizan formularios con un número indeterminado de controles, por lo que los nombres deben tener estructura de matriz.
Para generar los formularios de los ejercicios 3 y 5 se necesita escribir un bucle dentro de otro (esta estructura se denomina bucles anidados, en este caso, de variables independientes).
Podéis descargar unas posibles soluciones completas de estos ejercicios.
Antes del curso 2016/17 no daba ejercicios sin formularios y por eso tenía muchos ejercicios con formularios. Ahora no tiene sentido que os pida hacer todos los ejercicios con formularios, pero podéis hacer los que os parezcan interesantes como ejercicios de ampliación:
En los apuntes hay otras páginas de ejercicios que preparé en cursos anteriores que podéis hacer también como ejercicios de ampliación, pero son más difíciles (o bastante distintos a lo que estamos viendo este año):
Podéis hacer tantos como queráis. Normalmente los primeros de cada página son más fáciles y se van complicando.
Podéis descargar las plantillas de los ejercicios desde la página de exámenes.
Esta lección NO entra en el examen de la primera evaluación.
Esta lección es un resumen brevísimo, ya que no necesitamos profundizar en este tema. En el módulo de Servicios de red veréis el tema con más detalle.
En esta lección se comenta las dos cabeceras que vamos a utilizar: Location para redireccionar páginas y Content-type para definir tipos MIME.
Si queréis hacer pruebas con el BOM, podéis instalar Notepad++ y el plug-in HEX-Editor (o bien la extensión Hex Editor de VSCode). En la lección otros programas > Notepad++ tenéis instrucciones detalladas.
Los ejercicios del primer apartado (redirecciones) nos permiten mejorar los formularios. Cuando la página a la que el formulario envía los datos detecta un error, se redirige automáticamente a la primera, para que se vuelva a mostrar el formulario con los errores detectados. Cada ejercicio se basa en el anterior. Para hacerlos se recomienda ir paso a paso:
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Las sesiones nos permiten compartir variables entre diferentes páginas web, lo que permite crear verdaderas aplicaciones web.
La parte de teoría es bastante sencilla, pero las aplicaciones son infinitas. Para hacer los ejercicios, os recomiendo que vayáis escribiendo el programa siguiendo el orden de utilización de la aplicación. En las soluciones de Sesiones (1) he indicado precisamente ese orden, para que os resulte más fácil entenderlas. Que no os importe mirar las soluciones al hacer los dos o tres primeros ejercicios.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Son ejercicios similares a los ejercicios Sesiones (1) de la semana pasada, pero con más páginas cada uno.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
En estos ejercicios se deben guardar matrices en $_SESSION. Son complicados porque en ellos aparecen todo lo que hemos visto en el curso, así que son buenos ejercicios de recapitulación.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
Estos ejercicios se pueden también considerar ejercicios de recapitulación. Se trata de hacer una aplicación web (en este caso, juegos) más compleja de lo que hemos hecho hasta ahora y para ello los ejercicios están "encadenados". En cada uno se van añadiendo más elementos hasta obtener finalmente la aplicación completa. Cada ejercicio se debe ir haciendo a partir del anterior.
El objetivo de estos ejercicios es obtener finalmente una máquina tragaperras completa. En las plantilla sólo he incluido los dos primeros ejercicios, porque lo mejor a partir del segundo ejercicio es hacer cada ejercicio a partir del anterior
Para estos ejercicios os he proporcionado tres tipos de ayuda: en cada enunciado hay un desplegable con los puntos que debe contemplar vuestro programa, en la página de ayuda se muestran trocitos de código correspondientes a los puntos mencionados en los enunciados, y podéis descargar unas posibles soluciones completas de estos ejercicios.
El objetivo de estos ejercicios es completar un juego de memoria.
Para estos ejercicios os he proporcionado tres tipos de ayuda: en cada enunciado hay un desplegable con los puntos que debe contemplar vuestro programa, en la página de ayuda se muestran trocitos de código correspondientes a los puntos mencionados en los enunciados, y podéis descargar unas posibles soluciones completas de estos ejercicios.
El objetivo de estos ejercicios es completar una versión simplificada del juego de los 80 Simon.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
Podéis descargar las plantillas de los ejercicios desde la página de exámenes.
El ejercicio 3 es el más complicado al haber formularios y redirecciones.
En cada enunciado hay un desplegable con los puntos que debe contemplar vuestro programa y podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta lección es una presentación general a la forma de trabajar con bases de datos en PHP.
Esta lección es una introducción a la biblioteca PDO, biblioteca que permite trabajar con diferentes bases de datos. En los ejercicios se trabaja con SQLite, incluida en PHP, o con MySQL/MariaDB, instalada por XAMPP. La lección es densa, pero he incluido muchos ejemplos de código para ayudaros a entender todos los detalles que hay que que considerar al trabajar con bases de datos.
Estos ejercicios son para familiarizarse con el uso de la biblioteca PDO. Los fragmentos de código necesarios se pueden copiar y pegar de los fragmentos de código de ejemplo de la lección PDO y modificar en caso necesario. En cada ejercicio se pueden aprovechar el código de los ejercicios anteriores.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta lección pretende ser una recopilación de detalles a tener en cuenta al preparar una aplicación que pueda utilizar tanto MySQL como SQLite, pero está muy incompleta.
Esta lección está desactualizada, pero os puede servir para haceros una idea de cómo funcionan los ataques de inyección SQL.
El objetivo de esta semana y la siguiente es crear una aplicación que gestione una tabla de una base de datos.
Estos ejercicios son una serie de ejercicios encadenados para terminar obteniendo una aplicación que gestiona una tabla de una base de datos. Cada ejercicio se hace a partir del anterior.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
En estos ejercicios se parte de la aplicación obtenida en el último ejercicio de los ejercicios Bases de datos (1) y se trata simplemente de ampliar el número de columnas de la tabla.
Estos ejercicios sí que los podréis realizar fácilmente y su objetivo es ayudaros a comprender la aplicación aunque no la hayáis programado vosotros.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
El objetivo de esta semana es mejorar la aplicación programada la semana pasada que gestiona una tabla de una base de datos, añadiendo comprobaciones y funcionalidades que mejoren la usabilidad de la aplicación.
Los dos ejercicios amplían la aplicación obtenida en el último ejercicio de los ejercicios Bases de datos (1), añadiendo mejoras relacionadas principalmente con la usabilidad de la aplicación.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
En estos ejercicios se parte de la aplicación obtenida en el último ejercicio de los ejercicios Bases de datos (2) y se trata simplemente de ampliar el número de columnas de la tabla.
Estos ejercicios sí que los podréis realizar fácilmente y su objetivo es ayudaros a comprender la aplicación.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta semana continuaremos ampliando la aplicación de Agenda obtenida la semana pasada, añadiendo un sistema de identificación de usuarios.
Los ejercicios amplían la aplicación obtenida en el último ejercicio de los ejercicios Bases de datos (2), añadiendo un sistema de gestión de usuarios. Como la semana pasada, estos ejercicios están encadenados para que sea más fácil alcanzar el objetivo final. Cada ejercicio se hace a partir del anterior.
Podéis descargar unas posibles soluciones completas de estos ejercicios.
Esta semana culminaremos la parte de Bases de datos realizando modificaciones a la aplicación obtenida la semana pasada. Los ejercicios de examen será similares a los ejercicios de esta semana.
Son ejercicios seleccionados entre los ejercicios de examen del curso 2021/22 y consisten en ampliar de distintas formas las funcionalidades de la aplicación obtenida en el ejercicio Bases de datos (3) 5.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Podéis consultar unas posibles soluciones de estos ejercicios. También podéis descargar unas posibles soluciones completas de estos ejercicios.
Podéis descargar las plantillas de los ejercicios desde la página de exámenes.