Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda con formulario

Estas en el tema de Ayuda con formulario en el foro de Programación General en Foros del Web. Bueno, lo primero gracias Monoswim por contestar antes, y no te preocupes, soy mu impaciente y muy ruidoso pero comprendo que no se me conteste ...

  #1 (permalink)  
Antiguo 18/03/2005, 06:46
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Ayuda con formulario

Bueno, lo primero gracias Monoswim por contestar antes, y no te preocupes, soy mu impaciente y muy ruidoso pero comprendo que no se me conteste al mensaje de inmediato.
Bueno, ahora tengo otro problema. Resulta que he creado un formulario en Html y me gustaria enviar los datos de este formulario a una CGI para procesarlos, pero los scripts que he encontrado me parecen demasiado complicados, hablan de recoger la cadena de datos que se envia con el método POST y almacenarla en un array y demas... Digo que me parecen complicados porque hace años ya trabajé algo con Perl y no recuerdo tener que usar este larguísimo e incomprensible script. Estoy seguro que debe haber una forma mas facil de hacerlo. Simplificando, lo que quiero es, por ejemplo crear un formulario con una campo de texto llamado "texto" (original ¿eh?) y un botón submit, y que cuando pulse este botón me envie lo que haya dentro del texto a una CGI y se almacene en la variable $texto, para yo luego puder trastear. Espero estar en lo cierto y que haya otra forma de hacerlo, porque la que he visto da un poco de miedo, a simple vista.
Ah, y gracias por lo de exit, lo usaré a partir de ahora.
  #2 (permalink)  
Antiguo 18/03/2005, 07:23
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
jajajaja, No te asustes que son simplemente líneas de código...jaja

El script más famoso y usado por excelencia es el FormMail de www.scriptarchive.com

De hecho si trabaja como dices, le llega la info a través de un string, de hecho siempre, SIEMPRE la info llega así, solamente que si usas por ejemplo el módulo CGI esto se te hace invisible a vos porque podés escribir en tu script

#!/usr/bin/perl

use strict;
use CGI;
my $cgi = new CGI;
my %input_data = $cgi->Vars;

Y ya tienes toda la información del formulario en una variable HASH

Así si quieres ver que colocaron en tu campo texto puedes hacer

print $input_data{'texto'};

Pero no te creas que no estás usando el sctring de entrada, simplemente que no lo estás usando vos, sino el módulo CGI.

Tienes dos opciones, o instalar el FormMail o que programemos (juntos, yo te ayudo) un script y que lo colguemos en la nueva seccion de TALLERES que estoy haciendo donde aparecerán ejemplos prácticos como este.

La decisión es tuya...Que prefieres ?

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 18/03/2005, 08:17
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Ayuda con formulario

Ok, tu me explicas como tiene que ser el script y yo te ayudo en lo que pueda si quieres, aunque sospecho que no será en mucho...porque he empezado con esto hace 3 dias.
Ah y lo del FormMail no se exactamente lo que es, ¿es lo del múdulo???
Bueno, el próximo lunes podemos seguir con esto, que yo salgo ya de currar y me espera un fin de semana en la playa.
Nos vemos
  #4 (permalink)  
Antiguo 18/03/2005, 09:13
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Bueno, espero que la pases bien en la playa !!! dios, como extraño el mar !!!!!!! me muero de envidia !!!!!!!

El FormMail es un script, o sea, un programa ya armado que vos configurar y ya te funciona, no necesitas programar nada...

Un módulo en cambio es una librería que te permite utilizar alguna cierta funcionalidad (como conectarte a una base de datos) sin que tengas que escribir muchas líneas de código, es para facilitarte la programación...

Bueno el lunes seguimos y ya voy a tener empezado el Taller de Perl...

Saludos
__________________
Esteban Quintana
  #5 (permalink)  
Antiguo 21/03/2005, 10:55
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
FormMail

Hola MonoSwin, ya es lunes, hoy no he podido ver el correo hasta ahora ya que esta semana trabajo en turno de noche, pero si quieres podemos seguir con lo que dejamos a medio.
Hablaste algo de crear un script para colgarlo en la seccion de TALLERES, bueno...pues ya sabes, si puedo ayudar en algo...
De todas formas ¿me podrias indicar como instalar el FormMail? para yo mientras ir haciendo cosillas en la página. No quiero quedarme estancado con esto. Gracias
  #6 (permalink)  
Antiguo 21/03/2005, 11:02
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Hola, justamente este finde me hice el primer taller y sobre el tema de Como instalar el FormMail...Así que espero que te sea sirva y ya sabes, cualquier crítica o consejo será muy bien recibida, saludos.

