2012-06-18 18 views
5

Sto cercando di personalizzare uno script e ho bisogno di ottenere un valore POST da un modulo usando perl. Non ho sfondo per Perl ma questa è una cosa abbastanza semplice, quindi immagino che non dovrebbe essere difficile.come ottenere i valori POST in perl

Questa è la versione di PHP del codice mi piacerebbe avere in PERL:

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

So che questo non può essere affatto correlata alla versione PERL ma potrebbe aiutare Immagino chiarire che cosa esattamente mi sto cercando di fare.

+0

Puoi spiegare un po 'di più? – vijay

+2

@vjshah Non sono sicuro che tu sia sarcastico, ma certo, ho solo bisogno di sapere come ottenere il valore POST (da un modulo inviato) e assegnarlo a una variabile. –

risposta

6

Beh, in questo caso, si prega di dare un'occhiata a questo semplice codice: Ciò contribuirebbe: consigli

#!/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

Questo è un buon esempio, e penso di averlo capito, ma lo script corrente che sto usando utilizza i valori GET/POST. BUT non include 'nuovo CGI', esiste un modo alternativo per farlo? –

+1

In tal caso, un metodo può essere utilizzato da jQuery per gestire post.E puoi sempre includere il codice javascript in perl. print qq (#include le intestazioni jQuery ('form_id'). submit (function() {var val = jQuery ("id"). val();})); – vijay

+0

è perfetto :) Non pensavo di usare jquery. Grazie –

0

Ecco un buon punto di partenza: The Fool's Guide to CGI.pm, the Perl module for CGI scripting.

Questo mostrerà "... come ottenere il valore POST (da un modulo inviato) e assegnarlo a una variabile."

Spero che questo aiuti!

+0

L'ho scansionato e ho visto che si può fare 'param ('sample')' ora qualcosa che non riuscivo a trovare era come distinguere tra le richieste GET e POST ?? Non voglio ottenere valori 'GET', SOLO se' POST' è impostato il valore deve essere assegnato a $ download –

+0

$ ENV {'REQUEST_METHOD'} = ~ tr/a-z/A-Z /; if ($ ENV {'REQUEST_METHOD'} eq "POST") {#do qualcosa qui;} – d5e5

+2

Puoi usare 'CGI.pm''s' request_method() 'per verificare una richiesta' POST', ad es. 'my $ requestMethod = $ cgi-> request_method()'. – Kenosis

4

Stile: quasi mai necessario assegnare 0 o 1 a una variabile. Basta valutare il valore stesso nel contesto di bool.


Nel CGI.pm (CGI), il metodo param fonde POST e GET parametri, quindi abbiamo bisogno di ispezionare il metodo di richiesta separatamente:

#!/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), si dispone di metodi diversi per POST (body_parameters) e GET (query_parameters) oltre all'interfaccia mista (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

Gli esempi precedenti sono leggermente complicati. Il codice seguente legge i valori POST in una variabile. È possibile estrarre il valore chiave da quello. Se è GET allora è meglio usare il modulo 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"; 
Problemi correlati