• Publicidad

Recoger datos de un formulario

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Recoger datos de un formulario

Notapor xoan » 2006-03-29 18:24 @808

Hola a todos. He aquí de nuevo necesitando vuestra ayuda mientras me voy sumergiendo en este lenguaje tan interesante. Resulta que he creado un formulario en HTML que envía un sólo campo (el del nombre) mediante POST al cgi siguiente.

Código: Seleccionar todo
#! /usr/bin/perl -w

use CGI qw/:standard/;
my $FORM;
my $nombre;
#my $buffer;
my $numero;
$numero = 5;
print "Content-type: text/html\n\n";
read(STDIN, $FormData, $ENV{'CONTENT_LENGHT'});

@pairs = split(/&/, $FormData);

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

   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$FORM{'nombre'} = $nombre;
print "Hola $nombre\n";


Por algún motivo cuando ejecuto el cgi no me muestra en pantalla el $nombre. He revisado todo creo, en el HTML al campo del formulario nombre le puse como atributo name="nombre" por tanto creo que no es problema de eso. ¿Alguna sugerencia?

Gracias por vuestra ayuda :D
xoan
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-03-18 18:23 @807

Publicidad

Notapor kidd » 2006-03-29 18:42 @820

Hola:

La primera recomendación que te puedo hacer es eliminar todas esas líneas de código con las que lees los parametros recibidos y sustituirlas por unas sencillas líneas:

Código: Seleccionar todo
#!/usr/bin/perl -w

use strict;
use CGI;

my $query = new CGI;
my %FORM = $query->Vars;


print "Content-type: text/html\n\n";
print "Hola $FORM{'nombre'}\n";

exit(1);


Y a poco no se ve más bonito :wink:


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Recoger datos de un formulario

Notapor explorer » 2006-03-30 04:43 @238

Es más, incluso hasta te puedes ahorrar el enviar el Content-Type:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use CGI qw/:standard/;
  5.  
  6. my $query = new CGI;
  7. my %FORM = $query->Vars;
  8.  
  9. print  $query->header,
  10.        $query->start_html("Mi formulario web"),
  11.        "Hola $FORM{nombre}\n",
  12.        $query->end_html;
  13.  
  14. exit(1);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Fíjate que realmente estoy componiendo una página html, porque eso es lo que se indica en el Content-Type. Si envías texto normal y corriente, deberás cambiar el header por header("text/plain").
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor xoan » 2006-03-30 16:59 @749

Muchas gracias a ambos por la ayuda, al final seguí vuestras sugerencias y lo conseguí! El problema que tenía también con mi código inicial era que lo estaba editando con Kate, y éste por defecto codifica los caracteres como UTF-8 por eso me estaba dando problemas. Al reescribir el código en Emacs (que codifica en ASCII) me funcionó también a la primera.

Mil gracias y saludos :-)
xoan
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-03-18 18:23 @807

Re: Recoger datos de un formulario

Notapor explorer » 2006-07-15 12:00 @542

En el menú Herramientas->Codificación se puede cambiar la codificación que se usará en Kate. Y naturalmente, en la configuración.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Recoger datos de un formulario

Notapor alavaros » 2010-05-24 11:36 @525

Buenas, estoy intentando recoger los datos de mi formulario, y he usado el mismo código que aquí publicáis, pero no me funciona. Soy un poco novato aún y no sé cuál es el error. Os pego el código para ver si podéis ayudarme.
Formulario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <FORM action="/cgi-bin/oracle.pl" method="post">
  6. <LABEL for="nombre">Nombre (Quien saca la cinta): </LABEL><br>
  7. <INPUT type="text" id="nombre"><BR>
  8. <LABEL for="cintas">Cintas: </LABEL><br>
  9. <textarea type="text" id="cintas"></textarea><BR>
  10. <LABEL for="almacenamiento">Lugar almacenamiento: </LABEL><br>
  11. <INPUT type="text" id="almacenamiento"><BR><br>
  12. <INPUT type="submit" value="Enviar"> <INPUT type="reset">
  13. </FORM>
  14. </body>
  15. </html>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


cgi (es un archivo .pl):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use CGI qw/:standard/;
  5.  
  6. my $query = new CGI;
  7. my %FORM = $query->Vars;
  8.  
  9. print  $query->header,
  10.        $query->start_html("Mi formulario web"),
  11.        "Hola $FORM{nombre}\n",
  12.        $query->end_html;
  13.  
  14. exit(1);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y tan solo me muestra "Hola";

Muchas gracias de antemano y un saludo.
alavaros
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-05-24 11:30 @521

Re: Recoger datos de un formulario

Notapor marcmb » 2010-05-24 15:50 @701

Prueba a cambiar "Hola $FORM{nombre}\n", por "Hola $FORM{'nombre'}\n", No se si en los hash influye las comillas, pero pondría la mano en el fuego que sí.

Te aconsejo poner al principio del código: use CGI::Carp; así te saldrán todos los errores que se encuentre en el propio navegador (a mi me va de muerte, ¡je,je,je!)
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona

Re: Recoger datos de un formulario

Notapor explorer » 2010-05-24 15:53 @703

El problema está en el código HTML: en los elementos de entrada de texto, les has definido sus id (que sirven para ser referenciados desde el JavaScript), pero no les has definido sus name (nombre) para que sean referenciados desde los parámetros enviados por el POST.

Quedaría, por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <FORM action="/cgi-bin/oracle.pl" method="post">
  6. <LABEL for="nombre">Nombre (Quien saca la cinta): </LABEL><br>
  7. <INPUT type="text" name="nombre"><BR>
  8. <LABEL for="cintas">Cintas: </LABEL><br>
  9. <textarea type="text" name="cintas"></textarea><BR>
  10. <LABEL for="almacenamiento">Lugar almacenamiento: </LABEL><br>
  11. <INPUT type="text" name="almacenamiento"><BR><br>
  12. <INPUT type="submit" value="Enviar"> <INPUT type="reset">
  13. </FORM>
  14. </body>
  15. </html>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Recoger datos de un formulario

Notapor alavaros » 2010-05-25 08:22 @390

Muchas gracias explorer, era justo eso, ya funciona.

Ahora me gustaría preguntarte más cosas, una de ellas es que en el formulario HTML tengo que meter un par de campos para fecha y hora, para empezar no sé si existe un tipo de campo fecha en HTML, o si tengo que poner un simple textbox. ¿Alguna idea?

Saludos.
alavaros
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-05-24 11:30 @521

Re: Recoger datos de un formulario

Notapor explorer » 2010-05-25 10:15 @468

No, no existe. Sí que existen controles más elaborados que registren la entrada a lo que deseemos e incluso algunos que muestran un calendario, por ejemplo, pero no forman parte de la biblioteca básica de componentes HTML, sino que se crean con más código HTML y JavaScript.

Te recomiendo que leas algún manual sobre HTML.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron