指定的CGI应用程序因未返回完整的HTTP标头集而行为不端

时间:2015-10-28 23:02:50

标签: mysql perl cgi

我在if语句中找不到任何错误,其中"提交"是以此脚本的html格式传递的参数。错误说

  

"它返回的标题是"语法错误at   C:\ perlscripts \ triallast.pl第125行,靠近"){"

我无法理解造成此错误的原因。有人能帮助我吗?

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();
}

1 个答案:

答案 0 :(得分:1)

问题是由您放在Perl代码中间的HTML块引起的。这不起作用。

<form action = "$ENV{SCRIPT_NAME}" method="GET">

Perl代码中的任何HTML都需要包含在最终打印到STDOUT的字符串中。所以链接应该是:

print qq(<form action = "$ENV{SCRIPT_NAME}" method="GET">);

注意,我在这里使用qq(...)因为你想要一个双引号字符串,但你的字符串的内容已经包含双引号字符。使用qq(...)是一种处理它的好方法,而不必转义嵌入的双引号。

这将解决您的问题。但似乎你还需要了解这些东西是如何工作的。我不确定您是如何意识到需要打印<html><body>行,但是没有看到打印<form>行的必要性。

而且,除此之外,还有2015年。将原始HTML放入CGI程序已经过时了十五年。请阅读CGI::Alternatives并选择更易于维护的方式来让您的生活更轻松。