使用perl和检查输入从其他文档中的HTML表单获取输入

时间:2014-05-19 21:26:00

标签: html forms perl cgi

我有两个单独的perl文件:

  1. mailcheck.pl
  2. loggingpage.pl
  3. 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;
      }
      
    3. (我知道<<HTML (..) HTML块在它们前面不能有空格 - 在我的实际文档中,我已经以正确的方式编辑了块)

      我现在的问题是:

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

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

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

3 个答案:

答案 0 :(得分: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)的帮助。

答案 1 :(得分:1)

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

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;
  }
}

答案 2 :(得分:0)

不要以这种方式依赖JavaScript。 JS对您的表单进行额外的健全性检查非常有用,但它不应该是验证数据的唯一方法,也不是主要方法。

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

在您的表单和帖子没有使用JavaScript后,如果您想要进行一些客户端验证以复制您在perl中执行的操作,则可以添加onSubmit方法。