EJERCICIO:lista_articulos.pl.

En este ejercicio lo que hay que hacer es un CGI que liste todos los artículos de la tabla de artículos. Hay que tener en cuenta que hay funciones de escritura de un artículo, escritura de cabecera HTML y escritura de cola HTML, y que se realizan en el esqueleto del CGI. Sólo se tiene que realizar la conexión con la base de datos, leer los datos en la tabla de artículos (hacer un SELECT, cerrar la conexión y mostrar los mensajes necesarios, tanto como si hay un error, como si no lo hay, teniendo en cuenta que estamos en un CGI y, por lo tanto, tenemos que escribir setencias HTML . El esqueleto del CGI es el siguiente:


#!c:\perl\bin\perl.exe

#Usamos las librerias de acceso a BD
use DBI;

my $base_datos="ce";   #Nombre de las base de datos
my $tabla_articulos="articulos"; #Nombre de la tabla de articulos

my $usuario="root"; #Usuario de la BD
my $clave="richal"; #Password de la BD
my $driver="mysql"; #Utilizamos el driver de mysql

#Creamos la sentencia SQL
my $SQL_consulta="select * from $tabla_articulos;";

#Escribimos la cabecera de la pagina HTML
print "Content-type: text/html\n\n";
escribe_inicio_html();


#Conectamos con la BD, miramos si hay algun error(HACER)

#Hacemos una consulta en la tabla, y miramos si hay algun error(HACER)
#Mostramos los elementos de la tabla con la funcion muestra_articulo,
#cuyo formato es:
#                       muestra_articulo($id,$nombre,$precio);


#Nos desconectamos de la BD. (HACER)



#Escribimos la cola de la pagina HTML
escribe_final_html();

#Terminamos
exit;
#--------------------------------------------------------------------
#--------------------------------------------------------------------
#----------------------------FUNCIONES-------------------------------
#--------------------------------------------------------------------
#--------------------------------------------------------------------
#En esta funcion muestra el articulo que se le pasa como parametro
#el formato es muestra_articulo($id,$nombre,$precio);
sub muestra_articulo()
{
        my ($id,$nombre,$precio)=@_;

print <<articulo_HTML;

	<TR>
         <strong>
         <TD rowspan=2 valign=middle bgcolor="#008caa"><font color="#DDDDDD" face="sans-serif size=+2">$id</font></TD>
         <TD rowspan=2 valign=middle bgcolor="#008caa"><font color="#DDDDDD" face="sans-serif size=+2">$nombre</font></TD>
         <TD rowspan=2 valign=middle bgcolor="#008caa"><font color="#DDDDDD" face="sans-serif size=+2">$precio</font></TD>
	 </strong>

		
	 <TD valign=middle bgcolor="#008caa">
		<FORM NAME="formBorrar$id" ACTION="/cgi-bin/borra_articulo.pl" METHOD=GET>
			<INPUT TYPE="hidden" NAME="ID" VALUE="$id">			
			<INPUT TYPE="button" VALUE="Borrar" onClick="document.formBorrar$id.submit()">
		</FORM>	
	</TD></TR>

	
	<TR> <TD valign=middle bgcolor="#008caa">
		<FORM NAME="formCompra$id" ACTION="/cgi-bin/compra_articulo.pl" METHOD=GET>
			<INPUT TYPE="hidden" NAME="ID" VALUE="$id">			
			<INPUT TYPE="button" VALUE="Comprar" onClick="document.formCompra$id.submit()">
		</FORM>	
	</TD></TR>

	
	<TR><TD colspan=3 valign=middle bgcolor="#FFFFFF"></TD></TR>
articulo_HTML
}

#--------------------------------------------------------------------
#En esta funcion escribimos el principio de la pagina HTML
sub escribe_inicio_html()
{

print <<inicio_HTML;
<html>
        <HEAD>
                <TITLE>Listar artículos (CGI)</TITLE>
        </HEAD>
        <BODY bgcolor=#FFFFFF>
        <TABLE border=0  cellpadding=0 cellspacing=0 width=100%>
         <TD valign=middle width="100%" bgcolor="#007b99">
                <font color="#DDDDDD" face="sans-serif">
                 <strong>
                        <h1 align=center style='text-align:center'>LISTAR ARTÍCULOS (CGI)</h1>
                 </strong>
                </font>
         </TD>
        </TABLE>
	<hr>
	<br>
        <TABLE border=1  cellpadding=0 cellspacing=0 width=100%>
	<TR>
         <font color="#AAAAAA" face="sans-serif"><strong>
         <TH valign=middle bgcolor="#008caa">Artículo</TH>
         <TH valign=middle bgcolor="#008caa">Nombre</TH>
         <TH valign=middle bgcolor="#008caa">Precio</TH>
	 </strong></font>
	</TR>

inicio_HTML
}

#--------------------------------------------------------------------
#En esta funcion escribimos el fin de la pagina HTML
sub escribe_final_html()
{

print <<fin_HTML;
	</TABLE>
        </BODY>
        </HTML>
fin_HTML
}
#--------------------------------------------------------------------




El esqueleto del ejemplo anterior está aquí.

Nota: Este ejemplo es muy parecido al que vimos en apartado de Consultas en DBI. Pero hay que tener en cuenta que estamos trabajando con un CGI.
2000 Francisco Javier García Castellano. fjgc@decsai.ugr.es