http://www.forosdelweb.com/f14/taller-perl-cgi-281414/

Intentalo que no te llevará má de 15 minutos, no es complicado...
__________________
Esteban Quintana
  #7 (permalink)  
Antiguo 21/03/2005, 12:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Ayuda con formulario

Acabo de ver lo que has colgado en el taller y esta bastante bien, ya lo he instalado en mi página pero aún tengo creado ningún formulario para el envio de Mail.
Primero me gustaria acabar con el envio de información de una cgi a otra,¿recuerdas?. Aquello de crear un módulo con un script para guardar todos los datos de un formulario en una tabla HASH y luego poder acceder facilmente a ellos...
Si no es ya demasiado pedir me vendria bien que me echases una mano con esto, nunca he creado un módulo y prefiero contar con el asesoramiento de alguien que sapa bien como funciona, y por lo que veo tu lo tienes bastante controlado...
Ah! y podrias indicarme tambien donde bajar dicho script, alguno que tu sepas que funciona sin problema, solo por asegurar...
Oye y mucha gracias por todo, me estas ahorrando horas y horas de quebraderos de cabeza
  #8 (permalink)  
Antiguo 21/03/2005, 13:05
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
No entiendo, lo de poner la info en un HASH era para luego mandarla por mail, si ya tienes instalado el FormMail ya lo tienes, no tiene sentido programar otro script que haga lo mismo...Al menos que quieras guardar la info del formulario en una base de datos...

El módulo del que te hablaba yo es el CGI y como todo módulo lo puedes encontrar (con su documentación) en el cpan.org

más precisamente

http://search.cpan.org/~lds/CGI.pm-3.07/CGI.pm

ahí está la documentación, para instalarlo fijate que en el FAQ puse como hacerlo...

Bueno, espero que te sirva

Saludos
__________________
Esteban Quintana
  #9 (permalink)  
Antiguo 21/03/2005, 13:36
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Ayuda con formulario

Cita:
Iniciado por Alextroy
Bueno, lo primero gracias Monoswim por contestar antes, y no te preocupes, soy mu impaciente y muy ruidoso pero comprendo que no se me conteste al mensaje de inmediato.
Bueno, ahora tengo otro problema. Resulta que he creado un formulario en Html y me gustaria enviar los datos de este formulario a una CGI para procesarlos, pero los scripts que he encontrado me parecen demasiado complicados, hablan de recoger la cadena de datos que se envia con el método POST y almacenarla en un array y demas... Digo que me parecen complicados porque hace años ya trabajé algo con Perl y no recuerdo tener que usar este larguísimo e incomprensible script. Estoy seguro que debe haber una forma mas facil de hacerlo. Simplificando, lo que quiero es, por ejemplo crear un formulario con una campo de texto llamado "texto" (original ¿eh?) y un botón submit, y que cuando pulse este botón me envie lo que haya dentro del texto a una CGI y se almacene en la variable $texto, para yo luego puder trastear. Espero estar en lo cierto y que haya otra forma de hacerlo, porque la que he visto da un poco de miedo, a simple vista.
Ah, y gracias por lo de exit, lo usaré a partir de ahora.
Esto era a lo que me referia....
  #10 (permalink)  
Antiguo 22/03/2005, 07:06
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Con el FormMail puedes hacer eso...Lo quieres usar con el FormMail o programar tu propio script ?

Saludos
__________________
Esteban Quintana
  #11 (permalink)  
Antiguo 22/03/2005, 10:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Cita:
Iniciado por monoswim
llega la info a través de un string, de hecho siempre, SIEMPRE la info llega así, solamente que si usas por ejemplo el módulo CGI esto se te hace invisible a vos porque podés escribir en tu script

#!/usr/bin/perl

use strict;
use CGI;
my $cgi = new CGI;
my %input_data = $cgi->Vars;

Y ya tienes toda la información del formulario en una variable HASH

Así si quieres ver que colocaron en tu campo texto puedes hacer

print $input_data{'texto'};

Pero no te creas que no estás usando el sctring de entrada, simplemente que no lo estás usando vos, sino el módulo CGI.
Esto que me comentaste es lo que quiero hacer, es decir, enviar la información desde un CGI a otro tambien creado por mi.
Por ejemplo, crear un formilario con un campo de texto y otro de password y un botón submit, y que al pulsar este botón envie la información de estos campos a otra CGI y para validarla y redireccionar a otra página o mostrar un mensaje de error en la validación. Me gustaria saber como crear el módulo que procesa la información para luego en el 2º CGI usar el "$input_data{'texto'};" al que tu hacias referencia. Si es con el FormMail ¿puedes explicarme como se hace?
  #12 (permalink)  
