2013-11-26 86 views
0

嗨,我是新来的Perl和CGI和HTML 我正在Linux上工作,我的apache已正确配置。 我有一个简单的程序,应该要求您的用户名和密码,输入应该来自我的Perl脚本使用perl中的CGI模块生成的html文件。然后用户应该点击“登录”按钮,这个事件应该发送这些变量到另一个Perl脚本进行身份验证......我的问题是使用按钮的onClick属性发送这些变量。 我见过很多答案,说你应该使用“提交”按钮,但我无法得到这个工作和很多答案说你应该使用Javascript,但我也不知道这是如何工作,请帮助! 这是我的登录perl脚本(Login.plx):如何在html按钮onclick事件后运行perl脚本

require 'Authentication.plx'; 

use CGI; 
my $q = new CGI; 

print $q->header; 
print $q->start_html(-title => "Build Server"); 

print $q->h2("Login page"); 

print $q->start_form(
     -name  =>"Login_form", 
     -method  =>"GET" 
     -action  =>"Authentication.plx"); 

#Create textfield for Username, asigns value to $username 
print $q->p("Name:"); 
print $q->textfield(-name=> 'usernameInput', -value=> 'Ockert', size=>20, -maxlength=>80); 
my $username = $q->param('usernameInput'); 
#Create masked textfield for Password, asigns value to $password 
print $q->p("Password:"); 
print $q->password_field(-name=>'passwordInput', -value=>'starting value',-size=>20,-maxlength=>80); 
my $password = $q->param('passwordInput'); 
$password = crypt($password,12); 

#call subAuthentication subroutine 
print $q->submit(
    -name  => "btnLogin", 
    -value  => "Login"); 

print $q->end_form; 
print $q->end_html; 

而且子身份验证脚本(Authentication.plx):

use CGI; 
my $q = new CGI;  

sub subAuthentication { 

my $username = $q->param('$username'); 
my $password = $q->param('$password'); 

@return = ("Username not foud","Incorrect password","empty"); 

open(DATA,"<Users.txt") 
    or die "Can't open Users.txt"; 
$oneline = ""; 

foreach $oneline (<DATA>) { 

    #print "\nValue of counter is $count\n"; 

    chomp($oneline); 
    #print "oneline: $oneline\n"; 

    @oneline = split(',', $oneline, 3); 

    #get administrator or user  
    $return[2] = $oneline[2]; 

    if ($username eq $oneline[0]) 
    { 
     $return[0] = "true"; 
     ($password eq $oneline[1])? $return[1] = "true" : 0; 
     last; 
    } 
} 

close(DATA); 

return @return; 
} 

请帮助:)

+0

“我看到很多答案,说你应该使用”提交“按钮” - 是的,你应该,这正是提交按钮的用途。 - “但是我不能把它说出来” - 你想要达到什么样的代码? - “和很多答案都说你应该使用Javascript” - 在降低可靠性的同时大量​​地过度复杂化,不这样做。 – Quentin

+0

感谢@Quentin的帮助!我移动了start_form,以便窗体控件位于窗体内部...我仍然需要提交按钮的帮助,它不会正确提交窗体,然后:如何获取我发送给Authentication.plx的变量回到Login.plx? – Dogmatix

回答

0

你需要把你的表单控件内部为

事实上,您在输出表单控件后调用start_form


你需要得到提交的值(用->param),其中您提交给,而不是生成HTML表单中的脚本的脚本。在提交表单之前,他们将无法使用。


您还应该使用常规提交按钮,而不是带附加JavaScript的通用按钮。

如果您打算使用附加的JavaScript(通过onclick),那么它需要是实际的JavaScript而不是Perl。浏览器不支持客户端Perl。

相关问题