【问题标题】:Get input from HTML form in other document using perl and checking input使用 perl 从其他文档中的 HTML 表单获取输入并检查输入
【发布时间】:2014-05-20 19:10:10
【问题描述】:

我有两个单独的 perl 文档:

  1. mailcheck.pl
  2. loggingpage.pl

Mailcheck 以 html 格式打印出一个表单,用户可以在其中输入她/他的电子邮件,并检查输入是否是有效的电子邮件地址。然后它调用 loggingpage.pl,它将电子邮件保存在日志文件中,如果电子邮件地址成功存储,则向用户提供信息。

这是两个文件:

  1. mailcheck.pl:

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    print "Content-type: text/html\n\n";
    print <<HTML;
    <html>
    <head>
    <title>Mailcheck</title>
    </head>
    <body>
    <form name="ec" action ="./loggingfiles.pl" method="get">
    Email: <input type="text" name="email"> <br>
    <input type="button" value="Pruefen" onclick="javascript:emailcheck();">
    </form>
    <script language="javascript" type="text/javascript">
    function emailcheck()
    {
      var emailoutline = /^[a-z0-9._%+-]+\@[a-z0-9.-]+\.[a-z]{2,4}\$\/\;
      var x = document.ec.email.value;
      if (emailoutline.test(x))
      {
        open("./loggingpage.pl);
      }
      else
      {
        alert("Dies ist keine richtige eMailadresse!");
      }
     }
    </script>
    </body>
    </html>
    HTML
    exit;
    
  2. loggingpage.pl:

    #!/usr/bin/perl
    use strict;
    use warnings;
    use CGI qw(:standart);
    
    #reads the input of the form called "email"
    $emailinput = param('email');
    
    #saves the email in the logfile
    open(my $ml, ">", "./../logs/maillog.txt") or die "Fehlermeldung";    
    print $ml scalar(localtime()), " Email: ", $emailinput;
    close($ml);
    
    #gives out information about the saving process 
    if (...) #saving the email in the logfile succeeded
    {
      print <<HTML;
      <html>
      <head></head>
      <body>
      <script language="javascript" type="text/javascript">
      alert("Your input has been saved under the following email: " + $emailinput);
      </script>
      </body>
      </html>
      HTML
      exit;
    }
    else  #gives out warning if information was not stored right
    {
      print <<HTML;
      <html>
      <head></head>
      <body>
      <script language="javascript" type="text/javascript">
      alert("Error while saving your input.");
      </script>
      </body>
      </html>
      HTML
      exit;
    }
    

(我知道&lt;&lt;HTML (..) HTML 块前面不能有空格 - 在我的实际文档中,我以正确的方式编辑了块)

我现在的问题是:

一个。当我想查看邮件是否保存在日志文件中时,如何编写 if 条件?

b.我不太确定$emailinput = param('email'); 部分是否有效,因为我无法尝试,这是在 mailcheck.pl 中获取表单输入的正确方法还是我需要以不同的方式编写代码?

供您参考: - mailcheck.pl 工作正常。 - 在日志文件中保存电子邮件也可以正常工作(我尝试通过将变量定义为电子邮件并将其与当前日期一起保存到日志文件中......)

【问题讨论】:

    标签: html forms perl cgi


    【解决方案1】:

    所以我已经解决了这样的问题 a)(它似乎正在工作):

     open(my $ml, ">", "./../logs/maillog.txt") or die "Saving Error";
     print $ml scalar(localtime()), " Email: ", $emailinput;
     close($ml);
     #print "\nYour eMail was successfully logged!", $emailinput, "\n\n";
     print "Content-type: text/html\n\n";
     print <<HTML;
     <html>
     <head>
     <title>Mailcheck2</title>
     </head>
     <body>
       <p>Es wurde die folgende eMail erfolgreich gelogged:</p>
     </body>
     </html>
     HTML
     exit; 
    

    现在我只需要关于问题 b) 的帮助。

    【讨论】:

      【解决方案2】:

      执行验证后,使用以下方式提交表单:

      document.ec.submit(); // 'ec' is the name of your form
      

      这会将表单数据发送到表单的action 属性中定义的页面。

      更好的是,使用表单标签的onsubmit 属性来执行验证:

      <form name="ec" action ="./loggingfiles.pl" method="get" onsubmit="return emailcheck()">
      

      然后修改验证方法失败返回false:

      function emailcheck()
      {
        var emailoutline = /^[a-z0-9._%+-]+\@[a-z0-9.-]+\.[a-z]{2,4}\$\/\;
        var x = document.ec.email.value;
        if (!emailoutline.test(x))
        {
          alert("Dies ist keine richtige eMailadresse!");
          return false;
        }
      }
      

      【讨论】:

      • 好的,谢谢 - 我如何从 loggingpage.pl 的表单中读取输入?
      【解决方案3】:

      不要以这种方式依赖 JavaScript。 JS 对表单进行额外的完整性检查很有用,但它不应该是验证数据的唯一或主要方式。

      相反,将所有数据放在一个页面中,并在初始开发时删除任何 JS。使您的表单成为 POST 请求,并检测表单何时发布以确定您是否需要进行验证。您需要在 perl 中使用 JS 验证正则表达式,尽管最终您应该升级到 Email::Valid

      在您的表单和帖子在没有 JavaScript 的情况下工作后,如果您想进行一些客户端验证以复制您在 perl 中所做的事情,您可以添加一个 onSubmit 方法。

      【讨论】:

      • 谢谢你的帖子,但是,我应该使用这么多 JS - 这是一个家庭作业,它指定了 mailcheck.pl 中 JS 和正则表达式的使用。即使我必须使用 JS,关于如何解决我的问题的任何想法?
      猜你喜欢
      • 2014-07-08
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      相关资源
      最近更新 更多