¡Ya estamos en Twitter!

Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad

Leer datos en tu CGI

por Uriel Lizama

Introducción

En este tutorial vamos a ver como recopilar información enviada a nuestros CGI's ya sea por el método de POST o de GET.

En este tutorial no vamos a ver nada del código HTML que se debe de usar en las formas ni nada por el estilo, pues es un sitio de perl no de HTML, sin embargo si puedo recomendar un tutorial que me encontré por ahí que habla acerca de como crear formas en HTML. http://www.cs.buap.mx/~freddy/taller/html.html/

GET

Con este método el query(es el nombre con el que se denomina la información enviada al CGI) viene en la variable de entorno llamada QUERY_STRING.

Todas las variables vienen separadas por el símbolo de "&" y se sabe que empieza el query pues siempre inician por el símbolo de "?".

Por ejemplo si tenemos un CGI llamado "email.cgi" y quisieramos enviar 2 variables, email y nombre, construiriamos el URL de la siguiente manera:

http://www.misitio.com/cgi-bin/[email protected]&nombre=MiNombre

Ahí vemos claramente como se identifican las variables y sus valores. Este método es muy usado por los buscadores de páginas como Google, Yahoo, etc.

NOTA: En el query los símbolos especiales son codificados automáticamente, de esta manera se evitan confusiones.

Ya sabemos como se ve un query envíado por GET, ahora veamos como leerlo con el CGI y meterlo dentro de un hash al que le vamos a llamar "%Variables":

my(%Variables); #Iniciamos el hash

#Leemos el query enviado
my $buffer = $ENV{'QUERY_STRING'};

#Dividimos cada variable
my @pairs = split(/&/, $buffer);

foreach my $pair (@pairs) {
#Separamos la variable de su valor
my ($name, $value) = split(/=/, $pair);

#Decodificamos
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

#Asignamos una nueva llave al valor
$Variables{$name} = $value;
}

Así que si ponemos este código, y seguimos con el primer ejemplo que dí acerca del query (variables de email y nombre), podríamos desplegar las variables llamando a las llaves:

print "$Variables{'email'}\n";
print "$Variables{'nombre'}\n";

Recuerda que la llave se va a llamar exactamente igual al nombre de la variable. En caso de que dos variables se llamen igual, el valor que se utiliza es el último.

POST

En este método la información se envía por debajo, en lo que se llama "standard input" que podría traducirse como "entrada estandár". Si sabes algo de C o algun otro lenguaje de programación se te va a hacer conocido el término.

Así que para poder leer la información envíada por el método POST hay que leer el "standard input":

my $buffer; #inicializa contenedor

my %Variables; #inicializa el hash

#Lee el Standard input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

#Dividimos las variables
my @pairs = split(/&/, $buffer);

foreach my $pair (@pairs) {
#Dividimos el nombre del valor
my ($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

#Asignamos el valor a una llave
$Variables{$name} = $value;
}

Como ves la manera de leer el query es casi similar al GET, lo único que cambia es de donde sacamos el query. Y con este ejemplo de igual manera todas las variables las metemos en el hash de "%Variables" donde la llave va a ser el nombre de la variable.

Módulo de CGI

Otra manera en la cual podemos recoger los datos envíados al CGI es usando el módulo de CGI.

Si deseas usar este módulo para leer las variables envíadas, poniendolas en un hash lo puedes hacer de la siguiente manera:

use CGI; #usar módulo CGI

my $q = new CGI; #nuevo objeto CGI
my %Variables = $q->Vars; #asignar los valores al hash


¿Cuál es el mejor método?

Esa pregunta no se puede responder debido a que difiere dependiendo de la circunstancia. Por emplo como lo había dicho, si queremos envíar los valores al CGI por medio de una liga, es necesario que lo hagamos por medio de GET. También a los buscadores les encanta envíar sus datos por GET, pues así el usuario puede apreciar como se esta buscando, y cual fue el query que se uso.

Sin embargo si se van a mandar muchos datos, o queremos envíar variables ocultas, lo mejor es hacerlo por POST pues de esta manera el usuario no puede ver que variables fueron envíadas.

Por eso es necesario que veas tus necesidades para que así puedas escoger el método que a ti te combiene.

PUBLICIDAD
Aprende a instalar formularios web con nuestro video tutorial
Con este nuevo video tutorial que tenemos preparado para ti, te explicamos lo que es un CGI y después te llevamos paso a paso a través del proceso de instalación del NMS Formmail, un formulario web gratuito.

¡Aprende de manera sencilla y rápida a instalar un formulario web! Como el tutorial lo hemos hecho en video es sumamente sencillo seguir las instrucciones y comprender más a fondo lo explicado.

¡Checa todo los detalles haciendo click aquí!

Comparte:
Categorías de Tutoriales:
En Nuestros Foros:

    Software error:

    junk after document element at line 1, column 32, byte 32 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187.
    

    For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

  • Entra a los foros »
Socializa:
Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Perl en Español es mantenido con Movable Type
Todo el contenido de Perl en Español está bajo una licencia CC:
Creative Commons License