2012-06-18 14 views
5

Próbuję dostosować skrypt i trzeba uzyskać wartość POST z formularza za pomocą perl. Nie mam tła perla, ale jest to dość prosta sprawa, więc myślę, że nie powinno to być trudne.Jak uzyskać wartości POST w perlu

To jest wersja PHP kodu chciałbym mieć w Perlu:

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

wiem, że to nie może być w ogóle związane z Perl w wersji, ale może pomóc Chyba wyjaśnienie co dokładnie mam zamierzam to zrobić.

+0

Czy możesz wyjaśnić nieco więcej? – vijay

+2

@vjshah Nie jestem pewien, czy jesteś sarkastyczny, ale na pewno, po prostu muszę wiedzieć, jak uzyskać wartość POST (z przesłanego formularza) i przypisać ją do zmiennej. –

Odpowiedz

6

Cóż, w takim razie proszę spojrzeć na ten prosty kodu: Byłoby to pomóc: porady

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

To jest całkiem dobry przykład, i myślę, że dostaję to, ale obecny skrypt, którego używam używa wartości GET/POST, ALE nie zawiera "nowego CGI", czy istnieje alternatywny sposób na zrobienie tego? –

+1

W takim przypadku jedną z metod można użyć jQuery do obsługi postu. Zawsze możesz dołączyć kod javascript do perla. print qq (# include nagłówki jQuery ('form_id'). submit (function() {var val = jQuery ("id"). val();})); – vijay

+0

thats perfect :) Nie myślałem o użyciu jquery. dzięki –

0

Oto dobre miejsce na rozpoczęcie: The Fool's Guide to CGI.pm, the Perl module for CGI scripting.

To pokaże "... jak uzyskać wartość POST (z przesłanego formularza) i przypisać ją do zmiennej."

Mam nadzieję, że to pomoże!

+0

Przeszukałem go i zobaczyłem, że możesz zrobić 'param ('sample')' teraz coś, czego nie mogłem znaleźć, to jak rozróżnić żądania GET i POST ?? Nie chcę uzyskać wartości 'GET', TYLKO jeśli ustawione jest' POST', wartość powinna być przypisana do $ download –

+0

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

+2

Możesz użyć 'CGI.pm'' request_method()', aby sprawdzić żądanie 'POST', np. 'mój $ requestMethod = $ cgi-> request_method()'. – Kenosis

4

styl: prawie nigdy nie trzeba przypisać 0 lub 1 do zmiennej. Po prostu oceń samą wartość w kontekście bool.


W CGI.pm (CGI) metoda param przechodzi POST i GET parametry, więc musimy sprawdzić metody żądania oddzielnie:

#!/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.'; 

Z Plack::Request (PSGI), masz różne metody POST (body_parameters) i GET (query_parameters) oprócz interfejsu mieszanego (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

Powyższe przykłady są nieco skomplikowane. Poniższy kod odczytuje wartości POST do zmiennej. Możesz wyodrębnić wartość klucza z tego. Jeśli jest to GET, to lepiej użyć modułu 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"; 
Powiązane problemy