lunes, 16 de diciembre de 2013

Pasar parámetros POST y GET - CGI de Perl


Pasar parámetros POST y GET - CGI de Perl



Interesante: Vídeo Tutorial del CGI de Perl

Interesante: Vídeo Tutorial del lenguaje Perl

Bien, ya hemos avanzado algo respecto a como utilizar CGI, pero uno de los pilares fundamentales de este sistema es la de recibir y enviar información.

En este apartado del tutorial vamos a ver como enviar parámetros GET y POST y capturar esos valores para realizar determinadas acciones. Para ello es necesario tener ciertos conocimientos de HTML y saber utilizar formularios, si algunas vez has programado con PHP o ASP no te será difícil comprenderlo.

El módulo CGI contiene un método llamado param() con el cual se puede capturar el valor del parámetro enviado.

Para el siguiente ejemplo vamos a crear un archivo llamado sumar.html en la carpeta tutorial-cgi, en el cual incluiremos un formulario que podrá ser enviado a través del método GET y como verás al final de este capítulo también a través del método POST, este formulario contendrá dos campos desde los cuales podremos realizar una suma. Enviaremos los datos a un script llamado sumar.cgi que nos regresará la suma de ambos números.

Crea una archivo llamado sumar.html y guárdalo en la carpeta tutorial-cgi ...


<!DOCTYPE HTML>
<html>
<head>
<title>SUMAR</title>
</head>
<body>
<center>
<h1>Sumar</h1>
<form method="get" action="cgi-bin/sumar.cgi">
Sumar: <input type="text" name="numero1"> + <input type="text" name="numero2">
<input type="submit" value="SUMAR">
</form>
</center>
</body>
</html>


Ahora ejecuta en el navegador la siguiente ruta ... http://localhost/tutorial-cgi/sumar.html



Ahora es el momento de crear el script sumar.cgi, así que crea el archivo y guárdalo como siempre en la carpeta cgi-bin ...


#!"C:\strawberry\perl\bin\perl.exe"

use strict;
use CGI;

#Objeto CGI
my $cgi = new CGI;

#Obtener el valor del primer campo
my $numero_1 = $cgi->param("numero1");
#Obtener el valor del segundo campo
my $numero_2 = $cgi->param("numero2");

#Suma total
my $total = $numero_1 + $numero_2;

#Filtrar los valores de los campos para que sólo acepte números
#Esto ahora no es importante ya que es una simple demo
#Cuando hagas consultas a una base de datos es imprescindible
if ($numero_1 !~ /^[0-9]+$/ or $numero_2 !~ /^[0-9]+$/)
{
$total = "El valor del campo tiene que ser un numero";
}

#Cabecera HTML
my $cabecera = $cgi->header(-type => "text/html");
print $cabecera;
#Mostrar en el navegador la suma total
print "<h1>La suma de ambos números es ... " . $total . "</h1>";
print "<a href='../sumar.html'>Regresar al formulario</a>";


Cuando hayas guardado el script sumar.cgi es hora de hacer la prueba de sumar dos números ...



Si envío el formulario ocurre lo siguiente ...




Ok, como puedes ver ha sumado ambos números, en el script se comenta algo que es necesario tener en cuenta desde un principio, y es la seguridad. Filtrar los datos, porque en algún momento tendrás que realizar consultas a una base de datos y si los datos no son filtrados adecuadamente puedes tener graves problemas de seguridad.

Prueba a incluir en los campos otro tipo de datos que no sean números ...



Si envío el formulario ocurre lo siguiente ...




 También quiero que quede claro que puedes recibir tanto parámetros enviados a través del método GET, como parámetros a través del método POST, es decir, al método param no le influye el tipo de método utilizado. Para que lo pruebes in situ, sólo haz un pequeño cambio en el atributo method del formulario y cambia get por post y vuelve a enviarlo, verás que todo funciona bien, lo único que cambia es el método.