Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-2413 Desarrollo de aplicaciones web
Profesor: Jeisson Hidalgo Céspedes
Examen 03
El examen es de carácter práctico y debe realizarse en una computadora con acceso al web. El estudiante puede disponer de cualquier recurso o referencia que guste, sean hechos durante el curso, estén disponibles en Internet, o en libros. Se dispone de tres horas para entregar la prueba y debe realizarse en forma individual.
En esta oportunidad usted continuará implementando el generador automático de exámenes para que los estudiantes del sitio web educativo ficticio, puedan practicar y ser evaluados, cuantas veces gusten, sobre los temas de su interés. En el examen 02 usted implementó la lógica del cliente, y en esta ocasión la lógica del servidor. Suponga que las preguntas están almacenadas en una tabla question de una base de datos de MySQL, como la siguiente:
| id | text | weight | options | answer |
|---|---|---|---|---|
| 1 | ¿A cuánto equivale una hectárea? | 10 | 100 metros cuadrados 1,000 metros cuadrados 10,000 metros cuadrados 1 kilómetro cuadrado |
3 |
| 2 | ¿Cómo se llama la supercomputadora que controla el Discovery 1 en "2001: Odisea del Espacio"? | 10 | TMA-1 HAL 9000 ENIAC HANGAR 68 |
2 |
| 3 | ¿El nombre de la sustancia "Nicotina" proviene de:? | 10 | Jean Nicot que introdujo la planta del tabaco en Francia De sus componentes: nitrógeno e hidrógeno, y su efecto insecticida De su descubridor: Francesco Nicota |
1 |
| ... | ... | ... | ... | ... |
Su objetivo es crear una aplicación en PHP que genere exámenes con preguntas tomadas aleatoriamente de la tabla anterior. Recuerde que el servidor debe enviar al cliente un objeto JSON (JavaScript Object Notation) con algunas preguntas seleccionadas aleatoriamente, como el que se muestra adelante, ya que la rutina en JavaScript construye un formulario web a partir de este objeto. Para efectos de esta evaluación, no es necesario que el servidor web reciba, valide, califique, ni almacene las respuestas de los visitantes. Aunque esto sería indispensable en una aplicación real.
Evaluación
Descargue el material de trabajo del examen. En él encontrará la rutina de JavaScript que toma el objeto JSON, genera el formulario y califica en el navegador las respuestas del visitante. Usted deberá modificar el archivo exam.php para que cada vez que sea invocado genere un examen diferente. Recuerde que el resultado siempre debe ser un documento XHTML5 válido.
- [15%] Conecte su aplicación PHP con un objeto
PDOa la base de datosexam, accesible únicamente en forma local encursoweb.ecci.ucr.ac.cr, con el usuarioexamy la contraseña que brinde el profesor. Si prefiere trabajar en su máquina local, puede crear una base de datos de MySQL e inicializarla con las instrucciones del archivoexam.sqlincluido en el material de trabajo del examen. Note que es indispensable que utilice objetos PDO y no funcionesmysql_xxx(), ya que están descontinuadas. Además todo el código de manejo de base de datos debe hacerse dentro de una seccióntry/catch. - [10%] Implemente en PHP una clase
Question, de tal forma que -más adelante- cada pregunta recuperada de la base de datos no será un arreglo sino un objetoQuestion. - [10%] Las opciones de respuesta de la pregunta se almacenan en un string multilínea en la base de datos. Implemente en su clase
Questionun método que transforme el string multilínea en un arreglo de opciones de respuesta. - [15%] Haga que su programa PHP reciba un parámetro entero positivo
sizepor el método GET, el cual indica la cantidad de preguntas aleatorias que debe generar como resultado. Si el parámetro no es provisto o no es válido (no es un entero, excede el número de preguntas en la base de datos, etc.), asuma un valor de 10. Evite que a través de este parámetro se pueda inyectar código maligno en PHP, SQL, HTML, o JavaScript. - [30%] Implemente una función que recibe un parámetro
sizey al ser invocada, retorna un arreglo desizeobjetosQuestionobtenidos aleatoriamente de la base de datos. Es importantísimo impedir que hayan preguntas repetidas en el arreglo resultante, ya que confundirá al visitante. En sus consultas utilice instrucciones preparadas (PDO::prepare()). {Si lo prefiere, en lugar de implementar una función libre, cree otra clase que almacene el arreglo resultado internamente y lo llene al invocar un método de la clase}. - [20%] Implemente una función que reciba el arreglo de preguntas aleatorias y las imprima como un arreglo de objetos JSON. Invoque esta función para generar el objeto JSON que la rutina de JavaScript necesita para construir el formulario. Investigue en la documentación de PHP si hay alguna función que pueda ayudar en esta labor. {Si en el ejercicio anterior implementó una clase, en este ejercicio agregue otro método a dicha clase}.
Para presentar su solución, comprima los archivos que haya generado. Suba el archivo comprimido a la plataforma educativa de la ECCI, en la evaluación con nombre Examen 03.