【发布时间】:2013-06-07 14:59:24
【问题描述】:
您好,我对 perl 非常陌生,并且遇到了一个问题,即我的部分脚本被跳过了。
我正在尝试验证用户。如果用户输入 admin 和 admin 它会显示欢迎屏幕,否则会显示错误。
脚本不断跳过我的 if 条件。有什么想法吗?
#!/usr/bin/perl
use CGI;
use strict;
use warnings;
my $object = new CGI;
print "Content-type: text/html\n\n";
if ($object->param("submit")) {
validate_form ();
} else {
display_form ();
}
sub validate_form {
my $user = $object->param("user");
my $password = $object->param("password");
my $user2 = "admin";
my $password2 = "admin";
my $wrong = "WRONG";
if (my $user == my $user2 && $password == $password2) {
print $password;
} else {
print $wrong;
}
}
sub display_form {
print <<END_HTML;
<html>
<head>
<title>Assignment 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post" action="/~int322_132sa13/cgi-bin/assn1/test2.pl" enctype="mu
User Name: <input type="text" name="user" />
Password:<input type="password" name="password" />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>
END_HTML
}
【问题讨论】:
-
你真的是
use warnings吗?您应该收到多条错误消息,说明到底哪里出了问题。他们说什么? (提示:变量被重新声明,undef 值被比较,字符串值被比较为数字)。哦,顺便说一句,打印密码似乎是个愚蠢的想法,我希望这不会是“生产代码”。 -
如果查看服务器日志中的错误工作量太大,您总是可以
use CGI::Carp qw(fatalsToBrowser);,use warnings FATAL也可以提供帮助。 -
@amon 我假设我应该使用 eq 而不是 ==。而这个纯测试环境。我得到的错误是“无法通过 test2.pl 第 6 行的包“CGI”找到对象方法“新”。又是 perl 的新手,不知道如何解决这个问题
-
display_form有效吗?我很确定最后的END_HTML不应该缩进。
标签: html perl perl-module