Смотрите следующее, надеюсь, это даст вам хорошее представление о том, как удерживать поток управления «вправо», и поможет вам точно определить, какие части выполняют, что и что делать, в вашей форме:
#!/usr/bin/env perl
# Windows does not use #! to launch stuff!
use strict;
use warnings; # always!
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use DBI;
my $q = CGI->new;
my_program:
{
if ( !$q->param('Login') or !length $q->param('Login') ) {
print $q->header('text/html'), my_form(); # just display the form
last my_program;
}
my $password = $q->param('Password');
if ( !$password or !length $password ) {
print $q->header('text/plain'), "Please enter the Password";
last my_program;
}
my $dbh = DBI->connect(
"dbi:SQLite:DEVICE.db",
"", "",
{
RaiseError => 1,
AutoCommit => 1
}
);
my $sth = $dbh->prepare("select * from Settings where Password = ?");
$sth->execute($password);
if (my $pass = $sth->fetchrow_hashref) {
print redirect(-url => 'http://localhost/cgi-bin/Main.cgi');
last my_program;
}
print $q->header('text/plain'), "Invalid Password";
}
sub print_my_form {
return <<END1;
<HTML>
<HEAD>
<TITLE> </TITLE>
</HEAD>
<body>
<form NAME="login" METHOD="POST">
<input type="hidden" name="submit" value="Submit">
<TABLE align="center" bgcolor=#B0C4DE>
<TR>
<TD> Enter The Password And Click Login</TD>
</TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR>
<TD><b>PASSWORD</b> :<input type="password" name="Password" size="20" maxlength="15" /></TD>
</TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR></TR>
<TR>
<TR>
<TD align="center" colspan="2">
<input type="submit" name="Login" value="Login">
<input type="reset" name="submit" value="Cancel">
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
END1
}
Не берите в голову, что вы никогда не используете параметр «Логин» ... приведенное выше выполняет перенаправление так, как вам нужно, отображает ошибки без формы (используйте print my_form()
после строки заголовка, если вам нужно), ивыглядит немного чище.