使用Perl的CGI,我想创建一个DB连接的登录页面。我正在使用IDE eclipse。虽然运行它,我得到的错误:我是perl-cgi的新手。我试图连接数据库与CGI脚本我得到这个错误
Server Error
while trying to obtain /sssss/login.cgi
Missing header from cgi output
这里是我的代码:
#!/usr/bin/perl
use strict;
use CGI qw(:standard);
use CGI::Pretty qw(:all);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use DBI;
use DBD::mysql;
use DBI qw(:sql_types);
use DBD::ODBC;
use CGI qw/:standard/;
use CGI;
my $cgi = CGI->new();
my $user='root';
my $pass='123';
my $dsn = 'DBI:mysql:delve:server';
my $dbh = &sql_connect;
$dbh-> {'LongTruncOk'} = 1;
$dbh-> {'LongReadLen'} = 90000;
print "Content-type: text/html\n\n";
print "<html><h1>OTT Login</h1></html>\n";
print '<body bgcolor="gray">';
#start a form----------------
print '<form method=POST>';
print '<p>';
print 'Employee Name: <p><INPUT type="text" name="User" size=25 maxlength=25></p>';
print '</p>';
# Create a text box for Password:---------------
print '<p>';
print 'Password:<p><INPUT TYPE=PASSWORD NAME="mypassword" id = "Password" size = "15" maxlength = "15" tabindex = "1"/></p>';
print '</p>';
#Create submit & reset button:-------------------
#print '<p><input type=" button" name="submitit"value="submit"onclick="formvalidation(myform)"/></p>';
print '<form name="input" method="post">';
print '<p><input type="submit" value="Submit" /><INPUT TYPE="reset" name = "Reset" value = "Reset"></p>';
#Create Change Password & Reset Password link:------------
print '<p><a href="changepwd.cgi">Change Password</a></p>';
print '<p><a href="userlogin.cgi">Reset Password</a></p>';
print '</form>';
#logic for submit button functionality :-----------------
if (param('User') and param('mypassword'))
{
my $usr=ucfirst(lc(param('User')));
my $pwd=ucfirst(lc(param('mypassword')));
my $query="select username from login where username='$usr'";
my $data=$dbh->prepare($query) or die $dbh->errstr;
$data->execute() or die $data->errstr;
my ($x,$y);
my $query1="select password from login where password='$pwd'";
my $data1=$dbh->prepare($query1) or die $dbh->errstr;
$data1->execute() or die $data->errstr;
if ($x=$data->fetchrow())
{
if ($y=$data1->fetchrow())
{
print "Correct Password";
print $cgi->redirect("samp.html");
}
else
{
print "Incorrect Password";
}
}
else
{
print "Invalid username";
}
$dbh->disconnect || die "$DBI::errstr\n";
}
sub sql_connect
{
Reconnect:
my $dbh = DBI->connect($dsn, $user, $pass,{AutoCommit => 1}) or warn "$DBI::errstr\a\a\n";
if(defined $dbh)
{
print "Data base Connected successfully\n";
}
else
{
print "Please Check Ur Database\n"; ### To handle Database Failure
sleep(10);
goto Reconnect;
}
return $dbh;
}
1;
从[堆栈溢出Perl常见问题](http://stackoverflow.com/questions/tagged/perl?sort=faq):[我如何解决我的Perl CGI脚本?](http://stackoverflow.com/questions/2165022/how-can-i-troubleshoot-my-perl-cgi-script) - 你需要学习如何进行基本的调试。安装所需的模块。减少程序,直到问题不再发生,找到让Eclipse认为没有头输出的部分。该程序从命令行运行,即打印必要的HTTP头和一些错误消息。 – daxim 2012-04-18 12:27:39
如果你从Perl开始,尽可能避免CGI。学习一个现代的网络框架,如[舞者](http://perldancer.org)或[Mojolicious](http://mojolicious.org/)。这个任务对你来说更容易(少写代码),结果可能会更安全。 – dolmen 2012-04-18 12:53:18
您使用'CGI'三次,'DBI'两次。你应该清理你的代码。也不建议直接使用任何'DBD :: *'模块。 – dgw 2012-04-18 12:54:18