我在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();
}
答案 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并选择更易于维护的方式来让您的生活更轻松。