Perl CGI表单输出

时间:2017-03-02 10:21:40

标签: perl cgi

大家好我正在尝试编写一个显示文件列表及其大小和时间戳的表单,并让用户选择一个或多个文件来下载它们。 我使用hash来包含与每个文件相关的文件名大小和时间戳,表单如下所示:

print $q->start_form(
        -name    => 'main_form',
        -method  => 'GET',
        -enctype => &CGI::URL_ENCODED,
        -onsubmit => '',
        -action => 'download_form.cgi', # Defaults to the current program
   );
    print $q->checkbox_group(
        -name     => 'file',
        -values   => \@files,
        -defaults => [''],
        -labels     => \%labels,
        -columns  => 1,
        -rows     => 1500,
    );   

    print $q->submit(
        -name     => 'submit_form',
        -value    => 'Download',
        -onsubmit => '',
    );
print $q->end_form;

其中 @files包含我可能要下载的文件列表 和 %标记文件名称的大小和时间戳

这很好用我得到了有效的输出,但读起来并不是很好,请看下面的例子:

filename1.zip大小:61.33MB [62799]时间戳:2017-02-22T07:13:00

filename2.txt文件大小:62.52MB [64020]时间戳:2017-02-22T07:13:00

filename000003.log文件大小:73.27MB [75033]时间戳:2017-02-22T06:00:00

file4.tar文件大小:63.46MB [64982]时间戳:2017-02-22T05:59:00

这一切都非常紧凑,对用户来说不是最理想的,有没有办法在一个表中显示文件名为1列,文件大小为1,时间戳为1,甚至显示3不同颜色/字体的信息,我最终得到1个数组@size与每个文件的大小和另一个@time与每个文件的时间戳,显然@size [1]对应@files [1]等等

1 个答案:

答案 0 :(得分:0)

只需创建一个表,并在生成表时将一个checkox插入循环中的每一行。

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use CGI;

my %labels = ( file1 => { size      => '61.33MB',
                          bytes     => 62799,
                          timestamp => '2017-02-22T07:13:00',
                        },
               file2 => { size      => '62.52MB',
                          bytes     => 64020,
                          timestamp => '2017-02-22T07:13:00',
                        });


my $q = 'CGI'->new;
print $q->header;
print $q->start_html;

print $q->start_form;
print $q->table({-border => 1},
    map {
        my $filename = $_;
        $q->Tr,
        $q->td(
            $q->checkbox('files', 0, $filename, $filename)
        ),
        map $q->td($labels{$filename}{$_}), qw( size bytes timestamp )
    } sort keys %labels
);

print $q->submit;

print $q->end_form;