Antiguo 22/03/2005, 11:07
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Perfecto, veamos un poquito, lo que llamas primer CGI no es más que un formulario HTML que tiene dos campos, texto y contraseña en tu ejemplo...ahora bien en el action del form colocas la dirección de tu script CGI, que tendrá algo como esto...

Código:
#!/usr/bin/perl

use strict;
use CGI;
my $cgi = new CGI;
my %input_data = $cgi->Vars;

print "content-type: text/html \n\n";
print "Hola, $input_data{'texto'}, tu password es $input_data{'password'}";
exit(1);
Probá esto hasta que te funcione, y luego seguimos adelante...

Saludos
PD: Ese código va en un archivo de texto plano con extención .pl como ser miscript.pl y lo subes a la carpeta CGI-BIN de tu servidor...en modo ASKII y le das permisos de ejecución...Eso lo sabes no ?
__________________
Esteban Quintana
  #13 (permalink)  
Antiguo 22/03/2005, 12:02
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
y seguimos con el formulario....

A ver que me entere yo bien...
Solo tengo 2 CGI´s, uno llamado FORMULARIO.CGI, con los campos nombre y password y otro llamado VALIDAR.CGI con lo siguiente:

#!/usr/local/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
my %input_data = $cgi->Vars;

print "content-type: text/html \n\n";
$nombre= $input_data{nombre};
$contraseña = $input_data{password};
print "$nombre\n";
print "$contraseña\n";
exit(1);

Por supuesto en VALIDAR.CGI he puesto los permisos 755 y demas, y el action de FORMULARIO.CGI apunta a VALIDAR.CGI. Hasta aqui todo en orden ¿no? Pues no me funcioooonaaaa
Se supone que al puslar el submit del formulario deberia mostrarme una pagina con los datos que yo he puesto en los campos de texto pero en vez de eso solo muestra:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Solo tengo creados estos dos script´s. entonces ¿con esto solo deberia bastar?? ¿no tengo que crear un módulo con us script que "decodifique" la cadena de datos enviada por el formulario ni nada por el estilo???
Es la gran duda que tengo, ya que buscando información por internet encontre dicho script, no obstante voy a ver si lo encuentro de nuevo y te lo coloco aqui para que tu le heches un vistazo ¿ok?
  #14 (permalink)  
Antiguo 22/03/2005, 12:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Mira MonoSwin, este es el documento del que te hablo...

En el momento en el que el usuario pulsa el botón Go, el browser envía al CGI que se indica en el campo ACTION, la variable introducida por el usuario en el campo de texto de la siguiente manera: name=<lo que haya tecleado el usuario en el campo de texto>. Sin embargo el cgi recibe todas las variables en una cadena de caractéres, y todas juntas, por tanto antes de nada hay que recoger esta cadena de caracteres, analizarla y obtener una tabla con la cual a partir del nombre de la variable que se indica en el formulario, podamos obtener el valor. El siguiente listado de Perl se encarga de esta labor.
#!/usr/local/bin/perl
# Según el método de paso de variables obtener la cadena de caracteres con las variables
# Después obtener cada par nombre de variable- valor.
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
}
else
{
print "Content-type: text/html\n\n";
print "Something is wrong, take it easy";
}

