• Publicidad

Sale el código del cgi

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

Sale el código del cgi

Notapor millen » 2012-08-06 04:36 @233

No sé si tengo q escribir aquí.

A ver tengo un script de html como éste:

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <html>
  2. <head>
  3. <title>colors</title>
  4. </head>
  5. <body>
  6. <form action="colors.cgi" method="POST">
  7.  
  8. <h3>What are your favorite colors?</h3>
  9. <input type="checkbox" name="red" value=1> Red<br>
  10. <input type="checkbox" name="green" value=1> Green<br>
  11. <input type="checkbox" name="blue" value=1> Blue<br>
  12. <input type="checkbox" name="gold" value=1> Gold<br>
  13.  
  14. <input type="submit">
  15.  
  16. </form>
  17. </body>
  18. </html>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



... y un script de cgi:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. print "Content-type:text/html\n\n";
  4.  
  5. read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  6. @pairs = split(/&/, $buffer);
  7. foreach $pair (@pairs) {
  8.     ($name, $value) = split(/=/, $pair);
  9.     $value =~ tr/+/ /;
  10.     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  11.     $FORM{$name} = $value;
  12. }
  13.  
  14. print "<html><head><title>Results</title></head>\n";
  15. print "<body>\n";
  16. print "<h2>Results</h2>\n";
  17.  
  18. @colors = ("red","green","blue","gold");
  19. foreach $x (@colors) {
  20.     if ($FORM{$x} == 1) {
  21.         print "You picked $x.\n";
  22.     }
  23. }
  24.  
  25. print "</body></html>\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Me pasa que cuando ejecuto el html, elijo el color y le doy a enviar, me sale todo el script del cgi (entero), en vez de sólo el color. No entiendo por qué.

Muchas Gracias.
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Publicidad

Re: Sale el código del cgi

Notapor explorer » 2012-08-06 05:24 @266

Si el código sale, en lugar del resultado, es que el servidor web no ha ejecutado el cgi.

Debes comprobar la configuración del servidor web para saber en qué directorio debes colocar tu cgi, con qué extensión, y con qué permisos de ejecució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: Sale el código del cgi

Notapor millen » 2012-08-06 05:28 @269

¿Y no se puede hacer en local?

Gracias.
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Re: Sale el código del cgi

Notapor explorer » 2012-08-06 06:54 @329

La palabra 'local' tiene dos significados...
  1. te refieres a tener un servidor web instalado en tu propia máquina, o
  2. te refieres a ejecutar el cgi de forma directa, desde la línea de comandos, como si fuese un programa más.

Para el primer caso, no hay problema: se instala o usa un servidor en la propia máquina, cargas el html en el navegador, y en action pones que el cgi está en el localhost.

Para el segundo caso, hay un problema: el navegador web no sabe ejecutar el cgi por sí mismo.

Lo que sí se puede hacer es ejecutar el cgi desde la línea de comandos. Como depende de la información que reside en el entorno, deberás modificarlo para que el cgi lo pueda procesar:

export CONTENT_LENGTH= (la longitud de lo que será pasado al programa a través de la entrada estándar)

Es mucho más cómodo, para todo esto, usar el módulo CGI, que permite pasar los argumentos en la propia línea de comandos, al estilo:

perl programa_cgi.pl red=1 green=1 gold=0 blue=0

Por estos foros encontrarás mucho código que usa el módulo CGI. Verás además que te ahorrará mucho código en tu cgi. Sería algo así:

Sintáxis: (programa_cgi.pl) [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use CGI       qw(:standard      );     # importamos todas las funciones estándares de HTML
  3. use CGI::Carp qw(fatalsToBrowser);     # en caso de error, sacarlo al navegador web
  4.  
  5. print header;
  6. print start_html('Results');
  7. print h2('Results');
  8.  
  9. my @colors = qw( red green blue gold );
  10.  
  11. for my $color (@colors) {
  12.     if (param($color) == 1) {
  13.         print p("You picked $color."), "\n";
  14.     }
  15. }
  16. print end_html;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora ya puedes ejecutarlo desde la línea de comandos:

perl programa_cgi.pl red=1 gold=0
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: Sale el código del cgi

Notapor millen » 2012-08-06 07:30 @354

Lo he resuelto mediante servidor web, ya tenía instalado Apache...

El otro modo a la tarde lo intento.

Muchas Gracias.
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313


Volver a Web

¿Quién está conectado?

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

cron