Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problema con el orden de los campos exportados desde un form

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI
Mensaje Vie Jul 08, 2005 5:55 am
Mauro
Invitado


Problema con el orden de los campos exportados desde un form Responder citando

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;
}
}
Mensaje Vie Jul 08, 2005 7:23 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

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
Mensaje Vie Jul 08, 2005 9:21 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

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
Mensaje Mie Jul 20, 2005 9:59 am
Mauro
Invitado


¿podrían ser más concisos? Responder citando

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,
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group