我正在尝试在我的网站上创建一个网页,该网页从表单(名字,姓氏)获取输入,并通过PERL CGI脚本处理此输入并将该输入写入文件。
我还希望脚本运行后的页面显示一条消息,说明它已成功完成,并带有链接以返回主页。
我非常确定在引用脚本时我的HTML页面是正确的,所以我将在下面发布我的perl脚本。
提前致谢。
#!/usr/bin/perl
use strict; use warnings;
use CGI::Carp qw('fatalsToBrowser'); # send errors to the browser, not to the logfile
use CGI;
print header "Content-Type: text/html\n\n";
print start_html ("Receive Form Post");
my $datestring = localtime();
my $fname = param('firstname');
my $lname = param('lastname');
open (TESTFILE, '>>c:\inetpub\wwwroot\logfiles\bwrigsbee.txt') or die;
print TESTFILE "This file has been successfully edited on $datestring\n";
print TESTFILE "by $fname $lname\n";
close (TESTFILE);
print end_html;
调用脚本的页面中的HTML表单:
<form action="logwrite.pl" method="POST">
<table style="width:400px" border=1px border=solid border=black>
<tr>
<td>First name: <input type="text" name="firstname"></td>
</tr>
<tr>
<td>Last name: <input type="text" name="lastname"></td>
</tr>
<tr>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
来自浏览器的调试信息---&gt; 未定义的子程序&amp; main :: param在C:\ studentwebusers \ CIS33715 \ logwrite.pl第11行调用。
答案 0 :(得分:0)
删除使用CGI::Carp
电话中的单引号:
use CGI::Carp qw(fatalsToBrowser);
此外,您对header
的调用不应包含其他参数。它可以接受类型&text; html&#39;但所有其他信息都是错误
print header;
在您进行文件处理的任何时候使用autodie
。这样,您就不必为创建详细的错误消息而烦恼。并使用open
的3参数形式和词法精细句柄。
最后,继续使用CGI
中所有方法的对象表示法。这会将您的脚本更改为以下内容:
use strict;
use warnings;
use autodie;
use CGI::Carp qw(fatalsToBrowser); # send errors to the browser, not to the logfile
use CGI;
my $q = CGI->new;
print $q->header;
print $q->start_html("Receive Form Post");
my $datestring = localtime();
my $fname = $q->param('firstname');
my $lname = $q->param('lastname');
open my $fh, '>>', 'c:\inetpub\wwwroot\logfiles\bwrigsbee.txt';
print $fh "This file has been successfully edited on $datestring\n";
print $fh "by $fname $lname\n";
close $fh;
print $q->end_html;