在perl

时间:2018-01-16 21:57:16

标签: perl mason

我想使用表单提交电子邮件字段,以便服务器可以发送它。我使用Perl和Mason来处理这个问题。我希望用户能够添加多个附件,但是我遇到了一个我无法解决的问题。这是我尽可能简化的代码,并附加了附件检查。 (提交后我想留在同一页面,这就是为什么在Init部分中有一个隐藏的复选框和条件,所以当我第一次访问该页面时它什么都不做。)

<!DOCTYPE html>
<html>
%foreach (@messages) {
    <div class="alert">
        <% $_ | h %>
    </div>
%}
    <body>
       <form action="/Tools/SendEmail.html" name="form" enctype="multipart/form-data" method=post>
            <input type="checkbox" id="submited_chck" name="submited" checked hidden>
            <input type="file" name="attached_files" id="file_upload_btn" multiple> 
            <input type="submit" value="Submit">
        </form> 
    </body> 
</html>

<%args>
@messages => ()
$submited => ''
</%args>

<%init>

use strict;
use warnings;
use CGI;

if($submited eq 'on') {

    my $req = new CGI;

    my @attachments = $req->param('attached_files');

    unless (@attachments) {
        push @messages, "Attachments do not exist";
    }
}

</%init>

问题是如果我在提交之前做任何请求并添加任意数量的附件,它就不会从请求中获取附件,并且错误消息将被推送到数组并显示。仅当我重新启动apache服务并在其后立即提交表单时,它才会推送错误消息。有什么想法会导致这种情况吗?

2 个答案:

答案 0 :(得分:0)

您似乎错误地使用了hidden属性。 请阅读:https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden

所以我建议更换一下:

<input type="checkbox" id="submited_chck" name="submited" checked hidden>

用这个:

<input type="hidden" id="submited_chck" name="submited" value="on">

然后进一步调查。

答案 1 :(得分:0)

我只需要改变:

my $req = new CGI;

为:

my $req = $m->cgi_object;

现在它完美无缺。