2012-06-18 22 views
5

Estoy tratando de personalizar un script y necesito obtener un valor POST de un formulario usando perl. No tengo antecedentes de perl pero esto es algo bastante simple, así que supongo que no debería ser difícil.cómo obtener valores POST en perl

Esta es la versión PHP del código me gustaría tener en Perl:

<?php 
$download = ($_POST['dl']) ? '1' : '0'; 
?> 

Sé que esto no puede ser en absoluto relacionado con la versión de Perl, pero podría ayudar a que supongo que aclarar qué es exactamente lo estoy buscando hacer

+0

¿Puede explicar un poco más? – vijay

+2

@vjshah No estoy seguro si está siendo sarcástico, pero seguro, solo necesito saber cómo obtener el valor POST (de un formulario enviado) y asignarlo a una variable. –

Respuesta

6

Bueno, en ese caso, por favor, eche un vistazo a este código simple: Esto le ayudaría: consejos

#!/usr/bin/perl 
use strict; 
use warnings; 
use CGI; 
use CGI::Carp qw(fatalsToBrowser); 

sub output_top($); 
sub output_end($); 
sub display_results($); 
sub output_form($); 

my $q = new CGI; 

print $q->header(); 

# Output stylesheet, heading etc 
output_top($q); 

if ($q->param()) { 
    # Parameters are defined, therefore the form has been submitted 
    display_results($q); 
} else { 
    # We're here for the first time, display the form 
    output_form($q); 
} 

# Output footer and end html 
output_end($q); 

exit 0; 

# Outputs the start html tag, stylesheet and heading 
sub output_top($) { 
    my ($q) = @_; 
    print $q->start_html(
     -title => 'A Questionaire', 
     -bgcolor => 'white'); 
} 

# Outputs a footer line and end html tags 
sub output_end($) { 
    my ($q) = @_; 
    print $q->div("My Web Form"); 
    print $q->end_html; 
} 

# Displays the results of the form 
sub display_results($) { 
    my ($q) = @_; 

    my $username = $q->param('user_name'); 
} 

# Outputs a web form 
sub output_form($) { 
    my ($q) = @_; 
    print $q->start_form(
     -name => 'main', 
     -method => 'POST', 
    ); 

    print $q->start_table; 
    print $q->Tr(
     $q->td('Name:'), 
     $q->td(
     $q->textfield(-name => "user_name", -size => 50) 
    ) 
    ); 

    print $q->Tr(
     $q->td($q->submit(-value => 'Submit')), 
     $q->td('&nbsp;') 
    ); 
    print $q->end_table; 
    print $q->end_form; 
} 
+0

Este es un ejemplo bastante bueno, y creo que lo entiendo, pero el script actual que estoy utilizando usa valores GET/POST PERO no incluye 'nuevo CGI', ¿hay alguna otra manera de hacerlo? –

+1

En ese caso, se puede usar un método de jQuery para manejar la publicación. Y siempre se puede incluir el código de javascript en perl. imprimir qq (#include los encabezados jQuery ('form_id'). submit (función() {var val = jQuery ("id"). val();})); – vijay

+0

eso es perfecto :) No pensé en usar jquery. Gracias –

0

Aquí hay un buen lugar para comenzar: The Fool's Guide to CGI.pm, the Perl module for CGI scripting.

Esto le mostrará "... cómo obtener el valor POST (de un formulario enviado) y asignarlo a una variable."

Espero que esto ayude!

+0

Lo analicé y vi que puedes hacer 'param ('sample')' ahora algo que no pude encontrar fue cómo diferenciar entre las solicitudes GET y POST ?? No quiero obtener valores 'GET', SOLO si' POST' está configurado, el valor debe asignarse a $ download –

+0

$ ENV {'REQUEST_METHOD'} = ~ tr/a-z/A-Z /; if ($ ENV {'REQUEST_METHOD'} eq "POST") {#hacer algo aquí;} – d5e5

+2

Puede usar 'request_method()' de 'CGI.pm' para verificar una solicitud' POST', por ejemplo, 'my $ requestMethod = $ cgi-> request_method()'. – Kenosis

4

Estilo: casi nunca se necesita asignar 0 o 1 a una variable. Simplemente evalúa el valor en sí mismo en el contexto bool.


En CGI.pm (CGI), el método param fusiona POST y GET parámetros, por lo que necesitamos para inspeccionar el método de la petición por separado:

#!/usr/bin/env perl 
use strict; 
use warnings FATAL => 'all'; 
use CGI qw(); 
my $c = CGI->new; 
print $c->header('text/plain'); 
if ('POST' eq $c->request_method && $c->param('dl')) { 
    # yes, parameter exists 
} else { 
    # no 
} 
print 'Do not taunt happy fun CGI.'; 

Con Plack::Request (PSGI), tiene diferentes métodos para POST (body_parameters) y GET (query_parameters) además de la interfaz mixta (parameters):

#!/usr/bin/env plackup 
use strict; 
use warnings FATAL => 'all'; 
use Plack::Request qw(); 
my $app = sub { 
    my ($env) = @_; 
    my $req = Plack::Request->new($env); 
    if ($req->body_parameters->get_all('dl')) { 
     # yes 
    } else { 
     # no 
    } 
    return [200, [Content_Type => 'text/plain'], ['Do not taunt happy fun Plack.']]; 
}; 
0

Los ejemplos anteriores son un poco complicados. El siguiente código lee los valores POST en una variable. Puede extraer el valor clave de eso. Si es GET, entonces es mejor usar el módulo CGI.

#!/usr/bin/perl 

my $FormData = ''; 
read(STDIN, $FormData, $ENV{'CONTENT_LENGTH'}); 

## Variable $FormData holds all POST values passed 

use CGI; 
my $cgi = new CGI; 
print $cgi->header(); 
print "$FormData"; 
Cuestiones relacionadas