• Publicidad

Mostrar variales pasadas por POST en ficheros de texto

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Mostrar variales pasadas por POST en ficheros de texto

Notapor milevis » 2010-10-28 10:14 @468

¡¡¡Saludos!!!

Soy nueva en Perl. Estoy realizando algunos cgi sencillos para practicar y aprender.
Recientemente estoy realizando uno para el envío de emails. Sé que hay muchos scripts posteados en la web pero me propuse hacer uno yo misma.

Primero tengo un formulario html que recoge los datos y los pasa por el método POST a un script cgi. Todo parece marchar bien; de hecho en la web, el cgi muestra las variables que recibió por el método POST.

El problema es que cuando hace el envío del mail (yo lo hago con sendmail) no me reconoce las variables que le paso a través del método POST (nombre, apellido, mail), las cuales quiero enviarlas en el correo.

El hecho es que las variables que paso por POST no se imprimen en ninguna otra clase de salida que no sea el navegador. Para hacer la prueba mandé a imprimir una de las variables en un fichero plano y tampoco la muestra.

Quería ver si alguien por acá me confirma esto o me ayuda a resolverlo.

¡¡¡Les dejo el script acá...!!!

¡ Gracias de antemano ! Saludos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. #use strict;
  4. my $bufer;
  5.  
  6. print "Content-type: text/html\n\n";
  7.  
  8. read (STDIN, $bufer, $ENV{'CONTENT_LENGTH'});
  9.  
  10. my @datos=split(/&/,$bufer);
  11. %hash;
  12.  
  13. foreach (@datos)
  14.         {
  15.         my ($campo, $data)=split(/=/,$_);
  16.         $data=~ tr/+/ /;
  17.         $data=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  18.  
  19.         $hash{$campo}=$data;
  20.  
  21.         }
  22. foreach (keys(%hash))
  23.                 {
  24.                         print "$_ = $hash{$_}";
  25.                         print "<br>";
  26.                 }
  27.  
  28.  
  29. my $destinatario="milevisj\@gmail.com";
  30.  
  31. my $sendmail='sudo /usr/sbin/sendmail';
  32.  
  33.  
  34.  
  35. $remitente=$hash{mail};
  36.  
  37. my $asunto="Te han dejado un comentario";
  38. my $asunto2="Notificacion de recepcion de comentario";
  39. my $mensaje="Te ha enviado un comentario";
  40. my $mensaje2="Su comentario ha sido recibido, gracias por visitar jeje :p";
  41.  
  42.  
  43. #envio de email al admin
  44. open (MAIL, "|$sendmail -t") or die("No encuentro $sendmail!\n");
  45. print MAIL "To: $destinatario \n";
  46. print MAIL "Reply-to: $remitente\n";
  47. print MAIL "Subject: $asunto\n";
  48. print MAIL "$mensaje\n";
  49. close (MAIL);
  50.  
  51. #Aqui hago una prueba colocando los datos en un fichero plano para validar que realmente no toma la variable $remitente
  52. open (MAIL, "> prueba") or die("No se puede abrir el fichero!\n");
  53. print MAIL "To: $remitente \n";
  54. print MAIL "Reply-to: $destinatario\n";
  55. print MAIL "Subject: $asunto2\n";
  56. print MAIL "$mensaje2\n";
  57. close (MAIL);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
milevis
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-10-07 12:11 @549

Publicidad

Re: Mostrar variales pasadas por POST en ficheros de texto

Notapor explorer » 2010-10-28 10:43 @488

Pero... ¿en qué línea del programa estás queriendo mostrar el contenido del %hash? Yo no lo veo por ningún lado, excepto la línea 24, cuando lo envías al navegador. Pero, ¿y luego? Solo veo que lees el $remitente, en la 35.

Por otra parte, comentarte que, la mitad de esas operaciones ya te las hace el módulo CGI. Está bien aprender las bases del protocolo CGI, pero, con una vez, basta. Luego te das cuenta de que es una pesadez repetir una y otra vez lo mismo. Por ello, existen módulos que nos facilitan mucho las tareas repetitivas.

Hecha un vistazo a mi CGI mínimo para que veas de lo que hablo.
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: Mostrar variales pasadas por POST en ficheros de texto

Notapor milevis » 2010-10-28 10:54 @495

Saludos.

Gracias por tu respuesta.

Bien, en las lineas 24 y 25 muestro el contenido en el navegador, en la linea 35 asigno el valor mail del hash a la variable remitente.

Luego esa variable intento enviarla por correo en la línea 43.

Y en la línea 56 trato de mostrarla en un fichero plano en mi máquina.

