指定的 CGI 应用程序行为不当,未返回完整的 HTTP 集 headers
Specified CGI application misbehaved by not returning a complete set of HTTP headers
我在我的脚本的 if 语句中没有发现任何错误,其中 "submit" 是此脚本以 html 形式传递的参数。错误说
"The headers it did return are "syntax error at
C:\perlscripts\triallast.pl line 125, near ") {"
我无法理解此错误的可能原因。有人可以帮助我吗?
print ("<html><head><title>Test insert questions</title></head>\n");
print ("<body>\n");
<form action = "$ENV{SCRIPT_NAME}" method="GET">
if (defined (param ("submit"))) {
$sql = "INSERT INTO $quiz_table_name ##(qnumber,question,answer,choice1,choice2,choice3,choice4,choice5)##
values(?, ?, ?, ?, ?, ?, ?, ?)";
if (!defined ($sql)) {
&errorPage("Can't insert " . $sql->errstr());
}
$qObj= $dbhandle->prepare($sql)or &errorPage("Can't prepare");
$qObj->execute($formHash{'qnumber'}, $formHash{'question'}, $formHash{'answer'}, $formHash{'choice1'}, $formHash{'choice2'}, $formHash{'choice3'}, $formHash{'choice4'}, $formHash{'choice5'});
$dbhandle->do(sql);
$qObj->finish();
}
问题是由您放在 Perl 代码中间的 HTML 块引起的。那不行。
<form action = "$ENV{SCRIPT_NAME}" method="GET">
您的 Perl 代码中的任何 HTML 都需要位于最终打印到 STDOUT 的字符串中。所以 link 应该是:
print qq(<form action = "$ENV{SCRIPT_NAME}" method="GET">);
请注意,我在这里使用了 qq(...)
,因为您想要一个双引号字符串,但您的字符串内容已经包含双引号字符。使用 qq(...)
是一种很好的处理方式,无需转义嵌入的双引号。
这将解决您的问题。但似乎你还需要努力理解这些东西是如何工作的。我不确定您是如何意识到需要打印 <html>
和 <body>
行,但没有看到需要打印 <form>
行。
而且,除此之外,现在是 2015 年。将原始 HTML 放入 CGI 程序中已经过时了十五年。请阅读 CGI::Alternatives 并选择更易于维护的方式来让您的生活更轻松。
我在我的脚本的 if 语句中没有发现任何错误,其中 "submit" 是此脚本以 html 形式传递的参数。错误说
"The headers it did return are "syntax error at C:\perlscripts\triallast.pl line 125, near ") {"
我无法理解此错误的可能原因。有人可以帮助我吗?
print ("<html><head><title>Test insert questions</title></head>\n");
print ("<body>\n");
<form action = "$ENV{SCRIPT_NAME}" method="GET">
if (defined (param ("submit"))) {
$sql = "INSERT INTO $quiz_table_name ##(qnumber,question,answer,choice1,choice2,choice3,choice4,choice5)##
values(?, ?, ?, ?, ?, ?, ?, ?)";
if (!defined ($sql)) {
&errorPage("Can't insert " . $sql->errstr());
}
$qObj= $dbhandle->prepare($sql)or &errorPage("Can't prepare");
$qObj->execute($formHash{'qnumber'}, $formHash{'question'}, $formHash{'answer'}, $formHash{'choice1'}, $formHash{'choice2'}, $formHash{'choice3'}, $formHash{'choice4'}, $formHash{'choice5'});
$dbhandle->do(sql);
$qObj->finish();
}
问题是由您放在 Perl 代码中间的 HTML 块引起的。那不行。
<form action = "$ENV{SCRIPT_NAME}" method="GET">
您的 Perl 代码中的任何 HTML 都需要位于最终打印到 STDOUT 的字符串中。所以 link 应该是:
print qq(<form action = "$ENV{SCRIPT_NAME}" method="GET">);
请注意,我在这里使用了 qq(...)
,因为您想要一个双引号字符串,但您的字符串内容已经包含双引号字符。使用 qq(...)
是一种很好的处理方式,无需转义嵌入的双引号。
这将解决您的问题。但似乎你还需要努力理解这些东西是如何工作的。我不确定您是如何意识到需要打印 <html>
和 <body>
行,但没有看到需要打印 <form>
行。
而且,除此之外,现在是 2015 年。将原始 HTML 放入 CGI 程序中已经过时了十五年。请阅读 CGI::Alternatives 并选择更易于维护的方式来让您的生活更轻松。