如何在文本文件中记录POST提交?

时间:2012-08-15 19:13:48

标签: forms perl

我有一个包含许多字段的表单。让我们简化并假装它现在只有forename / surname / email。我必须使用Perl来处理表单,因为我稍后需要用它来做其他事情。

在提交表单时,我需要它做三件事:

  1. 将对此表单的回复放入服务器上的文本文件中。

  2. 发送电子邮件提示,说明已提交新表单。它不需要包含表单数据,只需要新的表单数据。

  3. 向刚刚点击提交的人显示“感谢填写表格”页面。

  4. 我已经尝试过专注于让它做任何一件事,但我仍然不了解Perl足以做到这一点。我充其量只是一个HTML用户。这看起来像是一系列相当简单的事情,看起来就像某个地方会有一个“股票回答”的东西,但谷歌搜索的很多并在这里找到答案给了我任何东西!如果我能够对如何做第一个问题有所了解,那将是一个很好的开始,但我甚至无法做到那么远......☹

1 个答案:

答案 0 :(得分:1)

  1. 安装PlackMIME::Lite

    cpan Plack
    cpan MIME::Lite
    
  2. 使用纯HTML构建表单(将此名称命名为form.html或其他)。

    <form action="/send">
        <label>Enter some stuff:</label>
        <input type="text" name="stuff">
        <button type="submit">Send</button>
    </form>
    
  3. 编写PSGI应用程序(将此文件命名为app.psgi)。

    use strict;
    use warnings;
    use autodie;
    use Plack::App::File;
    use Plack::Builder;
    use Plack::Request;
    use MIME::Lite;
    
    builder {
        mount '/form.html' => Plack::App::File->new( file => "form.html" );
        mount '/send' => sub {
            my $req = Plack::Request->new($env);
    
            open my $fh, '>', 'form.txt';
            print $fh $req->content; # this will be ugly, but you didn't say what format
            close $fh;
    
            my $email = MIME::Lite->new(
                From => 'website@example.com',
                To => 'user@example.com',
                Subject => 'Form submitted from web site',
                Data => 'Read the subject.',
            );
            $email->send;
    
            return [ 
                200, 
                [ 'Content-Type' => 'text/html' ], 
                [ '<h1>Thanks for filling in the form.</h1>' ], 
            ];
        };
    
  4. 运行您的网络应用程序:

    plackup --port 5000 app.psgi
    
  5. 将浏览器指向:http://localhost:5000

  6. 完成。

  7. 这不是做这些事情的最好方法,但它是一种非常简单的方式来展示入门是多么容易,并提供了构建的基础。