PHP'nin $ _POST bir Perl CGI komut ve nasıl kullanabilirsiniz eşdeğer nedir?

4 Cevap php

action.pl ve diğeri test.pl, iki Perl dosyaları

action.pl, bir formu vardır:

print $cgi->header, <<html;
<form action="test.pl" method="post">
html
while (my @row = $sth->fetchrow)
{
print $cgi->header, <<html;
ID:<input name="pid" value="@row[0]" readonly="true"/><br/>
Name: <input name="pname" value="@row[1]"/><br/>
Description : <input name="pdescription" value="@row[2]"/><br/>
Unit Price :<input name="punitprice" value="@row[3]"/><br/>
html
}
print $cgi->header, <<html
<input type="submit" value="update Row">
</form>
html

Kullanıcı tarafından gönderilen form değerleri erişmek için bu yüzden test.pl ne yazmak gerekir?

Diğer bir deyişle, PHP en $_POST['pid'] Perl ne eşdeğer?

4 Cevap

CGI kullanın ve param()

  use CGI ':standard';
  my $id    = param('id');
use CGI;
my $cgi = CGI->new();

for my $p ($cgi->param) {       # loop through all form inputs
    my $val = $cgi->param($p);  # get param's value
    # ...
}

'Pid' giriş, kullanım değerini almak için:

$cgi->param('pid');

Update: The test script may look like:

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $cgi = CGI->new();

printf "%sPid:%s", $cgi->header, $cgi->param('pid');

İlk olarak, warnings açmalısınız. Bunu, size kullanması gerektiğini $row[1], $row[2] ... @row elemanlara tek tek erişmek için fark olurdu yapmıştı. @row[0] tek elemanlı dizi dilim oluşturur.

İkincisi, bu tür HTML::Template gibi bir çiftleşmiş modülü kullanarak sunum mantığı ayıran yararlanacak. Sahip while yorumlu metinler okunamaz kodunu yapmak ile karışık döngüler.

Bir CGI form işleme paketini kullanarak komut geçirilen parametre değerlerini erişebilirsiniz. Bu gün, ben CGI::Simple Saner varsayılan vardır ve ile birlikte HTML nesil bagaj yok, çünkü CGI.pm kullanmak CGI::Simple yerine tercih {[(3) }].

use strict; use warnings;
use CGI::Simple;

my $cgi = CGI::Simple->new;
my $pname = $cgi->param('pname');

Son olarak, bu formda readonly olarak belirtilen olsa bile hala 'pid' doğrulamak gerektiğini akılda tutmak. Ben de yerine her biri için farklı bir komut dosyası olan daha çeşitli eylemler için işleyicileri sağlamak için CGI::Application kullanarak öneriyoruz.

İşte basit bir örnek:

#!perl

use strict; use warnings;
use CGI::Simple;
use HTML::Template;

my $cgi = CGI::Simple->new;

# For demo purposes only. I would use CGI::Application
$cgi->param ? process_form($cgi) : show_form($cgi);

sub process_form {
    my ($cgi) = @_;

    print $cgi->header('text/plain'),
        sprintf("%s : %s\n",
            $cgi->param('pid'),
            $cgi->param('pname'),
        )
    ;
    return;
}

sub show_form {
    my ($cgi) = @_;
    my $tmpl = HTML::Template->new(scalarref => template() );
    $tmpl->param(
        PRODUCTS => [
            { PID => '1234', PNAME => 'Widget' },
            { PID => '4321', PNAME => 'Wombat' },
        ]
    );
    print $cgi->header, $tmpl->output;
    return;
}

sub template {
    return \ <<EO_TMPL;
<!DOCTYPE HTML>
<html><head><title>Test</title></head>
<body>
<TMPL_LOOP PRODUCTS>
<form method="POST">
<p><input name="pid" readonly="1" value="<TMPL_VAR PID>">
<input name="pname" value="<TMPL_VAR PNAME>"><input
type="submit" value="Update"></p></form>
</TMPL_LOOP>
</body>
</html>
EO_TMPL
}

Alternatif olarak CGI.pm kaynaktan.

FETCHING THE PARAMETER LIST AS A HASH:
           use CGI;
           my $params = $q->Vars;
           print $params->{'address'};

           my @foo = split("\0",$params->{'foo'});
           my %params = $q->Vars;