ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
Iniciación PHP 5. Ejercicios
1. Introducción al desarrollo web con PHP 5
Ejercicios
Universidad de Córdoba
martes, 2 de noviembre de 2010
2. Índice de contenidos
Introducción........................................................................................................................................ 3
Relación de ejercicios......................................................................................................................... 4
Ejercicio 01.......................................................................................................................................4
Ejercicio 02...................................................................................................................................... 4
Ejercicio 03...................................................................................................................................... 4
Ejercicio 04...................................................................................................................................... 5
Desarrollo de un blog......................................................................................................................... 7
Datos necesarios.............................................................................................................................7
Script de creación de la base de datos..........................................................................................8
Requisitos del sistema.................................................................................................................. 10
Listado de artículos...................................................................................................................10
Detalle de un artículo................................................................................................................ 10
Nuevo artículo............................................................................................................................11
Editar artículo............................................................................................................................12
Gadget de autenticación........................................................................................................... 13
Gadget de publicaciones anteriores..........................................................................................13
3. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Introducción
En este documento, el alumno encontrará la relación de ejercicios que ha de codifcar para
obtener una mejor puntuación a la fnalización del curso.
Adicionalmente, también se especifca el enunciado y material necesario para el desarrollo
del trabajo optativo, “Desarrollo de un blog”.
El material elaborado habrá que entregarlo en un documento con
formato PDF a la dirección de correo cristina.quintana@fai.es antes
del domingo 28 de noviembre de 2010.
Como se especifca en el programa, las dos últimas clases presenciales del curso se
dedicarán a las dudas surgidas en la resolución de los ejercicios detallados en este
documento.
http://www.fai.es Página 3 de 14
4. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Relación de ejercicios
A continuación, se detallan los enunciados de los ejercicios a desarrollar.
Ejercicio 01
Dado un número en formato numérico comprendido entre 1 y 99, imprimirlo en
formato texto.
Construir un formulario para la recepción de datos e implementar la validación de los
mismos.
Ejercicio 02
Dado un día, mes y año, imprimir el día de la semana al que pertenece.
El mes se introducirá en formato texto.
Construir un formulario para la recepción de datos e implementar la validación de los
mismos.
Ejercicio 03
Construir una clase que contenga la lógica necesaria para dibujar un calendario con el
que se muestra en la siguiente imagen.
El código a utilizar para renderizar el calendario es:
<?php
// Dibuja el calendario del mes actual
$calendar01 = new MyCalendar();
$calendar01->render();
// Dibuja el calendario del mes de agosto
$calendar02 = new MyCalendar( "agosto", 2010 );
$calendar02->render();
http://www.fai.es Página 4 de 14
5. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Ejercicio 04
Construir una aplicación con dos pantallas:
1. Listado de asignaturas
Cada asignatura será un enlace al listado de alumnos matriculados en ésta.
2. Listado de alumnos de una asignaturas
Mostrar el nombre de la asignatura y los datos de sus alumnos matriculados.
Los datos necesarios para la conexión a la base de datos son:
Host server.fai.es
Base de datos curso_php
Usuario curso
Contraseña curso_2010
Si se desea utilizar la base de datos en entorno local, el script para la creación es el
siguiente:
--
-- Base de datos: `curso_php`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `alumno`
--
DROP TABLE IF EXISTS `alumno`;
CREATE TABLE IF NOT EXISTS `alumno` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) NOT NULL,
`apellidos` varchar(255) NOT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=81 ;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `alumno_asignatura`
--
DROP TABLE IF EXISTS `alumno_asignatura`;
http://www.fai.es Página 5 de 14
6. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
CREATE TABLE IF NOT EXISTS `alumno_asignatura` (
`alumno_id` bigint(20) NOT NULL DEFAULT '0',
`asignatura_id` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`alumno_id`,`asignatura_id`),
KEY `alumno_asignatura_asignatura_id_asignatura_id` (`asignatura_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `asignatura`
--
DROP TABLE IF EXISTS `asignatura`;
CREATE TABLE IF NOT EXISTS `asignatura` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Filtros para la tabla `alumno_asignatura`
--
ALTER TABLE `alumno_asignatura`
ADD CONSTRAINT `alumno_asignatura_alumno_id_alumno_id` FOREIGN KEY
(`alumno_id`) REFERENCES `alumno` (`id`),
ADD CONSTRAINT `alumno_asignatura_asignatura_id_asignatura_id` FOREIGN
KEY (`asignatura_id`) REFERENCES `asignatura` (`id`);
http://www.fai.es Página 6 de 14
7. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Desarrollo de un blog
A continuación, se detallan los datos necesarios para el desarrollo del blog y las
características que ha de cumplir en su ejecución.
Datos necesarios
Los datos necesarios para la conexión a la base de datos son:
Host server.fai.es
Base de datos curso_php_blog
Usuario curso
Contraseña curso_2010
La base de datos consta de la siguiente estructura:
• Tabla user
Contenido de los datos del usuario con privilegios.
Columnas de la tabla:
▪ name
Nombre del usuario.
▪ last_name
Apellidos del usuario.
▪ username
Nombre con el que el usuario accede a la aplicación.
Este dato es único para cada usuario.
▪ password
Clave con la que el usuario accede a la aplicación.
• Tabla article
Contenido de los artículos introducidos por usuarios privilegiados.
Columnas de la tabla:
▪ created_at
Fecha de registro de la publicación.
▪ title
http://www.fai.es Página 7 de 14
8. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Título de la publicación.
▪ value
Contenido de la publicación.
▪ user_id
Identifcador del usuario que ha publicado el nuevo contenido.
• Tabla comment
Contenido de los comentarios introducidos tanto por usuarios privilegiados
como por usuarios anónimos.
Columnas de la tabla:
▪ created_at
Fecha de registro de la publicación.
▪ value
Contenido de la publicación.
▪ article_id
Identifcador del artículo al que hace referencia.
Script de creación de la base de datos
Se adjunta el script de creación de la base de datos a utilizar en este ejercicio, para
aquellos que deseen realizar el ejercicio en su ordenador personal.
--
-- Base de datos: `curso_php_blog`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `article`
--
DROP TABLE IF EXISTS `article`;
CREATE TABLE IF NOT EXISTS `article` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`value` varchar(255) NOT NULL,
`created_at` date NOT NULL,
`user_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id_idx` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
http://www.fai.es Página 8 de 14
9. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `comment`
--
DROP TABLE IF EXISTS `comment`;
CREATE TABLE IF NOT EXISTS `comment` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`value` varchar(255) NOT NULL,
`created_at` date NOT NULL,
`article_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `article_id_idx` (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `user`
--
DROP TABLE IF EXISTS `user`;
CREATE TABLE IF NOT EXISTS `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
`username` varchar(30) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Filtros para la tabla `article`
--
ALTER TABLE `article`
ADD CONSTRAINT `article_user_id_user_id` FOREIGN KEY (`user_id`) REFERENCES
`user` (`id`);
--
-- Filtros para la tabla `comment`
--
ALTER TABLE `comment`
ADD CONSTRAINT `comment_article_id_article_id` FOREIGN KEY (`article_id`)
REFERENCES `article` (`id`);
http://www.fai.es Página 9 de 14
10. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Requisitos del sistema
El problema a resolver se compone de cuatro pantallas, dos públicas y otras dos
protegidas por autenticación de usuario.
Listado de artículos
Esta pantalla es de acceso público para todos los usuarios de la red, y muestra
el listado de artículos almacenados en el sistema en orden descendente de la
fecha de creación.
De cada artículo se muestra el título, seguido de la fecha de creación.
Este título será un enlace a la pantalla de detalle de dicho artículo.
Además de ésto, esta pantalla posee una columna a la derecha dónde se
muestran los gadget de autenticación y publicaciones anteriores, los cuáles se
explican más adelante en este documento.
Detalle de un artículo
Esta pantalla es de acceso público para todos los usuarios de la red, y muestra
la información del artículo que se ha seleccionado en la pantalla de listado, a
través de la cuál se ha accedido.
Se detalla el título, descripción y fecha de creación del artículo.
Acompañando a estos datos, se debe implementar un formulario para añadir
comentarios asociados a dicho artículo.
Además de lo anterior, se ha de visualizar el listado de comentarios que
usuarios de la aplicación han añadido a través del formulario anterior. Estos
comentarios se han de mostrar en orden descendente según la fecha en la
que han sido introducidos.
Replicando la funcionalidad de la pantalla de listado, también posee una
http://www.fai.es Página 10 de 14
11. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
columna a la derecha dónde se muestran los gadget de autenticación y
publicaciones anteriores, los cuáles se explican más adelante en este
documento.
Nuevo artículo
Esta pantalla es de acceso restringido, sólo se podrá acceder a esta pantalla
tras autenticarse mediante el gadget de la columna de la derecha de las
pantallas de listado y detalle de artículos.
Esta pantalla muestra un formulario de creación dónde aparecerán los
campos título y artículo o descripción. Al guardar este formulario se tomará la
fecha actual para el campo create_at de la base de datos.
Debajo de este formulario, han de aparecer el listado de artículos publicados
por el usuario autenticado en orden descendente por fecha de creación.
Cada uno de estos artículos de ese listado ha de mostrar el título del artículo
http://www.fai.es Página 11 de 14
12. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
seguido de la fecha de creación.
El título ha de ser un enlace que redirija a la pantalla de edición de dicho
artículo, la cuál se describe a continuación.
Editar artículo
Esta pantalla es de acceso restringido, es decir, sólo se puede acceder a esta
pantalla, estando autenticado en el sistema.
La pantalla es idéntica a la pantalla del formulario de nuevo artículo, salvo
porque el formulario aparece completado con los datos del artículo que se
está editando.
http://www.fai.es Página 12 de 14
13. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Gadget de autenticación
Situado en las parte o columna de la derecha de las pantallas de listado de
artículos y detalle de la parte pública del blog, hay que defnir una zona dónde
los usuarios con privilegios puedan acceder al área privada.
Esta zona vendrá defnida por dos cajas de texto en las que especifcar el
nombre de usuario y la contraseña.
Al pulsar el botón registrar, se han de comprobar los datos y en caso de ser
correctos redirigir al formulario de nuevo artículo.
Gadget de publicaciones anteriores
En la columna de la derecha de las pantallas de listado de artículos y detalle
de la parte pública, hay que defnir otra zona para las publicaciones
anteriores.
http://www.fai.es Página 13 de 14
14. Av. Tenor Pedro la Virgen s/n (CADE)
Córdoba (España)
tlf. 957 40 61 40
Se ha de mostrar una lista los meses anteriores al actual y junto a estos el
número de artículos que se han publicado en dichas fechas.
http://www.fai.es Página 14 de 14