Depto. Automática y computación
Universidad Pública de Navarra
Daniel Morató
daniel.morato@unavarra.es

Laboratorio de Interfaces de Redes

3º Ingeniero Técnico en Informática de Gestión

Práctica 5 - CGIs para el procesamiento de formularios

1. Objetivos

En esta práctica veremos cómo procesar en CGIs formularios completados por el usuario. Para ello emplearemos la librería CGIC mencionada en la documentación del Apache

2. Obteniendo la librería CGIC

Pueden obtener la librería CGIC en: http://www.boutell.com/cgic/ , aunque por agilizar se la hemos dejado disponible en el directorio /opt3/lir/ficheros/ como el fichero cgic202.tar.gz

Copie ese fichero al directorio donde pretenda desarrollar CGIs en C. Descomprima el fichero, entre en el directorio y compile la librería con make.

En el mismo directorio de la librería encontrarán la documentación de la misma en la forma del fichero cgic.html.

3. Conceptos básicos sobre el empleo de la librería CGIC

Esta librería nos va a permitir procesar la información que nos envía el usuario a través de un formulario con mucha facilidad. Se va a encargar de distinguir si se envió el formulario mediante un GET o un POST y de decodificar la cadena con el contenido del formulario. Nos ofrece una serie de funciones para acceder a los valores de los diferentes elementos del formulario, según el tipo del que fueran, así como para crear la cabecera HTTP.

A. Indicaciones generales sobre el empleo de la librería CGIC

Como indica la documentación hay varias cosas a tener en cuenta a la hora de emplear esta librería:

B. Ejemplo de uso

Creamos una página html con un formulario simple:

<html>
<head>
<title>Formulario simple</title>
</head>
<body>

<form action=micgi1.cgi method=get>
Nombre: <input type=text name=nombre>
</form>

</body>
</html>

Y ahora nuestro fichero en C para crear el programa que va a procesarlo:

#include <stdio.h>
#include "cgic202/cgic.h"

int cgiMain()
{
    char	texto[200];
    
    cgiHeaderContentType("text/html");

    fprintf(cgiOut, "<html><head><title>CGI de ejemplo</title></head>\n<body>\n");

    cgiFormStringNoNewlines("nombre", texto, 199);
    fprintf(cgiOut, "Nombre introducido: %s\n", texto);    
    fprintf(cgiOut, "</body></html>\n");
}

Guarden el código fuente anterior con el nombre micgi1.c y creen un fichero Makefile como el siguiente:

micgi1: micgi1.c
	gcc micgi1.c cgic202/cgic.o -o micgi1.cgi

Compilen el CGI empleando ese Makefile y comprueben su funcionamiento.

Como ven el código presentado primero llama a una función que crea la cabecera HTTP para el tipo MIME que le especifiquemos (es decir, saca el Content-type: text/html). Obtenemos lo que ha escrito el usuario en el elemento del formulario con nombre "nombre" empleando la función cgiFromStringNoNewLines() que nos sirve cuando lo que queremos debe estar contenido en una sola línea. Y finalmente otro detalle a tener en cuenta es que cuando queramos volcar la salida del CGI en vez de hacerlo a la salida estándar (stdout) debemos hacerlo al stream cgiOut que ha creado la librería.

C. CGI para apuntarse a un grupo de prácticas

Creen un programa en C que emplee esta librería y que procese el formulario que crearon en la práctica sobre HTML. El CGI debe recoger los datos del nuevo miembro de un grupo de prácticas y añadirlos a un fichero de texto. Si el usuario no ha introducido todos los campos que son imprescindibles se le devolverá una página con un mensaje de error.

En la documentación de la librería encontrarán toda la información necesaria para poder procesar los campos del formulario. Tengan en cuenta que los campos del DNI y el NIA son números enteros.

Checkpoint
Muestren el programa al profesor de prácticas y expliquen cómo funciona.

4. Trabajo opcional

Creen las páginas HTML y CGIs necesarios para poder colocar un libro de visitas o GuestBook en una página web. Añádanle además un interfaz (otra página HTML y CGIs) para el administrador del libro de visitas que le permita borrar entradas al mismo.

Si lo completan muéstrenselo al profesor de prácticas y puede que obtengan un checkpoint extra.

5. Conclusiones

En esta páctica hemos visto cómo crear CGIs en C empleando una de las numerosas librería disponibles. Esto nos ha permitido acceder cómodamente al contenido de un formulario rellenado por el usuario. En las siguientes prácticas veremos cómo podemos obtener resultados similares empleando PHP, que resulta más sencillo de programar y depurar.


Depto. Automática y computación
Universidad Pública de Navarra
Daniel Morató
daniel.morato@unavarra.es