使用cgi输出html表单

时间:2013-04-01 21:00:14

标签: html forms perl cgi

我想在开始我的cgi程序时输出一个html表单。我知道我可以通过以下示例perl脚本来完成此操作。

sub MakePage()
{
print "Content-type: text/html\n\n";
print "<html><head><title>Hello World Form</title></head><body>\n";

print "<center><big><big><big><strong>\n";
print "Hello World Form<p>\n";
print "</strong></big></big></big>\n";

print "<FORM ACTION=\"./stdin.cgi\" METHOD=\"POST\">\n";
print "The Field...<br>\n";
print "<input type=\"text\" name=\"TXhelloField\" size=\"100\" \n";
print "value=\"" . MakeString() . "\">\n";
print "<INPUT type=\"submit\" name=\"BXsub\" value=\"Submit\">\n";
print "</form>"; 

print "</body></html>\n"; 
}

MakePage();

但是,我想将html表单放在一个名为form1.html的文件中,然后用这样的方法调用它:

sub MakePage()
{
Location: form1.html;
}

我是cgi和perl的新手,我很难解决这个问题,并且在教程中没有太多运气。感谢。

3 个答案:

答案 0 :(得分:3)

您需要输出标题,以及合适的状态代码和说明。

print "Status: 302 Found\r\n"
print "Location: http://example.com/form1.html\r\n";
print "Content-type: text/html;charset=utf-8\r\n\r\n"; 

print "<!DOCTYPE HTML><html lang="en"><head><title>Moved</title></head><body><p>This document can be found at <a href="http://example.com/form1.html">http://example.com/form1.html</a>.</p>\r\n";

(注意:位置标题需要绝对URI,即使大多数浏览器都会播放错误恢复游戏)。

答案 1 :(得分:3)

看看HTML :: Template或Template :: Toolkit。它们将帮助您将HTML与perl代码分开。 e.g。

use HTML::Template;
use CGI;
my $template = HTML::Template->new(filename => 'form1.tmpl');
# replace MAKESTRING TMPL_VAR with string returned by your function
$template->param(MAKESTRING => MakeString()); 
my $cgi = CGI->new();
print $cgi->header();
print $template->output();

答案 2 :(得分:1)

如果您只是想进行重定向,我建议您使用CGI.pm的redirect方法(print $q->redirect('http://myserver.com/form1.html')),而不是手动打印HTTP标头。

如果您需要将任何Perl数据放入返回的页面,将页眉/页脚/侧边栏添加到页面等,然后使用正确的模板解决方案,正如imran建议的那样,绝对是可行的方法。 (哪一个?Template::Toolkit多年来一直是最受欢迎和广泛使用的模板引擎,但它的声誉很慢。其他好的选择是Template::Alloy,这是一个大多数下降 - 取代TT更快,或Text::Xslate,这是我个人使用的选择。)