# Analizar el array de caracters que contiene el par nombre de variable-valor.
# Crear la tabla hash cuyo campo key es el nombre de la variable y el segundo
# campo es el valor
foreach $pair (@pairs)
{
# Separar el nombre de la variable del valor
($key, $value) = split (/=/, $pair);
# Sustituir el + por un espacio en blanco. Normalmente se usa 's' para incicar
# sustitución cuando se quieren utilizar expresiones regulares. Si no se van a
# utilizar expresiones regulares en el patrón de búsqueda, usamos 'tr'

$key =~ tr/+/ /;

# En la cadena de caracteres que nos pasa el servidor web con las variables y
# su valor, los caracteres especiales nos los pasa codificados con un número
# hexadecimal precedido de un caracter '%'. La sentencia siguiente sustituye
# los valores hexadecimales y el % por el caracter que representan. La función # pack se encarga de esa labor. El modificador 'e' al final de la sentencia indica # que el remplazamiento del patrón se va hacer por medio de una función #(pack). El modificador 'g' indica que se busque el patrón en toda la cadena de # caracteres hasta el final
$key =~ 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;

# Esta espresión se encarga de eliminar cualquier server side include SSI.
$value =~s/<!--(.|\n)*-->//g;

# Creamos la tabla hash formdata y la vamos rellenando.
# Existen variables que pueden tener múltiples valores, por tanto si ya existe
# un valor para un nombre de variable ( if ($formdata($key)) ), entonces
# añadimos al valor el nuevo valor separado por una coma.

if ($formdata{$key})
{
$formdata{$key} .= ", $value";
}
else
{
$formdata{$key} = $value;
}
}
listado 2.
• El listado 2 intenta ser auto-explicativo, incluye comentarios que explican la intención y objetivo de cada sentencia. Un comentario es todo aquello que se encuentra entre un # y un final del línea.
• Para entender bien este listado conviene que te hayas mirado previamente las expresiones regulares en Perl.
• Una vez entendido este código podemos pasar a mostrar el listado del CGI DimeTuNombre, donde se muestra como obtener el valor de una varible, y como comparar el valor de una cadena de caracteres, para finalmente crear una página html de respuesta según en nombre introducido por el usuario.
#!/usr/local/bin/perl
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
}
else
{
print "Content-type: text/html\n\n";
print "Something is wrong, take it easy";
}
foreach $pair (@pairs)
{
($key, $value) = split (/=/, $pair);
$key =~ tr/+/ /;
$key =~ 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;
$value =~s/<!--(.|\n)*-->//g;
if ($formdata{$key})
{
$formdata{$key} .= ", $value";
}
else
{
$formdata{$key} = $value;
}

# Comenzamos a escribir la página HTML
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Dime Tu Nombre</TITLE></HEAD><BODY>";

# Accedemos al valor de la variable nombre, y comprobamos si el valor de
if ($formdata{'name'} eq 'Alberto')
{
print "<P><B>$formdata{'name'}</B> eres un tio grande";
}
elsif ($formdata{'name'} eq 'Gonzalo')
{
print "<P><B> $formdata{'name'}</B> eres una buena persona";
}
elsif ($formdata{'name'} eq 'Diego')
{
print "<P><B>$formdata{'name'}</B>, yo te conozco.";
}
elsif ($formdata{'name'} eq 'Virginia')
{
print "<P><B>$formdata{'name'}</B> eres una preciosidad";
}
elsif ($formdata{'name'} eq 'Manolo')
{
print "<P><B>$formdata{'name'}</B> eres un gallego, ¿verdad?";
}
else
{
print " No se quien eres";
}
print "</BODY></HTML>";
}
listado 3, DimeTuNombre.
• Como las variables que nos pasa el servidor las guardamos en una tabla hash accedemos a su valor de la forma en que se muestra en el listado 3, $formdata{'name'}, donde name es el nombre la varible de la cual queremos obtener su valor.
• En este listado podéis observar una estructura de control if-elsif-else y el operador de comparación entre cadenas, eq (igual).
• Otro elemento a comentar es el contenido del print, donde informamos al browser que lo que le estamos mandando es texto HTML (Content-type:).


Lo que yo te decia esque me parece una pasada tener que escribir todo esto al comienzo de cada CGI, por eso tengo este lio montado con el tema de los módulos y demás...a ver si tu puedes sacarme de dudas de una vez, que este tema se está alargando ya demasiado y me tiene completamente estancado...
  #15 (permalink)  
Antiguo 22/03/2005, 12:11
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Seguimos con el formulario....

Mira MonoSwin, este es el documento del que te hablo...

En el momento en el que el usuario pulsa el botón Go, el browser envía al CGI que se indica en el campo ACTION, la variable introducida por el usuario en el campo de texto de la siguiente manera: name=<lo que haya tecleado el usuario en el campo de texto>. Sin embargo el cgi recibe todas las variables en una cadena de caractéres, y todas juntas, por tanto antes de nada hay que recoger esta cadena de caracteres, analizarla y obtener una tabla con la cual a partir del nombre de la variable que se indica en el formulario, podamos obtener el valor. El siguiente listado de Perl se encarga de esta labor.
#!/usr/local/bin/perl
# Según el método de paso de variables obtener la cadena de caracteres con las variables
# Después obtener cada par nombre de variable- valor.
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
}
else
{
print "Content-type: text/html\n\n";
print "Something is wrong, take it easy";
}

