Vie Jul 08, 2005 5:55 am
|
|
|
| Problema con el orden de los campos exportados desde un form |
|
|
He creado un formulario y un script perl cgi para el envío de datos del formulario por correo y todo funciona bien, salvo un pequeño problema, el orden de los campos está desordenado y no coincide con el orden en el formulario, no encuentro ninguna lógica, ¿alguien me puede echar una mano? Muchas gracias
script cgi:
#!/usr/local/bin/perl
$mailprog = '/usr/lib/sendmail';
$mimail= 'correo@dominio.es';
$asunto= 'reporte de Problemas';
######################################################################
push(@codigo,"");
push(@codigo,"");
push(@codigo,"gracias!");
push(@codigo,"El informe ha sido enviado. ");
push(@codigo,"");
####################################################################
# Toma las entradas del formulario.
&toma_entradas;
&envia_mail($mimail, $asunto);
&responde;
# ======================== SUBRUTINAS. Subrutines
# ---------------------------- Responde al usuario
sub responde
{
# Empieza la creacion de la pagina que vera el usuario
print "Content-type: text/html\n\n";
foreach $linea (@codigo) {
print "$linea\n";
}
}
# ---------------------------- Recoge los parametros. Takes parameters
sub toma_entradas {
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
# Recoge el par name-value
"fb.mau.cgi" 113 lines, 3169 characters
# Recoge el par name-value
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
# Lee la entrada
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Recoge el par name-value
@pairs = split(/&/, $buffer);
}
foreach $pair (@pairs) {
($name, $value) = split(/\=/, $pair);
# Eliminamos caracteres peligrosos
$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;
$value =~ s///g;
$QUERY{$name} = $value;
}
}
sub envia_mail
{
local ($recipient,$subject);
$recipient=@_[0];
$subject=@_[1];
$recipient=~s/^(.*)\n$/\1/;
($s,$m,$h, @resto) = localtime(time);
if ($recipient)
{
open (MAIL, "|$mailprog $recipient") || die "No puedo abrir $mailprog!\n";
open( FILE, "> /tmp/$h:$m:$s");
print MAIL "Reply-to: $recipient (No admite reply)\n";
print MAIL "To: $recipient\n";
print MAIL "Reply-to: $recipient (No admite reply)\n";
print MAIL "To: $recipient\n";
print MAIL "Subject: $subject\n";
print FILE "Subject: $subject\n";
print MAIL "From: remitente de informes\n";
print MAIL "\n";
print FILE "\n";
print MAIL "-----------------------------------------------------------\n";
print FILE "-----------------------------------------------------------\n";
while (($name, $value) = each(%QUERY)){
print MAIL "$name:\n";
print FILE "$name:\n";
print MAIL "$value\n";
print FILE "$value\n";
print MAIL "-----------------------------------------------------------\n";
print FILE "-----------------------------------------------------------\n";
}
print MAIL "-----------------------------------------------------------\n\n";
print FILE "-----------------------------------------------------------\n\n";
close (MAIL);
close FILE;
}
} |
|
|
|

Vie Jul 08, 2005 7:23 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
Generalmente se envia un array desde un campo oculto que tenga el nombre de los campos separados por comas...
Es la única forma que conozco para ordenarlos como desees...
Si es alfabéticamente podés usar la función sort
Saludos |
|
Vie Jul 08, 2005 9:21 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
Es buena práctica que uses el módulo CGI para recuperar los valores envíados en una forma:
| Código: |
use CGI;
my $query = new CGI;
my %Input = $query->Vars;
|
SALUDOS |
|
Mie Jul 20, 2005 9:59 am
|
|
|
| ¿podrían ser más concisos? |
|
|
Hola de nuevo,
lo primero muchas gracias por la ayuda, aunque, no soy un experto en perl ni mucho menos y no sé muy bien a qué se refieren, ?podrían comentarme más detalladamete qué es lo que debo hacer para ordenar los campos del formulario?
Muchísimas gracias, |
|
Powered by phpBB © 2001, 2005 phpBB Group
|