De hecho lo que quiero es poder enviar a través del email los datos del nombre, apellido y mail de la persona que dejó el comentario, y el comentario por supuesto.

Si quieres, ingresa en la siguiente dirección para probarlo.
http://localhost:8080/form_correo.html


Saludos.
milevis
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-10-07 12:11 @549

Re: Mostrar variales pasadas por POST en ficheros de texto

Notapor milevis » 2010-10-28 11:06 @504

¡¡Hola explorer!!

Acabo de verificar y tenía un error muy tonto, ¡¡pero con la ejecución del sendmail directamente!!

¡¡¡Ya pude resolver el inconveniente!!!

¡¡ Muchas gracias !! De todas maneras tomaré en cuenta lo que mencionaste sobre los módulos, pero como estoy comenzando quiero hacer las cosas yo misma para ir entendiendo el funcionamiento.

¡¡¡ Muchas gracias otra vez !!!

Saludos.
milevis
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-10-07 12:11 @549

Re: Mostrar variales pasadas por POST en ficheros de texto

Notapor explorer » 2010-10-28 11:08 @506

localhost es la dirección interna de tu máquina, así que va a ser difícil entrar ahí :)

Por otra parte, me has respondido con mi propia respuesta, pero no me dices si el programa que has publicado funciona o no. ¿Recibes el correo?

Fíjate además de un detalle: la salida para el correo (sendmail) es distinta de la que grabas en el fichero: los valores de los campos To: y Reply-to: están intercambiados.

Edito: enviado antes de leer el último correo de milevis
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: Mostrar variales pasadas por POST en ficheros de texto

Notapor milevis » 2010-10-28 11:14 @509

si disculpa.!! te copie mal la direccion.

ya lo probé y funciona perfecto.

si quieres verificalo y pruebalo con tu direcion de email a ver si te llega el correo.

esta es la ruta
http://201.209.185.213:8080/form_correo.html

Saludos.
milevis
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-10-07 12:11 @549

Re: Mostrar variales pasadas por POST en ficheros de texto

Notapor milevis » 2010-10-28 11:16 @511

Finalmente el script me quedó así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. #use strict;
  4. my $bufer;
  5.  
  6. print "Content-type: text/html\n\n";
  7.  
  8. read (STDIN, $bufer, $ENV{'CONTENT_LENGTH'});
  9.  
  10. my @datos=split(/&/,$bufer);
  11. my %hash;
  12.  
  13. foreach (@datos)
  14.         {
  15.         my ($campo, $data)=split(/=/,$_);
  16.         $data=~ tr/+/ /;
  17.         $data=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  18.  
  19.         $hash{$campo}=$data;
  20.  
  21.         }
  22. foreach (keys(%hash))
  23.                 {
  24.                         print "$_ = $hash{$_}";
  25.                         print "<br>";
  26.                 }
  27.  
  28.  
  29. my $destinatario="milevisj\@gmail.com";
  30. my $destinatario2="$hash{mail}";
  31. print "remitente $destinatario2 <br>";
  32.  
  33. my $sendmail='sudo /usr/sbin/sendmail';
  34.  
  35. $remitente=$hash{mail};
  36.  
  37. my $asunto="Te han dejado un comentario";
  38. my $asunto2="Notificación de recepción de comentario";
  39. my $mensaje="$hash{nombre} $hash{apellido} Te ha enviado un comentario \n  $hash{comentario}";
  40. my $mensaje2="Su comentario ha sido recibido, gracias por visitar jeje :p";
  41.  
  42.  
  43. #envío de email al admin
  44. open (MAIL, "|$sendmail -t") or die("No encuentro $sendmail!\n");
  45. print MAIL "To: $destinatario \n";
  46. print MAIL "Reply-to: $remitente\n";
  47. print MAIL "Subject: $asunto\n";
  48. print MAIL "$mensaje\n";
  49. close (MAIL);
  50.  
  51. #Aquí le envio notificación al remitente.
  52. open (MAIL, "|$sendmail -t") or die("No se puede abrir el fichero!\n");
  53. print MAIL "To: $destinatario2 \n";
  54. print MAIL "Reply-to: $destinatario\n";
  55. print MAIL "Subject: $asunto2\n";
  56. print MAIL "$mensaje2\n";
  57. close (MAIL);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡¡¡¡ Y funciona !!!! =)

Pero como dices, ya lo hice una vez; ¡¡¡ahora investigaré cómo hacerlo con los módulos!!!

¡¡¡Muchas gracias por tus respuestas!!!


Saludos.
milevis
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-10-07 12:11 @549


Volver a Básico

¿Quién está conectado?

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