# Analizar el array de caracters que contiene el par nombre de variable-valor.
# Crear la tabla hash cuyo campo key es el nombre de la variable y el segundo
# campo es el valor
foreach $pair (@pairs)
{
# Separar el nombre de la variable del valor
($key, $value) = split (/=/, $pair);
# Sustituir el + por un espacio en blanco. Normalmente se usa 's' para incicar
# sustitución cuando se quieren utilizar expresiones regulares. Si no se van a
# utilizar expresiones regulares en el patrón de búsqueda, usamos 'tr'

$key =~ tr/+/ /;

# En la cadena de caracteres que nos pasa el servidor web con las variables y
# su valor, los caracteres especiales nos los pasa codificados con un número
# hexadecimal precedido de un caracter '%'. La sentencia siguiente sustituye
# los valores hexadecimales y el % por el caracter que representan. La función # pack se encarga de esa labor. El modificador 'e' al final de la sentencia indica # que el remplazamiento del patrón se va hacer por medio de una función #(pack). El modificador 'g' indica que se busque el patrón en toda la cadena de # caracteres hasta el final
$key =~ 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;

# Esta espresión se encarga de eliminar cualquier server side include SSI.
$value =~s/<!--(.|\n)*-->//g;

# Creamos la tabla hash formdata y la vamos rellenando.
# Existen variables que pueden tener múltiples valores, por tanto si ya existe
# un valor para un nombre de variable ( if ($formdata($key)) ), entonces
# añadimos al valor el nuevo valor separado por una coma.

if ($formdata{$key})
{
$formdata{$key} .= ", $value";
}
else
{
$formdata{$key} = $value;
}
}
listado 2.
• El listado 2 intenta ser auto-explicativo, incluye comentarios que explican la intención y objetivo de cada sentencia. Un comentario es todo aquello que se encuentra entre un # y un final del línea.
• Para entender bien este listado conviene que te hayas mirado previamente las expresiones regulares en Perl.
• Una vez entendido este código podemos pasar a mostrar el listado del CGI DimeTuNombre, donde se muestra como obtener el valor de una varible, y como comparar el valor de una cadena de caracteres, para finalmente crear una página html de respuesta según en nombre introducido por el usuario.
#!/usr/local/bin/perl
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
}
else
{
print "Content-type: text/html\n\n";
print "Something is wrong, take it easy";
}
foreach $pair (@pairs)
{
($key, $value) = split (/=/, $pair);
$key =~ tr/+/ /;
$key =~ 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;
$value =~s/<!--(.|\n)*-->//g;
if ($formdata{$key})
{
$formdata{$key} .= ", $value";
}
else
{
$formdata{$key} = $value;
}

# Comenzamos a escribir la página HTML
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Dime Tu Nombre</TITLE></HEAD><BODY>";

# Accedemos al valor de la variable nombre, y comprobamos si el valor de
if ($formdata{'name'} eq 'Alberto')
{
print "<P><B>$formdata{'name'}</B> eres un tio grande";
}
elsif ($formdata{'name'} eq 'Gonzalo')
{
print "<P><B> $formdata{'name'}</B> eres una buena persona";
}
elsif ($formdata{'name'} eq 'Diego')
{
print "<P><B>$formdata{'name'}</B>, yo te conozco.";
}
elsif ($formdata{'name'} eq 'Virginia')
{
print "<P><B>$formdata{'name'}</B> eres una preciosidad";
}
elsif ($formdata{'name'} eq 'Manolo')
{
print "<P><B>$formdata{'name'}</B> eres un gallego, ¿verdad?";
}
else
{
print " No se quien eres";
}
print "</BODY></HTML>";
}
listado 3, DimeTuNombre.
• Como las variables que nos pasa el servidor las guardamos en una tabla hash accedemos a su valor de la forma en que se muestra en el listado 3, $formdata{'name'}, donde name es el nombre la varible de la cual queremos obtener su valor.
• En este listado podéis observar una estructura de control if-elsif-else y el operador de comparación entre cadenas, eq (igual).
• Otro elemento a comentar es el contenido del print, donde informamos al browser que lo que le estamos mandando es texto HTML (Content-type:).


Lo que yo te decia esque me parece una pasada tener que escribir todo esto al comienzo de cada CGI, por eso tengo este lio montado con el tema de los módulos y demás...a ver si tu puedes sacarme de dudas de una vez, que este tema se está alargando ya demasiado y me tiene completamente estancado...
  #16 (permalink)  
Antiguo 22/03/2005, 12:13
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
lo siento, no se que ha pasado..no queria enviarlo 2 veces...
  #17 (permalink)  
Antiguo 22/03/2005, 13:59
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Hola mi amigo, el tema es así, en el script de 5 líneas que hicimos usas el módulo CGI que lo tienes que tener instalado...Sino no funciona, para que funcione siempre debes usar esas feas líneas de código que tienes en ese tutorial, pero no es necesario tenerlo como tu piensas, pues puedes empaquetarlo en una SUBRUTINA O FUNCIÓN con lo cual solo tendrás una sola línea de cógido adelante de tu script, y la subrutina la colocas abajo de todo...

