perl

2012-06-18 17 views
5

में POST मान कैसे प्राप्त करें मैं एक स्क्रिप्ट को कस्टमाइज़ करने की कोशिश कर रहा हूं और perl का उपयोग करके किसी फॉर्म से POST मान प्राप्त करने की आवश्यकता है। मेरे पास perl की कोई पृष्ठभूमि नहीं है लेकिन यह एक साधारण बात है इसलिए मुझे लगता है कि यह कठिन नहीं होना चाहिए।perl

इस कोड का php संस्करण है मैं PERL में करना चाहते हैं:

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

मैं जानता हूँ कि यह बिल्कुल PERL संस्करण से संबंधित नहीं किया जा सकता है लेकिन यह मदद कर सकता है मैं स्पष्ट लगता है कि वास्तव में क्या मैं मैं देख रहा हूँ

+0

क्या आप थोड़ा और समझा सकते हैं? – vijay

+2

@vjshah मुझे यकीन नहीं है कि आप व्यंग्यात्मक हैं, लेकिन निश्चित रूप से, मुझे केवल यह जानने की जरूरत है कि POST मान कैसे प्राप्त करें (सबमिट किए गए फॉर्म से) और इसे एक चर के लिए असाइन करें। –

उत्तर

6

ठीक है, उस मामले में कृपया इस सरल कोड पर एक नजर है: यह आपको मदद मिलेगी:

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

यह एक अच्छा उदाहरण है, और मुझे लगता है कि मुझे यह मिल गया है, लेकिन वर्तमान स्क्रिप्ट का उपयोग मैं जीईटी/पोस्ट मूल्यों का उपयोग कर रहा हूं लेकिन इसमें 'नया सीजीआई' शामिल नहीं है, क्या ऐसा करने का कोई वैकल्पिक तरीका है? –

+1

उस स्थिति में, पोस्ट को संभालने के लिए एक विधि jQuery का उपयोग किया जा सकता है। और आप हमेशा जावास्क्रिप्ट कोड को perl में शामिल कर सकते हैं। प्रिंट qq (# हेडर jQuery ('form_id') शामिल करें। सबमिट करें (फ़ंक्शन() {var val = jQuery ("id")। val();})); – vijay

+0

यह सही है :) मैंने jquery का उपयोग करने के बारे में नहीं सोचा था। धन्यवाद –

0

यहां शुरू करने के लिए एक अच्छी जगह है: The Fool's Guide to CGI.pm, the Perl module for CGI scripting

यह आपको दिखाएगा "... POST मान कैसे प्राप्त करें (सबमिट किए गए फॉर्म से) और उसे एक चर के लिए असाइन करें।"

आशा है कि इससे मदद मिलती है!

+0

मैंने इसके माध्यम से स्कैन किया और देखा कि आप 'param' ('नमूना') कर सकते हैं, जो अब मुझे नहीं मिला था कि जीईटी और पोस्ट अनुरोधों के बीच अंतर कैसे किया जाए ?? मैं 'GET' मान प्राप्त नहीं करना चाहता हूं, केवल तभी' POST' सेट किया गया है, मान को –

+0

$ ENV {'REQUEST_METHOD'} = ~ tr/a-z/a-Z/डाउनलोड करने के लिए असाइन किया जाना चाहिए; यदि ($ ENV {'REQUEST_METHOD'} eq "POST") {# यहां कुछ करें;} – d5e5

+2

आप 'POI' अनुरोध' के लिए 'CGI.pm'' request_method() 'का उपयोग कर सकते हैं, उदाहरण के लिए, 'मेरा $ requestMethod = $ cgi-> request_method()'। – Kenosis

4

शैली सलाह: आप लगभग एक चर करने के लिए 0 या 1 आवंटित करने के लिए आवश्यकता नहीं है। बस बूल संदर्भ में मूल्य का मूल्यांकन करें।


CGI.pm (CGI) में, param पद्धति POST विलीन हो जाती है और मानकों को मिलता है, तो हम अलग से अनुरोध विधि का निरीक्षण करने की जरूरत है:

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

Plack::Request (PSGI) साथ

, आप पोस्ट के लिए अलग अलग तरीके है (body_parameters) और मिश्रित इंटरफेस के अलावा (query_parameters) प्राप्त करें (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

उपर्युक्त उदाहरण थोड़ा जटिल हैं। नीचे कोड एक चर में POST मान पढ़ता है। आप उस से महत्वपूर्ण मूल्य निकाल सकते हैं। यदि यह प्राप्त होता है तो 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"; 

 संबंधित मुद्दे