以下是用Perl編寫的完整的可用CGI程序。它完全符合你的要求。除了編號爲水果的結果文件外,如果查找不成功或者用戶根本沒有輸入水果,還需要一個後退文件sorry-no-such-fruit.html
。
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI();
my %fruit_codes = (
apple => '2321.html',
banana => '1234.html',
coconut => '8889.html',
);
my $c = CGI->new;
my $fruit_parameter = $c->param('fruit_name');
my $iframe_document;
if (defined $fruit_parameter and exists $fruit_codes{$fruit_parameter}) {
$iframe_document = $fruit_codes{$fruit_parameter};
} else {
$iframe_document = 'sorry-no-such-fruit.html';
}
$c->header('application/xhtml+xml');
print <<"END_OF_HTML";
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Fruits</title>
</head>
<body>
<form action="fruits.cgi">
<fieldset>
<label for="fruit">Name of the fruit:</label>
<input id="fruit" name="fruit_name" type="text" />
<input type="submit" />
</fieldset>
</form>
<iframe src="$iframe_document">
<a href="$iframe_document">resulting fruit</a>
</iframe>
</body>
</html>
END_OF_HTML
1;
如果要修改這個計劃,我給你的最重要的安全忠告:不要輸出用戶提供的輸入(在這種情況下,$fruit_parameter
)不變。這可能會被濫用於至少跨站腳本。請一位專家程序員尋求幫助。
感謝daxim,我剛剛注意到我的主機不允許Perl,除非我付錢...你能提出一種方法,我可以在PHP中執行此操作嗎?有什麼辦法可以聯繫你關於上面的代碼嗎? – Haskella 2010-05-15 04:20:46
我不做PHP。 – daxim 2010-05-15 18:43:29