Código:
#!/usr/bin/perl
use strict;
my %FORM = &input_data();

print "content-type: text/html \n\n";
print "$FORM{'texto'} --- $FORM{'password'}";
exit(1);



sub input_data {

   my (@pairs,$buffer,%input_data);

        if ($ENV{'REQUEST_METHOD'} eq 'GET') {

                @pairs = split(/&/, $ENV{'QUERY_STRING'});

        }elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {

                read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
                @pairs = split(/&/, $buffer);

        }else {

                &error('leer','datos');

        }

        foreach my $pair (@pairs) {
                my ($name, $value) = split(/=/, $pair);

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

                $value =~ tr/+/ /;
                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                $value =~ tr/\0//d;
                $value =~ s/\n//g;

                $input_data{$name} = $value;
        }
        return(%input_data);
}
Se entiende la idea ? pruébalo así...

Saludos
__________________
Esteban Quintana
  #18 (permalink)  
Antiguo 23/03/2005, 11:42
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
formulario y mas formulario...

Pues no lo entiendo chico...mira, te pongo el script tal y como lo he creado, a ver si tu aprecias algún error, porque yo desde luego ya no se que puede ser:


#!/usr/local/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
my %input_data = $cgi->Vars;

print "content-type: text/html \n\n";
print "Hola, $input_data{'usuario'}, tu password es $input_data{'contra'}";

sub input_data {

my (@pairs,$buffer,%input_data);

if ($ENV{'REQUEST_METHOD'} eq 'GET') {

@pairs = split(/&/, $ENV{'QUERY_STRING'});

}elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);

}else {

&error('leer','datos');

}

foreach my $pair (@pairs) {
my ($name, $value) = split(/=/, $pair);

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

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/\0//d;
$value =~ s/\n//g;

$input_data{$name} = $value;
}
return(%input_data);
}
exit(1);


Por supuesto los el nombre de los campos de texto y password son los que se corresponde con los de este escript, y tienen los permisos correctamente configurados. En fin...si ves algo raro dimelo por favor, si no...ya no se lo que hacer.
Y gracias por tu paciencia, que no es poca.
  #19 (permalink)  
Antiguo 23/03/2005, 12:38
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Hola, cuando usas esto

use CGI;
my $cgi = new CGI;
my %input_data = $cgi->Vars;

no necesitas tener la función

sub input_data{
...
}

lo que te debe estar pasando es que tu servidor no tiene instalado el módulo CGI

con lo cual cuando ve

use CGI;

No lo encuentra y tira el error...

Checkea eso !!!

Saludos
__________________
Esteban Quintana
  #20 (permalink)  
Antiguo 23/03/2005, 13:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
dichoso formulario

Ok, he buscado información en el servidor pero no hay nada referente a eso.
Solo una cosa, que me aclare yo... Por módulo CGI entiendo que debo crear una CGI con la funcion "sub $input_data...." ¿me equivoco? y luego al escribir en la cabecera de lo otra CGI "use CGI" busca en la anterior CGI, es decir, la de la función $input_data ¿es asi o no?

Si es asi..¿que nombre debo ponerle a la CGI que contiene la función?

o si no fuese asi...¿como puedo comprobar si mi servidor tiene el módulo CGI?

Resumiendo...por favor, ¿puedes explicarme como funciona esto de los módulos??? Esque no se si tengo conceptos equivocados acerca de esto.
  #21 (permalink)  
Antiguo 23/03/2005, 21:23
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
jajaja, tienes una sopa de conceptos mi amigo !!!!!!!

un módulo es una librería que hace alguna determiandas funciones, para que vos no tengas que programar dichas funciones...Sino que uses las ya programadas...

Ahora bien, hay un chavo que alguna vez se le ocurrió programar un módulo y llamarlo CGI (que nada tiene que ver con tu script)....Le puso este nombre porque este módulo tiene muchas funcionalidades para hacerte más fácil la terea de programar vos tu script CGI...

Una de las funcionalidades que tiene es la de cargar las variables que vienen del formulario...Con lo cual no tienes que programar nada más que

use CGI;
my $cgi = new CGI;
my %form = $cgi->Vars;

Nada más, te está cargando en la variable %form los nombres=valores de los campos... (le cambié el nombre a form para que no te confundas con la función)

O sea que no tienes que usar la función &input_data()

Ahora bien , el´módulo no lo tiens que programar ni nada (para eso fué creado) simplemente para usarlo debes tenerlo instalado en tu servidor web...Debes exigirle a tu empresa de hosting que te instalen el módulo CGI para que el intérprete de perl pueda usarlo cuando ejecutas tu script...

Se entiende ?

Saludos
__________________
Esteban Quintana
  #22 (permalink)  
Antiguo 23/03/2005, 23:29
Avatar de Elvenezolano19  
Fecha de Ingreso: agosto-2004
Ubicación: Petare, Caracas - Venezuela
Mensajes: 81
Antigüedad: 20 años, 3 meses
Puntos: 0
Un saludo a todos los aqui presentes...

Bueno NO SE si lo que quieres es tener una`pagina de contacto para sus site... SI ES ASI... entonces, prueben con otras tecnologias...(php,asp,etc) O contraten un servicio gratis con melodysoft.com, y ellos le insertan un form en su pagina web..

Ya el problema del cgi lo resolvi con php..OJO..DE eso no sabia ni pio...y preguntando..pues, lo hice.

ojo..UN servidor que permite correr cgis es 100webspace... nada malo para las pruebas
__________________
__________________________________________________ ______
“Un ser sin estudio es un ser incompleto”.

...Simón Bolívar


¡¡ Viva Venezuela... Mi Patria querida
y quien la libertó mi hermano fue SIMON BOLIVAR...¡¡¡ :-D
  #23 (permalink)  
Antiguo 24/03/2005, 10:19
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Pero como lo hiciste en PHP también lo podrías haber hecho en PERL, tienen funcionalidades muy similares...De hecho melodysoft yla gran mayoría de los sistemas grandes usa PERL...

Gracias por el dato y agrego otro server free para perl es www.netfirms.com

Saludos
__________________
Esteban Quintana
  #24 (permalink)  
Antiguo 28/03/2005, 00:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
El formulario

Ok, Me he puesto en contacto con el asministrador del servidor y le he enviado una consulta acerca de esto. Estoy a la espera de que me responda.
Ya te comento...
  #25 (permalink)  
Antiguo 28/03/2005, 05:11
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
el formulario...

A ver...te explico. He hecho una consulta al administrador del servidor, para preguntarle si tenia instalado el módulo CGI, mas tarde este me ha contestado y entonces me he dado cuenta de lo absurda que era mi consulta, ya que el formulario donde introduzco el nombre de usuario y la contaseña lo muestra tambien una CGI, y esta funciona sin problema. Pero bueno...al menos ya se me han quedado claros los conceptos.
El módulo CGI esta perfectamente instalado, ya que si no no funcionaria ninguna CGI...(yo creia que era otro módulo extra que habia que instalar....). Pero esto sigue sin funcionarme. No lo entiendo, he simplificado el script al máximo pero este me sigue dado error:

#!/usr/local/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
my %form = $cgi->Vars;

$nombre=$form{'usuario'};
$pass=$form{contra};
exit(1);


Esto es lo que he puesto, no deberia mostrarme nada, ya lo se, pero tampoco deberia darme error ¿no? es decir, intento asignarle a las variables $nombre y $pass los datos del formulario, pero algo debo tener mal. ¿tu aprecias algo?
  #26 (permalink)  
Antiguo 28/03/2005, 05:44
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
QUE ???????

Hola, antes que nada te comento algo conceptual: el script CGI que tienes está usando un módulo (externo al intérprete de perl) que se llama también CGI...Si no lo tienes instalado ese módulo CGI Pueden ejecutarse perfectamente bien los scripts que no usen ese módulo, pero los que tengas use CGI; NO PODRÁN ejecutarse, ya que buscan el módulo externo llamado CGI y al no tenerlo instalado tira error...

Pero tu problema está en otro lado si ejecutas ese script...Cuando se ejecuta un script si no le tiras ningún dato a la pantalla efectivamente sale un mensaje de error.

prueba con

#!/usr/local/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
my %form = $cgi->Vars;

$nombre=$form{'usuario'};
$pass=$form{contra};

print "Content-type: text/html\n\n";
print "$nombre - $pass";
exit(1);

Ahora con los módulos, lo que te digieron en tu hosting verdaderamente me da risa...Visitá la gran conocida página de cpan en donde están todos los mósulos de perl

http://search.cpan.org/

y visitá la documentación del módulo CGI

http://search.cpan.org/~lds/CGI.pm-3.07/CGI.pm

Ese módulo CGI como todo módulo son librerías externas al intérprete de PERL...

Espero que te sirva

Saludos
__________________
Esteban Quintana
  #27 (permalink)  
Antiguo 28/03/2005, 06:12
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
El formulario de marras...

Osea, que el módulo CGI no tiene nada que ver ni está contenido en el interprete Perl ¿no?. Por lo tanto es un módulo extra que hay que instalar en el servidor ¿me equivoco?.
He buscado en los enlaces que me mandaste pero en estos no pone donde puedo descargar dicho módulo ni como instalarlo.
¿como es este módulo? es decir ¿se trata de un archivo .pl o .cgi que haya que instalar en alguna carpeta concreta del servidor???
Te agradeceria mucho que me dieses alguna pista de como hacerlo, ya que como has podido comprobar no tengo ni idea.
Por cierto, probé con el último scripts que enviaste y tampoco funciona, asi que yo creo que el problema va a ser el del módulo. Es decir, no el de interprete de Perl, que ese ya se que si lo tengo, si no el otro, el que se supone que tiene que llevar el script para obtener la información del formulario en variables.
Por ciertol, yo ya no se si voy algo encaminado o sigo completamente perdido, si no entiendes mi pregunta dimelo e intentaré esforzarme en hacerla mas comprensible.
Gracias otra vez.
  #28 (permalink)  
Antiguo 28/03/2005, 06:31
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
JAJA, quedate tranquilo que te entiendo perfectamente...Espero que vos me entiendas a mi...jaja

Primero que nada los módulos de PERL tienen la extensión PM (perl module) ahora bien para aprender a instalarlos (en windows) puedes leer el siguiente tutorial de kidd

http://perlenespanol.baboonsoftware....ut/000054.html

o ver el resumen que coloqué en el FAQ:

http://www.forosdelweb.com/showpost....1&postcount=26

Ahora bien, para instalarlo en el servidor web NO lo podrás hacer tu mismo, sino que debes contactar al soporte tecnico de tu servidor y que te lo instalen ellos porque necesitas permisos de administrador...

Pero para estar seguros que es ese módulo que te está fallando y no algo más probá ejecutar el famoso "hola mundo" haciendo

#!/usr/local/bin/perl
use strict;

print "Content-type: text/html\n\n";
print "HHHHHOOOOOLLLLLLLLAAAAAAAAAAAAAAAAAAAAA";
exit(1);

Eso se tiene que ejecutar SI O SI !!!!!!!
Si se ejecuta es que está tirando error cuando intentas usar el módulo CGI...Otra cosa, no tienes un error log en donde te guarde los errores ??? es verdadermante muy útil.

Todos los servidores o la gran mayoría tienen un error log...

Saludos
__________________
Esteban Quintana
  #29 (permalink)  
Antiguo 30/03/2005, 03:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 8 meses
Puntos: 0
Modulo CGI

Hola amigo... He estado haciendo lo que me comentaste, me descargué el módulo y las instrucciones para instalarlo. Como me decias que yo no podia instalar el módulo porque no tengo perimisos de administrador en el servidor me puse en contacto con el administrador y le pregunté como podia instalarlo. Entonces me contesta al mensaje y me pregunta qué módulo es el que quiero instalar, como no se como se llama le he puesto en nombre del archivo (CGI.PM-3.07tar) y le he explicado brevemente porque lo quiero instalar (aquello del $input_data...) y me contesta lo siguiente:
usted puede instalar cualquier aplicación CGI sin problemas, un modulo es otra
cosa, solo tiene que seguir las instrucciones del programador.

Bueno...pues yo pensaba que lo del concepto de "módulo" y demas ya lo tenia superado...pero ahora este tio me dice esto y me ha vuelto a liar del todo.
Por partes:
¿el módulo que tengo que instalar se llama CGI.PM??
¿es realmente un módulo??
¿como quiere este tio que siga las instrucciones del programador si el programador se supone que soy yo y no tengo ni idea???
¿y como puedo explicarle de forma clara lo que quiero que instale?? porque me parece que lo que le he pedido le ha sonado un poco a chino...y no lo entiendo porque si esto es así ya deberia haberlo hecho mas de una vez y deberia saber perfectamente lo que le estoy pidiendo ¿no crees?
En fin compañero... a ver si puedes aclararme algo mas sobre este inexpugnable mundo de Perl.
  #30 (permalink)  
Antiguo 31/03/2005, 07:45
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Hola, lo que debes hacer es decirles que te INSTALEN EL MÓDULO CGI.PM

nada más...Ese módulo puedes usarlo vos luego desde tus script para un sinfin de cosas como la entrada de datos, pero eso no les importa a los de tu servidor...

Simplemente diles eso, y tu metete en el cpan y mirá un poco la documentación y verás que rico que es es módulo y toda la funcionalidad que tiene...

Saludus
__________________
Esteban Quintana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:18.